我有一个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,因为它在值中使用逗号,这是一个合法的字段值。
谢谢
3条答案
按热度按时间rggaifut1#
现在默认的serde类是
org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
它由 Impala 支撑。不幸的是,它的特性少得多,对于exmaple来说,它不支持转义字符。xoshrz7s2#
Hive内
Impala 内
添加这些步骤,包括首先删除带有填充或接收serde表文件的\u impala表。
与Hive不同, Impala 绕过mapreduce。所以 Impala 不能/没有像mapreduce那样使用serde。
wfauudbj3#
你会用Hive吗?如果是这样的话,这里有一个可能有效的方法。
CREATE
您的table作为EXTERNAL TABLE
在Hive里用你的SERDE
在create语句的正确位置(我认为您需要像row format serde这样的东西在create table语句的末尾插入\u serde\u)。在此之前,您可能需要执行以下操作:请注意,jar应该位于hdfs中的某个位置,并且需要三个///才能正常工作。。。
然后,仍然在hive中,将表复制到另一个表中,该表以impala可以轻松使用的格式存储,例如parquet。类似于以下内容的操作将执行此复制:
现在在impala中,使用invalidatemetadata将元数据标记为过时:
现在,您应该可以愉快地在 Impala 中使用副本表了。
让我知道这是否有效,因为我可能会在不久的将来这样做。