Hive---如何处理json数据

问题:表中数据像如下这种情况(某个字段是JSON格式),想要单独取出JSON中的某个字段:id,ids,total_number 怎么办?

hive (first_test)> select * from user;
OK
user.id user.infos      user.device_id
1       {"id": 1701439105,"ids": [2154137571,3889177061],"total_number": 493}   201
2       {"id": 1701439106,"ids": [2154137571,3889177061],"total_number": 494}   301
Time taken: 0.035 seconds, Fetched: 2 row(s)

1、建表

create table user(
id int,infos string,device_id int)
row format delimited
fields terminated by '\t'
lines terminated by '\n';

2、导入数据

user.txt

1       {"id": 1701439105,"ids": [2154137571,3889177061],"total_number": 493}   201
2       {"id": 1701439106,"ids": [2154137571,3889177061],"total_number": 494}   301
load data local inpath '/opt/soft/hive/testjob/user.txt' into table user;

get_json_object

使用 get_json_object 函数,对json字符串进行解析
使用方式:
select get_json_object(json所在的列名,’$.json中字段名1’,…)

例如:

hive (first_test)> select get_json_object(infos,'$.id') from user;
OK
_c0
1701439105
1701439106
Time taken: 0.071 seconds, Fetched: 2 row(s)

json_tuple (官方推荐:效率高)

使用json_tuple函数,对json字符串进行解析
使用方式:
select json_tuple(json所在的列名,“json中字段名1”,…) from 表名;

例如:

hive (first_test)> select json_tuple(infos,"total_number") from user_tmp;
OK
c0
493
494
Time taken: 0.033 seconds, Fetched: 2 row(s)
首先,Kafka是一个分布式流处理平台,用于在高吞吐量的情况下处理大量的实时数据流。Hive是一个基于Hadoop的数据仓库工具,用于存储和查询大规模结构化和半结构化数据。 要将Kafka写入Hive,需要使用Debezium它是一个开源的、基于事件的可信变更数据捕获(CDC)平台。Debezium可以将数据库的变更事件转换为Kafka主题中的实时流,并且可以实时监控数据库中的变动。 要实现Kafka写入Hive,首先需要配置Debezium将数据库的变更事件连接到Kafka中。Debezium会以JSON格式将变更事件转换为Kafka消息,并将其写入指定的主题中。 然后,可以使用Kafka Connect来读取Kafka主题中的消息,并将其写入Hive中。Kafka Connect是Kafka提供的一组工具,用于将Kafka主题与外部数据系统进行连接。 在Kafka Connect中,可以使用HDFS Connector来将Kafka消息写入Hive。HDFS Connector会将Kafka消息转换为Hive支持的格式,并将其写入Hive表中。 需要配置HDFS Connector的连接器以指定Kafka主题、Hive表和目标位置。连接器会自动将Kafka消息转换为Hive表的列,并将其写入Hive表中的对应位置。 一旦连接器配置完成并启动,Kafka中的变更事件就会实时地写入Hive表中。可以通过查询Hive表来获取Kafka中的数据,并根据需要进行分析和处理。 总而言之,要将Kafka写入Hive,可以使用Debezium将数据库变更事件转换为Kafka消息,并使用Kafka Connect的HDFS Connector将Kafka消息写入Hive表中。这样就能实现将实时数据流从Kafka写入Hive的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值