备份DynamoDB表,动态列为S3

时间:2013-04-05 23:37:48

标签: amazon-web-services hive boto amazon-dynamodb amazon-emr

我已经阅读了其他几篇有关此内容的帖子,特别是这篇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脚本而不会失败。)

1 个答案:

答案 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