2017-11-08 8 views
1

amazon athenaでテーブルを作成しました。私は自分のデータをCSVファイル(2010年から2015年のデータを持つ1つの大きなファイル)として持っています。これはs3では分割されていません。私はathenaでパーティションを作成しようとしていますが、パーティションは結果を引き出すわけではありません。Amazon Athenaでパーティションが結果を返さない

ステップ1:このステップ2の後アテナ

CREATE EXTERNAL TABLE IF NOT EXISTS DATABASE.table1 (
NULL string, 
OrderID string, 
CustomerID string, 
EmailAddress string 
) 
PARTITIONED BY (OrderDate STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
'serialization.format' = ',', 
    'quoteChar' = '"', 
    'field.delim' = ',' 
) LOCATION 's3://XYZ/Orders/' 
TBLPROPERTIES ('has_encrypted_data'='false'); 

のテーブル作成手動読み込みパーティションを(私の受注日形式は、MM/DD/YY時間分である)は、そのパーティションが有する言う

ALTER TABLE table1 ADD PARTITION (orderdate='01/01/2010 00:00') location 's3://xyz/Orders/' 

正常に作成されましたが、これに対してクエリを実行しても結果が得られません。間違った方法でパーティションを作成していますか?なぜ結果を返さないのですか?どんな助けもありがとうございます。

下記のコメントを試した後、注文日時を使用してデータをクエリするとまだ結果を取得できません。ファイルのパスがこのように見えるアテナ(2年分の2つの別々のファイル)にファイルを再度アップロードしました。

s3://xyz/Orders/year/orders+2010.csv 
s3://xyz/Orders/year/orders+2014.csv 

これを実行した後でも、パーティションとクエリデータに日付範囲を使用することができません。

答えて

1

パーティションはサブディレクトリです。正しく定義されたAthenaは、関連するデータを含まないサブディレクトリをスキップできます。

たとえば、テーブルが日付(YYYY-MM-DD)でパーティション化されている場合、その日のデータのみを含むdate=2017-11-08というディレクトリが存在します。

すべてのデータが1つのCSVに格納されている場合、にはパーティションを使用できません。ファイルを適切なディレクトリ構造内の個々の日々のファイルに分割する場合、Athenaはより速く実行され、操作するのが安くなります。

Athenaはパーティションを生成できません。すでに分割されているデータをAthenaに提供する必要があります。 ADD PARTITIONMSCK REPAIR TABLEコマンドは、単にスキャンして既存のパーティションを使用するだけです。

はAWSビッグデータのブログを参照してください:Analyzing Data in S3 using Amazon Athena

+0

..Thanku問題を解決するために、なぜ私は結果を得ることができなかったのかを今完全に理解しています。私はもう一つの疑問を持っています。私の日付形式はmm-dd-yyyy hrs-minですが、athenaは他の日付形式です。毎年別々の日付範囲でs3にすべてのデータを再読み込みすると、データに違いはありませんか? – jsingh

+0

質問のテーブル定義はDateフィールドをStringとして扱っているようですので、クエリが格納されているフォーマットと一致する限り、どのフォーマットを使用しても問題ありません。ただし、日付を操作する場合(過去5日間のデータの選択など)は、実際の日付フィールドとして定義する方がよいでしょう。 –

+0

... opencsvserdeで文字列以外のデータ型を使用すると、解析エラーが発生します。だから私はその解決策が何であるか分からない。 – jsingh

0

一つの興味深いポイントを、S3内のフォルダがnot actually foldersあり、私はタグと考える傾向にあります。ディレクトリとして存在S3「フォルダ」などのWeb UIとS3のブラウザとして

s3://mybucket/mydata/date_partition=2017-01-01/customer_partition=12345/somdedata.csv 

特定のアプリケーションがありますが、APIを作り始めるとき:ジョンのポイントに、あなたは、スライスアンドダイスあなたのデータを、その後、そのようにタグ付けする必要があります彼らはそのように振る舞わないことがわかります。

この構造の素晴らしい点の1つは、Athenaが特定の「タグ」(たとえばdate_partition=2017-01-01/customer_partition=12345/)を持つすべてのファイルを同じパーティションにあるものとして扱うことです。したがって、Athenaの場合、これらは同等です。

s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/somehugefile.csv 
s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/asmallerfile.csv 
s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/anothersmallerfile.csv 

時には、このようなデータを分割することは本当に便利です。

+0

@John Rotenstein私はまだ何か情報を取り戻すことができません。あなたは私を助けてくださいCNA – jsingh

関連する問題