配置单元将 json 记录解析为 NULL
hive parsing json records as NULL
我有一个简单的蜂巢table:
hive> show create table tweets;
OK
CREATE EXTERNAL TABLE `tweets`(
`json_body` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'file:/tmp/1'
TBLPROPERTIES (
'bucketing_version'='2',
'transient_lastDdlTime'='1551081429')
Time taken: 0.124 seconds, Fetched: 13 row(s)
在文件夹 /tmp/1 中有一个文件 test.json 并且唯一
文件中的内容是 {"appname":"app-name"}
select 来自推文 returns NULL
hive> select * From tweets;
OK
NULL
Time taken: 0.097 seconds, Fetched: 1 row(s)
我知道要么是文件格式错误,要么是其他原因。有人可以帮忙吗
如果您希望 JsonSerDe 解析属性,请像这样创建 table:
CREATE EXTERNAL TABLE tweets (
appname string
)
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '/tmp/1' --this is HDFS/S3 location
;
另请阅读有关 JsonSerDe
的文档
如果您想将整个 JSON 对象作为字符串 json_body 那么您不需要 JSON SerDe,而是使用 TEXTFILE:
CREATE EXTERNAL TABLE tweets (
json_body string
)
STORED AS TEXTFILE
LOCATION '/tmp/1' --this is HDFS/S3 location
;
我有一个简单的蜂巢table:
hive> show create table tweets;
OK
CREATE EXTERNAL TABLE `tweets`(
`json_body` string COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
'file:/tmp/1'
TBLPROPERTIES (
'bucketing_version'='2',
'transient_lastDdlTime'='1551081429')
Time taken: 0.124 seconds, Fetched: 13 row(s)
在文件夹 /tmp/1 中有一个文件 test.json 并且唯一 文件中的内容是 {"appname":"app-name"}
select 来自推文 returns NULL
hive> select * From tweets;
OK
NULL
Time taken: 0.097 seconds, Fetched: 1 row(s)
我知道要么是文件格式错误,要么是其他原因。有人可以帮忙吗
如果您希望 JsonSerDe 解析属性,请像这样创建 table:
CREATE EXTERNAL TABLE tweets (
appname string
)
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
LOCATION '/tmp/1' --this is HDFS/S3 location
;
另请阅读有关 JsonSerDe
的文档如果您想将整个 JSON 对象作为字符串 json_body 那么您不需要 JSON SerDe,而是使用 TEXTFILE:
CREATE EXTERNAL TABLE tweets (
json_body string
)
STORED AS TEXTFILE
LOCATION '/tmp/1' --this is HDFS/S3 location
;