定制serde不受impala支持,用csv双引号查询文件的最佳方法是什么?

70gysomp  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(427)

我有一个csv数据,每个字段都用双引号括起来。当我创建配置单元表时使用serde'com.bizo.hive.serde.csv.csvserde'当在impala中查询上面的表时,我得到错误serde not found。
我在/usr/lib/impala/lib文件夹中添加了csv serde jar文件。
后来在 Impala 文献中研究发现, Impala 不支持自定义serde。在这种情况下,我如何才能克服这个问题,使我的csv数据与报价是照顾。我想使用csv serde,因为它在值中使用逗号,这是一个合法的字段值。
谢谢

rggaifut

rggaifut1#

现在默认的serde类是 org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe 它由 Impala 支撑。不幸的是,它的特性少得多,对于exmaple来说,它不支持转义字符。

xoshrz7s

xoshrz7s2#

Hive内

CREATE TABLE mydb.my_serde_table_impala AS SELECT FROM mydb.my_serde_table

Impala 内

INVALIDATE METADATA mydb.my_serde_table_impala

添加这些步骤,包括首先删除带有填充或接收serde表文件的\u impala表。
与Hive不同, Impala 绕过mapreduce。所以 Impala 不能/没有像mapreduce那样使用serde。

wfauudbj

wfauudbj3#

你会用Hive吗?如果是这样的话,这里有一个可能有效的方法。 CREATE 您的table作为 EXTERNAL TABLE 在Hive里用你的 SERDE 在create语句的正确位置(我认为您需要像row format serde这样的东西在create table语句的末尾插入\u serde\u)。在此之前,您可能需要执行以下操作:

ADD JAR 'hdfs:///path/to/your_serde.jar'

请注意,jar应该位于hdfs中的某个位置,并且需要三个///才能正常工作。。。
然后,仍然在hive中,将表复制到另一个表中,该表以impala可以轻松使用的格式存储,例如parquet。类似于以下内容的操作将执行此复制:

CREATE TABLE copy_of_table 
   STORED AS PARQUET AS
   SELECT * FROM your_original_table

现在在impala中,使用invalidatemetadata将元数据标记为过时:

INVALIDATE METADATA copy_of_table

现在,您应该可以愉快地在 Impala 中使用副本表了。
让我知道这是否有效,因为我可能会在不久的将来这样做。

相关问题