0

我已经阅读了有关此内容的其他几篇文章,尤其是这个问题,其中 greg 回答了如何在 Hive 中执行此操作。我想知道如何解释具有可变列数的 DynamoDB 表?

也就是说,原始 DynamoDB 表的行是通过不同的列动态添加的。我试图查看 Amazon 在其 DataPipeLine 服务中使用的 exportDynamoDBToS3 脚本,但它的代码如下所示,似乎没有映射列:

-- Map DynamoDB Table
CREATE EXTERNAL TABLE dynamodb_table (item map<string,string>)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "MyTable");

(顺便说一句,我也尝试过使用 Datapipe 系统,但发现它相当令人沮丧,因为我无法从文档中弄清楚如何执行简单的任务,例如运行 shell 脚本而不会一切都失败。)

4

1 回答 1

0

事实证明,我在原始问题中发布的 Hive 脚本工作得很好,但前提是您使用的是正确版本的 Hive。似乎即使将 install-hive 命令设置为安装最新版本,使用的版本实际上也取决于 AMI 版本。

经过一番搜索后,我设法在亚马逊的文档中找到了以下内容(强调我的):

创建一个引用存储在 Amazon DynamoDB 中的数据的 Hive 表。这与前面的示例类似,只是您没有指定列映射。该表必须恰好有一列类型为 map。如果您随后在 Amazon S3 中创建 EXTERNAL 表,则可以调用 INSERT OVERWRITE 命令将数据从 Amazon DynamoDB 写入 Amazon S3。您可以使用它在 Amazon S3 中创建 Amazon DynamoDB 数据的存档。因为没有列映射,所以无法查询以这种方式导出的表。在Hive 0.8.1.5 或更高版本中可以在不指定列映射的情况下导出数据, Amazon EMR AMI 2.2.3 及更高版本支持该功能。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMR_Hive_Commands.html

于 2013-04-08T17:40:36.040 回答