hive外部表,json serde获取所有空值

yxyvkwin  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(405)

我的数据存储在hdfs的/tmp/kafka/alert目录下的多个文件中。每个文件都包含新行分隔的json对象,如下所示。

{"alertHistoryId":123456,"entityId":123,"deviceId":"123","alertTypeId":1,"AlertStartDate":"Dec 28, 2016 12:05:48 PM"}
{"alertHistoryId":123456,"entityId":125,"deviceId":"125","alertTypeId":5,"AlertStartDate":"Dec 28, 2016 11:58:48 AM"}

我在下面添加了hivejson serde jar

ADD JAR /usr/local/downloads/hive-serdes-1.0-SNAPSHOT.jar;

我创建了如下表

CREATE EXTERNAL TABLE IF NOT EXISTS my_alert (
alertHistoryId bigint, entityId bigint, deviceId string, alertTypeId int,  AlertStartDate string
)
ROW FORMAT SERDE 'com.cloudera.hive.serde.JSONSerDe'
LOCATION '/tmp/kafka/alert';

已成功创建表。但是当我获取数据时,我得到了所有的空值。有人知道怎么解决吗?

ycggw6v2

ycggw6v21#

不要使用 Serde 添加jar和转换jar总是开销很大,而不是使用内置的get\u json\u对象和json\u元组来读取json
如果您只想使用json serde,那么可以看看这个配置单元json serde。在测试之前,首先验证json验证器。

lzfw57am

lzfw57am2#

您使用的是旧版本的json serde。您的json serde和hadoop发行版可能有问题。请找到下面的链接以获取新版本的json serde。按照链接中的步骤根据hadoop发行版进行构建。
https://github.com/rcongiu/hive-json-serde
请参阅下面的工作示例。

hive> add jar /User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar;
Added [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar] to class path
Added resources: [/User/User1/json-serde-1.3.8-SNAPSHOT-jar-with-dependencies.jar]
hive> use default;
OK
Time taken: 0.021 seconds
hive> CREATE EXTERNAL TABLE IF NOT EXISTS json_poc (
    > alertHistoryId bigint, entityId bigint, deviceId string, alertTypeId int,  AlertStartDate string
    > )
    > ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    > LOCATION '/User/User1/sandeep_poc/hive_json';
OK
Time taken: 0.077 seconds
hive> select * from json_poc;
OK
123456  123     123     1       Dec 28, 2016 12:05:48 PM
123456  125     125     5       Dec 28, 2016 11:58:48 AM
Time taken: 0.052 seconds, Fetched: 2 row(s)
hive>

如何构建jar。
maven应该安装在你的电脑上,然后像这样运行命令。 C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package 在我的例子中,我使用hdp2.3,所以我提供了 -Phdp23 如果您愿意使用hivejson-serde,希望能有所帮助。

相关问题