Amazon DynamoDB
开发人员指南 (API Version 2012-08-10)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

查询 DynamoDB 中的数据

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

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

使用聚合函数

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

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

使用 GROUP BY 和 HAVING 子句

可以使用 GROUP BY 子句收集多条记录中的数据。此子句通常与 SUMCOUNTMINMAX 等聚合函数一起使用。您还可以使用 HAVING 子句放弃不符合特定标准的任何结果。

以下示例返回了具有 ddb_features 表中的五个以上特征的州中的最高海拔列表。

Copy
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 中进行。

考虑名为“EastCoastStates”且包含以下数据的 DynamoDB 表:

Copy
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 外部表:

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

以下联接返回美国东海岸至少具有三个特征的州:

Copy
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 是一个 Hive 表,与 Amazon S3 中存储的一个 CSV 文件关联。ddb_features 表与 DynamoDB 中的数据关联。以下示例联接这两个表,返回了名称以“New”开头的州的地理特征。

Copy
create external table s3_east_coast_states (state_name STRING, state_alpha STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION 's3://bucketname/path/subpath/';
Copy
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%';