1

我有一个简单的蜂巢表:

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"}

从推文中选择返回 NULL

hive> select * From tweets;
OK
NULL
Time taken: 0.097 seconds, Fetched: 1 row(s)

我知道文件格式错误或发生了其他事情。有人可以帮忙吗?

4

1 回答 1

1

如果您希望 JsonSerDe 解析属性,则创建如下表:

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
;
于 2019-02-25T08:55:13.377 回答