如何使用 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

AWS EMR 上的持续集成

如何在 Amazon EMR 上的 pig 中使用 Python 流 UDF

AWS EMR 上的 Spark:使用更多执行器