如何使用EMR上的HiveQL将DynamoDB上的Map数据类型列导出为具有JSON数据类型的S3?

时间:2015-08-21 13:32:06

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

有些记录在DynamoDB上映射数据类型,我想使用EMR上的HiveQL将这些记录导出为具有JSON数据格式的S3。 你是怎么做到的?有可能吗?

我阅读了以下文档,但我想要的信息一无所获。

我尝试了以下步骤:

  1. 在DynamoDB上创建一个表

    TableName: DynamoDBTable1
    HashKey: user_id
    
  2. 将两条记录插入DynamoDB

    # record1
    user_id: "0001"
    json: {"key1": "value1", "key2": "value2"}
    
    # record2
    user_id: "0001"
    json: {"key1": "value1", "key2": "value2"}
    
  3. 在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"); 
    
  4. 将记录导出到S3

    INSERT OVERWRITE DIRECTORY 's3://some-bucket/exports/' select json from test where user_id = '0001';
    
  5. 确认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 个答案:

答案 0 :(得分:0)

DynamoDBStorageHandler类不支持以下DynamoDB数据类型,因此它们不能与dynamodb.column.mapping一起使用:

地图上 列表, 布尔, 空