我已经阅读了其他几篇有关此内容的帖子,特别是这篇question以及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脚本而不会失败。)
答案 0 :(得分:0)
事实证明,我在原始问题中发布的Hive脚本工作得很好,但前提是您使用的是正确版本的Hive。即使使用install-hive命令设置安装最新版本,所使用的版本实际上也依赖于AMI版本。
经过一段时间的搜索后,我设法在亚马逊的文档中找到了以下内容(强调我的):
创建一个引用Amazon DynamoDB中存储的数据的Hive表。这类似于 前面的示例,但您没有指定列映射。桌子 必须只有一列类型映射。如果你然后创建一个外部 在Amazon S3中,您可以调用INSERT OVERWRITE命令来写入数据 Amazon DynamoDB到Amazon S3。您可以使用它来创建亚马逊的存档 Amazon S3中的DynamoDB数据。由于没有列映射,因此无法查询表 以这种方式导出。在不指定列映射的情况下导出数据是 可在 Hive 0.8.1.5或更高版本中获得, Amazon EMR AMI 2.2.3及更高版本支持。
http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMR_Hive_Commands.html