查询 DynamoDB 中的数据 - Amazon DynamoDB
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

查询 DynamoDB 中的数据

以下示例显示了一些您可以使用 HiveQL 查询 DynamoDB 中存储的数据的方法。

这些示例引用了本教程 () 中的 ddb_features步骤 5:将数据复制到 DynamoDB 表。

使用聚合函数

HiveQL 提供内置函数以汇总数据值。例如,您可以使用 MAX 函数查找所选列的最大值。以下示例返回科罗拉多州的最高级别特征的海拔。

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

使用 GROUP BY 和 HAVING 子句

可以使用 GROUP BY 子句收集多条记录中的数据。这通常用于聚合函数,例如 SUMCOUNTMINMAX。 您还可以使用 HAVING 子句放弃不满足特定条件的任何结果。

以下示例返回 ddb_features 表中具有 5 个以上功能的状态的最高上升列表。

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

联接两个 DynamoDB 表

以下示例将另一个 Hive 表 (east_coast_states) 映射到 DynamoDB 中的表。语句是跨这两个表的联接。SELECT联接在集群上计算并返回。联接不在 DynamoDB 中进行。

考虑一个名为 DynamoDB 的包含以下数据的 EastCoastStates 表:

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");

以下联接将返回美国东海岸州,该州至少具有三个功能:

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以下示例联接这两个表,从名称以“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%';