2017-04-25 25 views
2

s3バケットディレクトリに複数のファイルがあります(すべてのファイルは同じディレクトリにあります)。 1つのファイルに4つの列があり、2つ目のファイルに6つの異なる列があるように、すべてのファイルの構造が異なります。 これらのファイルを使用してAthenaテーブルを作成するにはどうすればよいですか?アテナの構造が異なる複数のファイルの使い方

+0

SerDeを読み込むことができるかどうかは、ファイル形式によって異なります。あなたのファイル形式を説明できますか? JSON、CSV、ORC? –

+0

私はjsonファイルを使用しています – Prakash

+0

各ファイルからサンプルを共有してください(3行とします) –

答えて

-1

ファイルに異なるデータが含まれている場合は、別々の外部テーブル(それぞれ独自のCREATE EXTERNAL TABLEステートメントを持つ)として定義する必要があります。

これで、JOINを介して複数のテーブルでクエリを実行できます。

-1

以下のシナリオでは、

data1.json:

create external table data1 (
    a string, 
    b string 
) 
ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION 's3://bucket/x'; 
create external table data2 (
    c string, 
    d string 
) 
ROW FORMAT serde 'org.openx.data.jsonserde.JsonSerDe' 
LOCATION 's3://bucket/x'; 

は今、あなたは別々を通じて定義され、別のファイルを照会することができます:あなたは、次の表を作成することができます

{"c":"data3","d":"data4"} 

{"a":"data1","b":"data2"} 

data2.jsonテーブル。あなたが処理しなければならないのは、異なるファイルタイプが結果にヌルエントリを生成することだけです。

select * from data1 where a is not null; 
select * from data2 where c is not null; 
+0

data1.jsonとdata2.jsonの両方が同じディレクトリにある場合(たとえば、s3:/と、/bucket/dir /)?どのように私はテーブルのクエリを作成する場所を言及するだろう。それは有効なscenerioか、または両方のファイルが別のディレクトリに存在する必要がありますか? – Prakash

+0

技術的には、Athenaはディレクトリ内のすべてのファイルを処理できますが、ファイルエントリと一致しないためにヌル行を作成します。クエリのヌル行をフィルタリングすることは可能です。一方、ファイルタイプごとに1つのディレクトリを持つ方がずっときれいですが、これは必ずしも実行可能なわけではありません。ですから、1つのディレクトリに2つのテーブルを作成するだけです。上記のようなステートメントで「LOCATION 's3:// bucket/dir'」を使用して、1つのディレクトリに対して多くのテーブルを作成できます。 –

1

私は(そうでない場合は教えてください!)これは、現在、AWSアテナ/プレストでは不可能であると信じています。

アテナテーブルの外部ロケーション(常にEXTERNAL TABLE)は、ディレクトリでなければなりません。

s3://mybucket/folder/table/file_aおよびs3://mybucket/folder/table/file_b異なる構造では、SCHEMA_MISMATCHになります。

アテーナは、s3://mybucket/folder/table1/s3://mybucket/folder/table2/という形式のテーブルを想定しています。

更新:あなたはアテナは、常にすべてのファイルを検討する他に、別のフォルダに賢明なテーブルごとにファイルを移動する必要がある最初のパスの要件については

AWSのサポートとの会話から、 1つのテーブル用です。

関連する問題