1

私は360GBの圧縮(gzip)のパイプ区切りテキストファイルを持っています。 1,620を超える列があります。私は正確なフィールド名を示すが、ここではそれが基本的に何をすることはできません。awsの360gbのテキストファイルの1,620列をピボットする

primary_key|property1_name|property1_value|property800_name|property800_value 
12345|is_male|1|is_college_educated|1 

は真剣に、これらのプロパティ名/値フィールドの800の上にあります。 約2億8000万行があります。 ファイルはS3バケットにあります。 データをRedshiftに取得する必要がありますが、Redshiftの列の制限は1,600です。

ユーザーは私にデータをピボットさせたいと思っています。例:

primary_key|key|value 
12345|is_male|1 
12345|is_college_educated|1 

aws環境でファイルをピボットするにはどうすればよいですか?データは1つのファイルに保存されていますが、データを複数の異なるファイルに分割して並列処理が可能です。

私はAthenaの使用を検討しました。私はAthenaによって許可された列の最大数を示す何も見つけることができませんでした。しかし、私はPresto(Athenaが基づいています)について「厳しい限界はありませんが、数千以上のもので中断しているのを見ました」(https://groups.google.com/forum/#!topic/presto-users/7tv8l6MsbzI)というページを見つけました。

ありがとうございました。

答えて

1

私がAWSからほとんどの時間から学んだのは、あなたが限界に達しているならば、あなたはそれを間違った方法で、あるいはスケーラブルな方法でやっていないということです。ほとんどの場合、スケーラビリティ、パフォーマンスを考慮して設計されたアーキテクトです。

私たちは同様の問題を抱えていました。2000カラムありました。ここで私たちはそれを解決した方法です。

  1. それぞれ100 + 1(プライマリキー)列の20の異なるテーブルにファイルを分割します。
  2. 単一のクエリですべてのテーブルを選択して、必要なすべてのデータを返します。
  3. selectのすべての1600列を表示したい場合、ビジネスユーザーは分析や機械学習のために間違った列を探しています。

データの10TB +をロードするには、データを複数のファイルに分割して並列にロードする必要がありました。

アテナとレッドシフトの間には、パフォーマンスだけが異なります。残りは同じです。 RedshiftはAthenaよりも優れています。最初のロード時間とスキャン時間はRedshiftよりも高いです。

希望します。

2

まず、データをピボットしてから、Redshiftにロードします。より詳細には

、手順は次のとおりです。あなたの ソースS3のデータを読み込み、(異なるS3フォルダに)書き出す

  1. ラン(EMRまたは多分AWS接着剤を使用して)スパークジョブピボット バージョン。これは、あなたが800の値のペアを持っている場合、あなたは を800行書き出します。同時に、ファイルを複数の部分に分割してパラレルロードを有効にすることができます。
  2. これは、Redshiftにピボットされたデータを "COPY"します。
関連する問題