使用 JSON-SERDE 将 JSON 数据摄取到 Hive

Posted

技术标签:

【中文标题】使用 JSON-SERDE 将 JSON 数据摄取到 Hive【英文标题】:Ingesting JSON data into Hive using JSON-SERDE 【发布时间】:2018-08-03 23:48:16 【问题描述】:

我正在尝试使用 JSON-SERDE 将以下 JSON 数据摄取到 Hive 中,但出现错误。首先 - 这个 JSON 数据有效吗?如果是,如何创建agentId的这一列表,值为123456-123456。

"agentId":"string":"123456-123456"

CREATE EXTERNAL TABLE testingjson(
    agentId map <string>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE
LOCATION '/.../json_table';

编译语句时出错:FAILED: ParseException line 4:20 不匹配的输入“>”期望,在地图类型中的“字符串”附近

【问题讨论】:

【参考方案1】:

是的,json 是有效的。

试试下面的ddl和

如果你想要值 123456-123456 然后使用 select agentid['string'] from testingjson;

hive>CREATE EXTERNAL TABLE testingjson(
agentId map <string,string>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS TEXTFILE 
LOCATION '/.../json_table';

hive> select * from testingjson;
+-----------------------------+--+
|     testingjson.agentid     |
+-----------------------------+--+
| "string":"123456-123456"  |
+-----------------------------+--+
hiv> select agentid['string'] from testingjson;
+----------------+--+
|      _c0       |
+----------------+--+
| 123456-123456  |
+----------------+--+

【讨论】:

以上是关于使用 JSON-SERDE 将 JSON 数据摄取到 Hive的主要内容,如果未能解决你的问题,请参考以下文章

JSON 到 HIVE 摄取

摄取 JSON 对象数组并转换为表格数据

我们可以在将记录摄取到 Kusto 表之前更改 Kusto 列的值吗?

如何拆分 CSV 或 JSON 文件以获得最佳雪花摄取?

hive读取json文件

将平面数据文件从边缘设备摄取到 HDFS 并进行处理