如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?
Posted
技术标签:
【中文标题】如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?【英文标题】:How do you export a Map data type column on DynamoDB to S3 with JSON data type using HiveQL on EMR? 【发布时间】:2015-08-21 13:32:06 【问题描述】:在 DynamoDB 上有映射数据类型的记录,我想在 EMR 上使用 HiveQL 将这些记录以 JSON 数据格式导出到 S3。 你怎么做这个?有可能吗?
我阅读了以下文档,但我想要的信息什么都不是。
DynamoDB 数据格式文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html 用于导出的 Hive 命令示例... 文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/EMR_Hive_Commands.html我尝试了以下步骤:
在 DynamoDB 上创建表
TableName: DynamoDBTable1
HashKey: user_id
向 DynamoDB 中插入两条记录
# record1
user_id: "0001"
json: "key1": "value1", "key2": "value2"
# record2
user_id: "0001"
json: "key1": "value1", "key2": "value2"
从 DynamoDB 在 EMR 上创建表
CREATE EXTERNAL TABLE test (user_id string, json map<string, string>)
STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'
TBLPROPERTIES ("dynamodb.table.name" = "DynamoDBTable",
"dynamodb.column.mapping" = "user_id:user_id,json:json");
将记录导出到 S3
INSERT OVERWRITE DIRECTORY 's3://some-bucket/exports/' select json from test where user_id = '0001';
确认S3存储桶,但是导出的数据不是JSON格式...
# Expected
[
"key1": "value1", "key2": "value2",
"key1": "value1", "key2": "value2"
]
# Actual
key1^C"s":"value1"^Bkey2^C"s":"value2"
key1^C"s":"value1"^Bkey2^C"s":"value2"
【问题讨论】:
你有想过这个吗?或找到解决办法? 仍然没有解决此问题的方法? 【参考方案1】:DynamoDBStorageHandler 类不支持以下 DynamoDB 数据类型,因此它们不能与 dynamodb.column.mapping 一起使用:
地图, 列表, 布尔值, 空
【讨论】:
以上是关于如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?的主要内容,如果未能解决你的问题,请参考以下文章
[AWS][大数据][Hadoop] 使用EMR做大数据分析
如何将文件从 S3 复制到 Amazon EMR HDFS?
使用 S3DistCp 将文件从 HDFS 复制到 EMR 集群上的 S3