在Hive中读取Json格式数据

本文介绍了两种在Hive中解析JSON格式数据的方法:一是通过LATERAL VIEW将JSON字符串转换为模型;二是利用第三方SerDe将JSON字段拆分并存储在Hive表中。文章还提供了具体的实现步骤和示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果有时候遇到数据源是json的格式(比如直接读取mongoDB的数据), hive解析就要麻烦一点, 主要有以下2种方法:

1、将json以字符串的方式整个入Hive表,然后使用LATERAL VIEW json_tuple的方法(相当于生成json串的模型),获取所需要的列名。 这种方法还是比较麻烦,尤其是字段多的时候, 第二种方法用起来更方便.

2、使用第三方的SerDe将json拆成各个字段入Hive表里, 我使用的是hive1.2.1可以正常使用, 下载地址:http://download.csdn.net/download/ls386239766/8662797

# 添加jar包
hive> add jar /usr/local/hive/lib/json-serde-1.3-jar-with-dependencies.jar;
hive> 

# 创建hive表
CREATE TABLE test_json
(
    id BIGINT,
    text STRING,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.JsonSerde'
STORED AS TEXTFILE
;

LOAD DATA LOCAL INPATH "test.json" OVERWRITE INTO TABLE test_json;

如果觉得每次运行都要加载这个jar包比较麻烦, 可以把jar包路径添加到hive-env.sh里.

160258_zpUK_1583436.png

转载于:https://my.oschina.net/aibati2008/blog/698535

### 解析和格式JSON 数据 #### 使用 `get_json_object` 函数 在 Hive 中,可以通过内置的 UDF 函数 `get_json_object` 来解析 JSON 字符串并提取特定路径下的值。此方法适用于每次仅需从单个 JSON 对象中抽取一个字段的情况。 对于简单的 JSON 结构,可以直接指定键名来获取对应的值: ```sql SELECT get_json_object(json_column, '$.key') AS value FROM table_name; ``` 当面对嵌套结构时,则应提供完整的访问路径以定位目标元素[^1]。 #### 应对复杂多层 JSON 数据 针对更为复杂的多层次 JSON 文档,在实际项目里可能遇到像 MongoDB 导入的数据那样每行为独立 JSON 串的情形。此时同样依赖于 `get_json_object` 进行逐级拆解各层属性;不过由于其局限性——即单一调用只能取得一项成果——所以往往需要组合多个此类操作才能完全展开整个对象树形结构[^2]。 例如,假设有一个包含用户信息(姓名、年龄以及地址详情)的复合型 JSON 记录存储于列 `json_data` 下面的例子展示了怎样分别读取这些子项的内容: ```sql SELECT get_json_object(json_data, '$.name') as name, get_json_object(json_data, '$.age') as age, get_json_object(json_data, '$.address.city') as city, get_json_object(json_data, '$.address.street') as street FROM users_table; ``` 值得注意的是,尽管这种方法可行但对于大量重复性的字段提取工作来说效率较低且代码冗长不易维护。因此建议考虑其他更高效的解决方案如编写自定义 SerDe 或者利用第三方库实现批量转换功能[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值