从包含json字符串的parquet文件创建外部hive表



我有一个parquet文件,它存储在一个分区目录中。分区的格式为

/dates=*/hour=*/something.parquet.

parquet文件的内容如下:

{a:1,b:2,c:3}.

这是json数据,我想创建外部hive表。

我的方法:

CREATE EXTERNAL TABLE test_table (a int, b int, c int) PARTITIONED BY (dates string, hour string) STORED AS PARQUET LOCATION '/user/output/';

之后,我运行MSCK REPAIR TABLE test_table;,但我得到以下输出:

hive> select * from test_table;
OK
NULL    NULL    NULL    2021-09-27      09

其他三列为空。我想我必须以某种方式定义JSON模式,但我不知道如何进一步进行。

使用与parquet文件相同的模式创建表:

CREATE EXTERNAL TABLE test_table (value string) PARTITIONED BY (dates string, hour string) STORED AS PARQUET LOCATION '/user/output/';

运行维修表挂载分区:

MSCK REPAIR TABLE test_table;

查询中的解析值:

select e.a, e.b, e.c
from test_table t 
lateral view json_tuple(t.value, 'a', 'b', 'c') e as a,b,c

必要时将值转换为int:cast(e.a as int) as a

您还可以使用以下命令创建json字段作为列的表:

CREATE EXTERNAL TABLE IF NOT EXISTS test_table(
a INT,
b INT,
c INT)
partitioned by (dates string, hour string)
ROW FORMAT SERDE
'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS PARQUET
location '/user/output/';

然后运行MSCK REPAIR TABLE test_table;

您可以直接查询,而无需编写任何解析器。

最新更新