DynamoDB 内データのクエリ - Amazon DynamoDB

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

DynamoDB 内データのクエリ

次の例で、DynamoDB に保存されたデータへのクエリに、HiveQL を使用する方法をいくつか示します。

これらの例は、チュートリアル (ステップ 5: データを DynamoDB にコピーします) にある ddb_features テーブルを参照しています。

集計関数の使用

HiveQL では、データ値を集計するための組み込み関数が利用できます。例えば、選択した列で最大値を検索するためには MAX 関数を使用できます。次の例では、コロラド州で標高が最も高いという特徴を返します。

SELECT MAX(elev_in_ft) FROM ddb_features WHERE state_alpha = 'CO';

GROUP BY 句および HAVING 句の使用

GROUP BY 句を使用して、複数のレコードのデータを収集できます。これは、多くの場合、SUMCOUNTMIN、または MAX のような集計関数で使用されます。また、一定の基準を満たさない結果を破棄する場合には、HAVING 句を使用することもできます。

次の例では、ddb_features テーブルの中に 5 つ以上の特徴を持つ州での、最も高い標高のリストを返します。

SELECT state_alpha, max(elev_in_ft) FROM ddb_features GROUP BY state_alpha HAVING count(*) >= 5;

2 つの DynamoDB テーブルの結合

次の例では、DynamoDB 内のテーブルに対し、別の Hive テーブル (east_coast_states) をマッピングしています。SELECT ステートメントにより、これらの 2 つのテーブル間での結合が行われます。結合はクラスターで計算され、以下を返します。結合は DynamoDB 内では発生しません。

以下のデータが保存されている、EastCoastStates という名前の DynamoDB テーブルがあるとします。

StateName StateAbbrev Maine ME New Hampshire NH Massachusetts MA Rhode Island RI Connecticut CT New York NY New Jersey NJ Delaware DE Maryland MD Virginia VA North Carolina NC South Carolina SC Georgia GA Florida FL

このテーブルは、east_coast_states という名前の Hive 外部テーブルとして利用可能であると仮定します。

CREATE EXTERNAL TABLE ddb_east_coast_states (state_name STRING, state_alpha STRING) STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' TBLPROPERTIES ("dynamodb.table.name" = "EastCoastStates", "dynamodb.column.mapping" = "state_name:StateName,state_alpha:StateAbbrev");

次の結合により、少なくとも 3 つの特徴を持つ米国東海岸の州が返されます。

SELECT ecs.state_name, f.feature_class, COUNT(*) FROM ddb_east_coast_states ecs JOIN ddb_features f on ecs.state_alpha = f.state_alpha GROUP BY ecs.state_name, f.feature_class HAVING COUNT(*) >= 3;

異なるソースからのテーブルの結合

次の例では、s3_east_coast_states は、Amazon S3 に格納された CSV ファイルに関連付けられた Hive テーブルです。ddb_features テーブルは DynamoDB 内のデータに関連付けられています。この例では、これら 2 つのテーブルを結合し、名前が「New」で始まる州における地理的な特徴を返します。

create external table s3_east_coast_states (state_name STRING, state_alpha STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/';
SELECT ecs.state_name, f.feature_name, f.feature_class FROM s3_east_coast_states ecs JOIN ddb_features f ON ecs.state_alpha = f.state_alpha WHERE ecs.state_name LIKE 'New%';