0

Google Cloudストレージからファイルを読み取り、ファイルのフィールドであるtransaction_dateに基づいて複数のファイルに分割する必要があります。ファイルサイズは約6 TBです(複数のファイルに分割されています)。これを達成する最も効果的な方法は何ですか?これを行うには他の簡単な方法でDataflowやDataprocを使用する必要がありますか?Googleクラウドストレージ - ファイル内の値でファイルを分割する

+0

transaction_dateあたりのレコード数は、およそどのくらいですか?そして、あなたの入力フォーマットのファイルフォーマットは何ですか?また、出力用に同じファイルフォーマットを計画していますか? (改行で区切られたCSVかJSONなのか?) –

+0

データの90%が1つの日付であり、残りの10%は10日間までのものです。改行で区切られたCSVでは、同じ形式の出力を計画しています。 1ファイルを最大11ファイル(今日の90%+過去10日間の10%)に入れるだけです。 –

+0

1つのtransaction_dateに関連付けられたすべてのレコードが* single *ファイルに含まれている必要がありますか、トランザクション日のすべてのデータを簡単に取得できるように整理したいだけでしたか?取引日ごとに異なるディレクトリで除算されますか? –

答えて

1

私は、transaction_dateごとに別々の(シャードされた)ファイルを書きたいと思っています。データフローに同梱されているTextIO.Writeには直接的なサポートはありませんが、日付範囲を知っている特殊なケースがあると思われるため、〜11個の異なるフィルタリング済みのTextIO.Write変換を手動で作成します。

PCollection<Record> input = ... 

for (Date transaction_date : known_transaction_dates) { 
    input.apply(Filter.by(<record has this date>) 
     .apply(TextIO.Write.to(
      String.format("gs://my-bucket/output/%s", transaction_date))); 
} 

これは確かに理想的ではありません。 BigQueryIOには、データのウィンドウ化に基づいて別のテーブルに書き込む機能があります。同様の機能をTextIOに追加すると、ユースケースに対応する可能性があります。それ以外の場合は、さまざまな種類のデータ依存の書き込みがレーダー上にあり、あなたのようなケースが含まれます。

関連する問題