当前位置: 首页 > 知识库问答 >
问题:

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

公冶智刚
2023-03-14

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

我读了下面的文件,但我想要的信息是什么。

  • DynamoDB数据格式文档:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DataFormat.html
  • 用于导出的配置单元命令示例。。。文档: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个答案

    晁绍辉
    2023-03-14

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

    映射,列表,布尔值,空

     类似资料:
    • 根据这个文档,DynamoDB支持map(M)和list(L)类型,但是当我试图创建一个具有(L)类型的表时,我得到一个错误: ValidationException(客户端):检测到1个验证错误:attributeDefinitions处的值“L”。2.member.attributeType未能满足约束:成员必须满足枚举值集:[B,N,S] 将属性添加到表信息后发生此情况: 我的目标是为存储一

    • 主要内容:1、字符串,2、数字,3、布尔值,4、空,5、对象,6、数组JSON 是 Web 开发中使用最广泛的数据交换格式,它独立于编程语言,能够被大多数编程语言使用。本节我们来详细介绍一下 JSON 中支持的数据类型。 JSON 中支持的数据类型可以分为简单数据类型和复杂数据类型两种,其中简单数据类型包括:string(字符串)、number(数字)、boolean(布尔值)和 null(空);复杂数据类型包括:Array(数组)和 Object(对象)。 1、字

    • 问题内容: 我想计算具有时间数据类型的字段的总和。 我的桌子在下面: 在这里,我想对两个时间字段求和。我尝试了以下查询 但是它给出的输出为 但是我的期望输出将如下所示: 如何获得此输出? 问题答案: 您可以求和总计秒数,或。您可以使用一些数学将其格式化为时间字符串。例如,总分钟数为。例如: SQL Fiddle上的工作代码。

    • 问题内容: 我正在尝试使用以下代码定义一个。 如果运行此命令,则会收到错误消息。 这有什么问题? 问题答案: 它的问题在于PL / SQL语法。SQL不支持它。现在,我们使用PL / SQL定义类型(尤其是成员函数,构造函数等),但是类型本身是SQL对象,因此遵循SQL规则。这意味着我们必须使用显式数据类型声明Type属性。 我同意这是一种耻辱,如果我们可以像这样在类型声明中引用表列,那将是一件很

    • 问题内容: 背景 将列数据类型映射到其对应的Java类。 问题 查询从数据库返回元信息: 例如,此查询返回(自引用): 其中“ dictionary”是架构名称,“ resource_bundle”是object_name,“ column_name”是column_name。 要做类似的事情会很棒: 并返回以下查询: 然后使用JDBC发现已映射到。 问题 在PostgreSQL中,如何给定架构名

    • 问题内容: 有没有一种方法可以将JSON数据对象映射到可观察数组,然后又将可观察数组的每一项初始化为特定类型的视图模型? 我已经在这里查看了所有敲除的文档以及敲除和映射示例,但找不到适合我所追求的答案。 因此,我有以下JSON数据: 我有以下视图模型: 使用给定的数据结构并使用基因剔除的映射插件,是否有可能使生成的StateViewModel包含由2个CityViewModel填充的observa