【问题标题】:Mapping JSON in Hive where Nested Fields Have Underscores在嵌套字段有下划线的 Hive 中映射 JSON
【发布时间】:2014-07-10 19:24:13
【问题描述】:

我们正在尝试创建一个模式以将大量 JSON 结构加载到 Hive 中。但是,我们遇到了一个问题,因为某些字段的名称前导下划线 - 在根级别,这很好,但我们还没有找到一种方法来使嵌套字段工作。

示例 JSON:

{
    "_id" : "319FFE15FF908EDD86B7FDEADBEEFBD8D7284128841B14AA6A966923C268DF39",
    "SomeThing" : 
    {
            "_SomeField"     : 22,
            "AnotherField"   : 2112,
            "YetAnotherField":    1
    }
 . . . etc . . . .

使用如下模式:

create table testSample
( 
    id string, 
    something struct
    <
        somefield:int,
        anotherfield:bigint, 
        yetanotherfield:int
    >
) 
row format serde 'org.openx.data.jsonserde.JsonSerDe' 
with serdeproperties
(
    "mapping.id"        = "_id",
    "mapping.somefield" = "_somefield"
);

此架构构建正常 - 但是,在加载上述示例后,“somefield”的值(嵌套 + 前导下划线之一)始终为 null(所有其他值都存在且正确)。

我们尝试了很多语法组合,但都无济于事。

有谁知道 技巧 来创建一个名称中带有前导下划线的嵌套字段?

干杯!

【问题讨论】:

    标签: json hive bson


    【解决方案1】:

    在这里回答我自己的问题:没有诀窍,因为你做不到。

    但是,有一个简单的解决方法:您可以告诉 Hive 在创建架构时将名称视为文字。如果这样做,您还需要使用相同的文字语法进行查询。在上面的例子中,它看起来像:

    `_something` struct<rest_of_definitions>
    

    没有任何特殊的 serde 属性。 然后在查询中再次使用:

    select stuff.`_something` from sometable;
    

    例如,架构:

    create table testSample
    ( 
        id string, 
        something struct
        <
            `_somefield`:int,
            anotherfield:bigint, 
            yetanotherfield:int
        >
    ) 
    row format serde 'org.openx.data.jsonserde.JsonSerDe' 
    with serdeproperties("mapping.id" = "_id");
    

    对于像这样的输入 JSON:

    { 
        "_id": "someuid", 
        "something": 
        { 
            "_somefield": 1, 
            "anotherfield": 2, 
            "yetanotherfield": 3 
        }
    }
    

    查询如下:

    select something.`_somefield` 
    from testSample
    where something.anotherfield = 2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2021-12-04
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多