json - 在 Hive 中映射 JSON,其中嵌套字段具有下划线

标签 json hive bson

我们正在尝试创建一个架构来将大量 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”的值(嵌套+前导下划线)始终为空(所有其他值都存在并且正确)。

我们尝试了很多语法组合,但没有成功。

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

干杯!

最佳答案

在这里回答我自己的问题:没有什么技巧,因为你做不到。

但是,有一个简单的解决方法:您可以告诉 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;

关于json - 在 Hive 中映射 JSON,其中嵌套字段具有下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24684656/

相关文章:

json - 如何使用 groovy 获取确切的 json 节点实例?

sql - 如何规范化配置单元中的列?

xml - 在 Pig 中使用 Hcatalog 加载配置单元表时出错

delphi - Delphi 的 Bson 库?

c++ - 如何使用 C++ 驱动程序将 mongodb 数组保存到 vector 中?

json - 使用 aeson 解析 JSON 以获得复合数据类型

json - 在 Node.js/Express 中记录所有请求

c++ - 从 EEPROM 读取字符串时 ArduinoJson 解析失败

hadoop - Hive-HBase-Integration 中数据如何在 Hive 和 Hbase 之间移动或反射(reflect)?

bson - 理解 BSON 符号