我正在基于一个包含许多json blob的大json文件创建一个表。
json文件中有几行:
{"user_id": "047b5bba", "primary_status": "available", "secondary_status": "available", "start_time": "2021-03-01"}
{"user_id": "047b5bba", "primary_status": "working", "secondary_status": "available", "start_time": "2021-03-02"}
{"useuser_idrId": "047b5bba", "secondary_status": "working", "start_time": "2021-03-03"}
{"user_id": "047b5bba", "secondary_status": "complete", "start_time": "2021-03-04"}
所以你可以看到 primary_status
json blob中有时缺少。
我想创建一个具有以下架构的表:
CREATE TABLE IF NOT EXISTS {{ params.namespace }}.fct_purecloud_users_incremental (
`user_id` STRING,
`primary_status` STRING,
`secondary_status` STRING,
`start_time` STRING
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE
LOCATION '<file_path>'
但我发现 hive 里的table是这样的
user_id | primary_status | secondary_status | start_time
047b5bba available available 2021-03-01
047b5bba working available 2021-03-02
047b5bba null null null
047b5bba null null null
看起来好像没有 primary_status
字段,它将无法解析其余字段。
有人知道怎么解决这个问题吗?谢谢!
1条答案
按热度按时间huwehgph1#
您可以直接查询原始数据,而无需定义模式(模式不一致)。每一行都是一条记录,您可以使用json函数解析它:
下面的示例使用上面提供的记录创建一个temp表,使用json的查询返回值,否则就不可用。
如果需要,还可以编写一个cta来转换为标准表。