【发布时间】:2019-05-15 20:21:03
【问题描述】:
我在 Qubole(Hive) 中创建了一个外部表,它从 s3 读取 parquet(compressed: snappy) 文件,但是在执行 SELECT * table_name 我得到除分区列之外的所有列的空值 em>。
我尝试在 SERDEPROPERTIES 中使用不同的 serialization.format 值,但我仍然面临同样的问题。
在删除属性'serialization.format' = '1' 我得到ERROR: Failed with exception java.io.IOException:Can not read value at 0 in block -1 in file s3://path_to_parquet/。
我检查了 parquet 文件并能够使用 parquet-tools 读取数据:
**file_01.snappy.parquet:**
{"col_2":1234,"col_3":ABC}
{"col_2":124,"col_3":FHK}
{"col_2":12515,"col_3":UPO}
**External table stmt:**
CREATE EXTERNAL TABLE parquet_test
(
col2 int,
col3 string
)
PARTITIONED BY (col1 date)
ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
WITH SERDEPROPERTIES (
'serialization.format' = '1'
)
STORED AS PARQUET
LOCATION 's3://path_to_parquet'
TBLPROPERTIES ('parquet.compress'='SNAPPY');
Result:
col_1 col_2 col_3
5/3/19 NULL NULL
5/4/19 NULL NULL
5/5/19 NULL NULL
5/6/19 NULL NULL
Expected Result:
col_1 col_2 col_3
5/3/19 1234 ABC
5/4/19 124 FHK
5/5/19 12515 UPO
5/6/19 1234 ABC
【问题讨论】:
-
嗨,你可以试试:不指定行格式 serde 吗? (删除行格式 serde 的行)。如果不起作用,请重试:
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' -
您好,请检查 parquet 文件的架构,因为 Hive 表
col_3应该是String。请务必验证架构,然后重新创建 Hive 表以检查负载是否正确。 -
嘿@F.Lazarescu,谢谢,但我尝试删除行格式 serde 并添加了
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','但在这两种情况下它给了我同样的错误:( -
嘿@Joby,我检查了架构并更新了问题中的架构,这是错误的。谢谢