必要な列とデータ型を指定して Amazon Athena で CREATE TABLE ステートメントを実行しましたが、select * from <table-name> クエリを実行すると、出力は「返されたレコードはゼロです」になります。 

クエリから、「レコードはゼロです」が返される場合の一般的な原因は以下のとおりです。

クローラ設定で選択されているファイル

クローラを使用している場合は、クローラのポイント先がファイルではなく Amazon Simple Storage Service (Amazon S3) バケットであることを確認します。

LOCATION パスが正しくない

Amazon S3 への入力データの LOCATION パスを確認します。入力の LOCATION パスが正しくない場合、Athena は「レコードはゼロです」を返します。

パーティションがロード済みではない

テーブルに定義済みのパーティションがある場合、これらのパーティションが AWS Glue データカタログまたは Athena 内のデータカタログにロードされていない可能性があります。Athena は読み取り時にスキーマを適用するため、テーブルの作成時にのみ、Athena でメタデータが作成されます。データは、クエリの実行時にのみ解析されます。データは指定した場所にまだ存在していない可能性があるため、Athena から「レコードはゼロです」が返されます。パーティションを CREATE TABLE ステートメントで定義した場合は、MSCK REPAIR TABLE または ALTER TABLE ADD PARTITION コマンドを使用してパーティション情報をカタログ内にロードします。

MSCK REPAIR TABLE

パーティションが Athena でサポートされている形式で保存されている場合は、MSCK REPAIR TABLE コマンドを実行して、パーティションのメタデータをカタログ内にロードします。たとえば、テーブルが「Year (年)」でパーティション化されている場合、Athena は次のような S3 パスでデータを見つけることを想定します。

  • s3://mybucket/athena/inputdata/year=2016/data.csv
  • s3://mybucket/athena/inputdata/year=2015/data.csv
  • s3://mybucket/athena/inputdata/year=2014/data.csv

Athena が想定する S3 パスにデータがある場合は、次のようなコマンドを実行してテーブルを修理します。 

CREATE EXTERNAL TABLE Employee (
    Id INT,
    Name STRING,
    Address STRING
) PARTITIONED BY (year INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://mybucket/athena/inputdata/';

テーブルが作成されたら、次のようなコマンドを使用してパーティション情報をロードします。 

MSCK REPAIR TABLE Employee;

データがロードされると、select * from <table-name> クエリを実行したときにデータが返されるはずです。

ALTER TABLE ADD PARTITION

パーティションが Athena でサポートされている形式で保存されていないか、異なる S3 パスにロードされている場合は、パーティションごとに ALTER TABLE ADD PARTITION コマンドを実行します。たとえば、データが以下の S3 パスにあるとします。

  • s3://mybucket/athena/inputdata/2016/data.csv
  • s3://mybucket/athena/inputdata/2015/data.csv
  • s3://mybucket/athena/inputdata/2014/data.csv

これらのパスに対して、次のようなコマンドを実行します。 

ALTER TABLE Employee ADD
    PARTITION (year=2016) LOCATION 's3://mybucket/athena/inputdata/2016/'
    PARTITION (year=2015) LOCATION 's3://mybucket/athena/inputdata/2015/'
    PARTITION (year=2014) LOCATION 's3://mybucket/athena/inputdata/2014/'

データがロードされると、select * from <table-name> クエリを実行したときにデータが返されるはずです。 


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 12 月 15 日

更新日: 2018 年 09 月 17 日