問題タブ [etl]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 異なる解像度のデータ
2 つのテーブルがあり、外部ソースからこれらのテーブルにレコードが継続的に挿入されています。これらのテーブルがユーザー インタラクションの統計を保持しているとしましょう。ユーザーがボタンをクリックすると、そのクリックの詳細 (ユーザー、クリック時刻など) がテーブルの 1 つに書き込まれます。ユーザーがそのボタンをマウスオーバーすると、レコードが詳細とともに他のテーブルに追加されます。
多くのユーザーが常にシステムと対話している場合、大量のデータが生成され、それらのテーブルが非常に大きくなります。
データを見たいときは、時間単位または日単位の解像度で見たいです。
要求された解像度で (データが収集されるにつれて) データを段階的に継続的に要約する方法またはベスト プラクティスはありますか?
または、この種の問題に対するより良いアプローチはありますか?
PS。私がこれまでに見つけたのは、Talend のような ETL ツールが生活を楽にすることができるということです。
更新:現在MySQLを使用していますが、DB、環境などに関係なくベストプラクティスが気になります.
design-patterns - 複数入力・複数出力のシステム設計
バックグラウンド
このようなことを実行する必要があるアプリケーションをスケッチしています
問題のデータベースはすべて同じタイプですが、テーブルと構造が異なります。ロードされるオブジェクトは、すべて何らかのタイプの製品です。ファイルの構造は似ていますが、必ずしも同じではありません。一部は xml で、一部は csv などです。
カスタム アプリケーションは、リレーショナル データから取得したオブジェクトを操作するための一貫したインターフェイスを確保するために存在します。これは、各製品にいくつかのオプションがあり、製品がページ分割されて表示される単純な Web アプリケーションです。ORM によって保持される各レコードに追加データを追加します。
アプリケーションの各インスタンスでアクティブになるデータベースは 1 つだけですが、多くのファイル形式をアクティブにすることができます。これらのファイルの書き込みは同時に行われます。
質問
変換ステップを設計するための最良のアプローチを見つけるのに苦労しています。
さまざまなスキーマを 1 つのモデルに組み合わせることができるパターンはありますか? ここでは、すべてのデータベースに存在するフィールドのみがモデルに含まれるという前提があります。
そして、逆はどうですか?製品オブジェクトがファイルに書き込まれるのはいつですか?
私は戦略パターンなどのさまざまなパターンを見てきましたが、すべての断片が適切に収まるように見える瞬間がまだありません。
アプリケーション自体はおそらく PHP で作成されます。
c# - 大きなコード ブロックの単体テスト (マッピング、変換など)
私たちはほとんどのビジネス ロジックの単体テストを行っていますが、大規模なサービス タスクとインポート/エクスポート ルーチンのいくつかをテストする最善の方法に行き詰まっています。たとえば、あるシステムからサードパーティ システムへの給与データのエクスポートを考えてみましょう。会社が必要とする形式でデータをエクスポートするには、最大 40 個のテーブルにヒットする必要があり、テスト データを作成して依存関係をモックアウトするという悪夢のような状況が発生します。
たとえば、次のことを考えてみましょう (約 3500 行のエクスポート コードのサブセット)。
この特定のエクスポート クラスには、ExportPaychecks() というパブリック メソッドしかありません。これは、このクラスを呼び出す人にとって本当に意味のある唯一のアクションです...他のすべてはプライベートです(〜80のプライベート関数)。テストのためにそれらを公開することもできますが、それぞれを個別にテストするためにそれらをモックする必要があります (つまり、WriteHeaderRow 関数をモックしないと、ExportPaychecks を単独でテストすることはできません。これも大きな苦痛です。
これは単一のベンダーの単一のエクスポートであるため、ロジックをドメインに移動することは意味がありません。ロジックは、この特定のクラスの外ではドメインの意味を持ちません。テストとして、100% に近いコード カバレッジを持つ単体テストを構築しました ... しかし、これには、スタブ/モック オブジェクトに入力された非常に多くのテスト データに加えて、多くの依存関係をスタブ/モック化するために 7000 行を超えるコードが必要でした.
HRIS ソフトウェアのメーカーとして、何百もの輸出入を行っています。他の会社は本当にこの種の単体テストを行っていますか? もしそうなら、痛みを軽減する近道はありますか? 私は、「インポート/エクスポート ルーチンのユニット テストは行わない」と言って、後で統合テストを実装するだけの誘惑にかられます。
更新- すべての回答に感謝します。コードを混乱させることなく、大きなファイルのエクスポートのようなものを簡単にテスト可能なコードのブロックに変換する方法をまだ見ていないので、私が見たいのは例です。
ruby-on-rails - RailsアプリにデータをロードするためのETLフレームワーク
Rails アプリケーションのデータを、複数のプロバイダー (REST/SOAP ベースの XML フィード) からデータベースに定期的にロードする必要があります。毎回生成される cron ジョブによって開始される一連の Rake タスクを作成しました。各タスクはパートナー フィード エンドポイントに到達し、フィードを解析してデータベースに読み込みます。
Rake タスクを作成する代わりに、ActiveWarehouse ( http://activewarehouse.rubyforge.org/etl/ ) のような ETL フレームワークを使用する必要がありますか? Railsでこれを行う最善の方法について何か提案はありますか?
data-warehouse - OLAP DB からデータが消去されるのはいつですか?
OLAP は初めてです。
テーブル構造と ETL プロセスを理解しています。
ファクト テーブルからデータを削除するタイミングがわかりません。イベントのレポート アプリケーションを作成しているとします。各イベントには、完了までにかかった時間、終了コード、および読み取られた合計バイト数があります。時間や場所など、いくつかの次元があります。
毎日 100 万件の新しいレコードがファクト テーブルに用意されているとします。合計で 1 GB になります。ETL プロセスがファクト テーブルにデータを追加するだけの場合、そのテーブルは無限に大きくなります。いつファクト テーブルからデータを削除する必要がありますか? データをいくつかのファクト テーブル (月ごとのテーブルなど) に分割する必要がありますか?
経験則はありますか?
ありがとう
c# - C#でタブ区切りのテキストファイルを読み取るための最良の方法は何ですか
約100,000行、1行あたり約50列のテキストファイルがあり、ほとんどのデータはかなり小さいです(5〜10文字または数字)。
これは非常に単純なタスクですが、このデータをC#データ構造(たとえば、DataTable)にインポートするのに最適な方法は何か疑問に思っていますか?
powershell - Powershellで、大きなテキストファイルをレコードタイプごとに分割する最も効率的な方法は何ですか?
私はいくつかのETL作業にPowershellを使用しており、圧縮されたテキストファイルを読み込んで、各行の最初の3文字に応じて分割しています。
入力ファイルをフィルタリングするだけの場合は、フィルタリングされたストリームをOut-Fileにパイプして、それで処理できます。しかし、出力を複数の宛先にリダイレクトする必要があります。私が知る限り、これは単純なパイプでは実行できません。すでに.NETストリームリーダーを使用して圧縮された入力ファイルを読み取っていますが、ストリームライターを使用して出力ファイルを書き込む必要があるかどうか疑問に思っています。
ナイーブバージョンは次のようになります。
これは悪いニュースのように見えます。ファイルを1行に1回検索、開く、書き込む、閉じるということです。入力ファイルは500MB以上の巨大なモンスターです。
これをPowershell構造で効率的に処理する慣用的な方法はありますか、それとも.NETストリームライターを使用する必要がありますか?
これに使用できる(New-Item "path" -type "file")オブジェクトのメソッドはありますか?
コンテキストの編集:
DotNetZipライブラリを使用してZIPファイルをストリームとして読み取ります。したがって、 /streamreader
ではなく。サンプルコード:Get-Content
gc
私はおそらくDispose()
$zipfileと$readerの両方を使用する必要がありますが、それは別の質問です!
web-applications - WebベースのデータインポートとETL用のモジュールまたはツール?
ユーザーがデータをインポートできる機能をWebアプリケーションに追加します。車輪の再発明をしたくないので、これを処理する統合可能なモジュールを探しています。
インターフェイスは、ExcelまたはAccessにファイルをインポートする場合と同様である必要があります。さらに、ETLソフトウェアに通常見られるより複雑なマッピングおよび型変換関数があります。
一般的なフロー:
- ファイルをアップロードする(CVS、Excelなど)
- ファイル内のデータをプレビューします-最初の行を列名として使用し、最初のNレコードを表示して、ユーザーがファイルが正しく解析されたことを確認できるようにします
- マッピングインターフェイスを表示して、ソース列と宛先列をどのように一致させるかを選択します
- インポートを処理し、データを検証します
- 失敗した行のみのファイルをダウンロードするオプションを使用して、インポートに失敗したデータのレポートを提供します
sql-server - SQL Server Integration Services (SSIS) は、実行されるたびに C# コードを再コンパイルしますか?
リアルタイムでデータを取得し、データベースにレコードを追加するプロセスがあります。Extract Transform Load (ETL) プロセスを実行するために、SQL Server 2008 Integration Services を使用しています。FTP サイトから約 50 個のファイルをダウンロードして処理し、ファイルをアーカイブします。
問題は、ファイルが非常に小さく (約 10 行)、処理コードがかなり単純であるにもかかわらず、ファイルごとに処理に約 17 秒かかっていることです。マシンの負荷を見ると、CPU バウンドであり、ネットワーク、ディスク、またはメモリに多くのトラフィックはありません。
SSIS は、実行されるたびに C# コードを再コンパイルしている可能性があると思います。誰かが同様の問題に遭遇しましたか?または、同様のプロセスを問題なく使用しましたか?
dtsx パッケージのプロファイリングを可能にするツールはありますか?