如何在HIVE中查询JSON格式数据并提取指定date字段
Hive 查询JSON格式数据操作方法
通用查询方案
Hive查询JSON格式数据分两种常见使用场景:
场景1:表存储的是整行JSON字符串
如果你的表是直接将完整JSON作为单个字符串字段存储,比如表名为raw_json_table,存储JSON的字段名为json_content,可以使用Hive内置的get_json_object函数提取指定字段:
- 提取date字段的查询语句:
SELECT get_json_object(json_content, '$.date') AS `DATE` FROM raw_json_table;
其中$.date就是JSON中对应date字段的路径,嵌套字段可以按层级写,例如$.user.base.age。
场景2:通过JSON SerDe建表映射字段
如果需要频繁查询JSON中的多个字段,推荐直接使用JSON SerDe在建表时就将JSON的key映射为Hive表的字段,后续可以像查询普通表一样操作:
- 建表语句示例:
CREATE EXTERNAL TABLE IF NOT EXISTS app_json_data ( space STRING, app STRING, profile STRING, date STRING ) ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' LOCATION '/你的HDFS路径/存放JSON数据的目录';
- 查询date字段语句:
SELECT date AS `DATE` FROM app_json_data;
输出格式适配(首行显示DATE:)
如果你需要输出结果第一行显示DATE:,可以用以下两种方式实现:
- 方式1:SQL层面拼接固定行
-- 场景1适配 SELECT 'DATE:' AS `DATE` UNION ALL SELECT get_json_object(json_content, '$.date') AS `DATE` FROM raw_json_table; -- 场景2适配 SELECT 'DATE:' AS `DATE` UNION ALL SELECT date AS `DATE` FROM app_json_data;
- 方式2:开启Hive客户端表头显示
在执行查询前先执行配置命令:
set hive.cli.print.header=true;
之后执行任意查询语句都会自动显示字段别名作为表头,你将查询的字段别名设为DATE即可输出符合要求的格式。
内容的提问来源于stack exchange,提问作者user3461502
相关产品推荐
相关产品推荐

