Hive external table with JSON SerDe 获取所有 NULL 值
Hive external table with JSON SerDe fetching all NULL values
我的数据以多个文件的形式存储在目录 /tmp/kafka/alert 的 HDFS 中。每个文件都包含换行符分隔的 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"}
我添加了配置单元JSON SerDe jar 使用下面
ADD JAR /usr/local/downloads/hive-serdes-1.0-SNAPSHOT.jar;
我用以下
创建了 table
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';
table 创建成功。但是当我获取数据时,我得到了所有空值。有人知道如何解决这个问题吗?
不要使用 Serde
添加 Jar 并转换它们总是 overhead.Rather 而不是使用内置 get_json_object and json_tuple .if you are looking for an example how to use see this blog querying-json-records-via-hive
阅读 JSON
如果您只想使用 JSON Serde,请查看此 Hive-JSON-Serde. Before test it out first of all validate the JSON Validator。
您正在使用旧版本的 JSON Serde。您的 JSON Serde 和 Hadoop 发行版可能存在问题。
请在下面找到 link 以获取 Json Serde 的新版本。按照 link 中的步骤根据您的 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 应该安装在您的 PC 上然后 运行 这样的命令。
C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package
在我的例子中,我使用的是 hdp2.3,所以我提供了 -Phdp23
如果您愿意使用 Hive,希望对您有所帮助 JSON Serde。
我的数据以多个文件的形式存储在目录 /tmp/kafka/alert 的 HDFS 中。每个文件都包含换行符分隔的 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"}
我添加了配置单元JSON SerDe jar 使用下面
ADD JAR /usr/local/downloads/hive-serdes-1.0-SNAPSHOT.jar;
我用以下
创建了 tableCREATE 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';
table 创建成功。但是当我获取数据时,我得到了所有空值。有人知道如何解决这个问题吗?
不要使用 Serde
添加 Jar 并转换它们总是 overhead.Rather 而不是使用内置 get_json_object and json_tuple .if you are looking for an example how to use see this blog querying-json-records-via-hive
如果您只想使用 JSON Serde,请查看此 Hive-JSON-Serde. Before test it out first of all validate the JSON Validator。
您正在使用旧版本的 JSON Serde。您的 JSON Serde 和 Hadoop 发行版可能存在问题。 请在下面找到 link 以获取 Json Serde 的新版本。按照 link 中的步骤根据您的 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 应该安装在您的 PC 上然后 运行 这样的命令。
C:\Users\User1\Downloads\Hive-JSON-Serde-develop\Hive-JSON-Serde-develop>mvn -Phdp23 clean package
在我的例子中,我使用的是 hdp2.3,所以我提供了 -Phdp23
如果您愿意使用 Hive,希望对您有所帮助 JSON Serde。