json serde-mapping列名

x33g5p2x  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(265)

我使用mapping columns的json serde特性来重命名json文档中的一列'customer id'->'customer\u id'。之所以使用mapping函数,是因为hql不允许在create表定义中使用空格。
json文档如下所示:

{"browser":"Safari",
"device_uuid":"gftgbvnfg-ed1ae6de-e2df-11e1-4c20-00ef75f32667",
"custom":    
     {"Customer ID":"4985495}"
}

创建表配置单元如下所示:

CREATE TABLE json_serde_test
(
    browser        STRING,
    device_uuid    STRING,
    custom         struct< customer_id : STRING >
)

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('json.mappings' = 'custom.Customer ID:custom.customer_id')
STORED AS TEXTFILE;

当我尝试查询json\u serde\u测试表时,自定义字段返回:

{"customer_id":null}
szqfcxe2

szqfcxe21#

注:我是serde的作者。编辑的答案,因为我第一次回答只是从记忆和它是不正确的。这个可以用(测试)

CREATE TABLE json_serde_test
(
    browser        STRING,
    device_uuid    STRING,
    custom         struct< customer_id : STRING >
)

ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('mapping.customer_id' = 'Customer ID')
STORED AS TEXTFILE;

LOAD DATA LOCAL INPATH 'data.txt' OVERWRITE INTO TABLE json_serde_test;

Map的形式应为:mapping.hive column=json column
我测试了它,它正常工作:

hive> select custom from json_serde_test;
OK
{"customer_id":"4985495}"}

相关问题