Impala不支持自定义SerDe,用带双引号的CSV查询文件的最佳方法是什么?

pra*_*ads 4 csv hadoop double-quotes impala

我有一个CSV数据,每个字段都有双引号。当我创建使用Serde'com.bizo.hive.serde.csv.CSVSerde'的Hive表时,在Impala中查询上面的表时,出现错误SerDe。

我在/ usr / lib / impala / lib文件夹中添加了CSV Serde JAR文件。

后来在Impala文档中研究了Impala不支持自定义SERDE。在这种情况下,我将如何克服这个问题,使带引号的CSV数据得到保护。我想使用CSV Serde,因为它使用值中的逗号(这是合法的字段变量)。

非常感谢

Mat*_*teo 5

可以使用Hive吗?如果是这样,这是一种可行的方法。CREATE将您的表作为EXTERNAL TABLEHive 中的一个,并SERDE在CREATE语句的正确位置使用您的表(我认为您需要在CREATE TABLE语句末尾使用ROW FORMAT SERDE your_serde_here之类的东西)。在此之前,您可能需要执行以下操作:

ADD JAR 'hdfs:///path/to/your_serde.jar' 
Run Code Online (Sandbox Code Playgroud)

请注意,该jar应该位于hdfs中的某个位置,并且需要三倍///才能正常工作...

然后,仍在Hive中,将该表复制到另一个表中,该表以Impala可以轻松使用的格式存储,例如PARQUET。类似于以下内容的复制:

CREATE TABLE copy_of_table 
   STORED AS PARQUET AS
   SELECT * FROM your_original_table
Run Code Online (Sandbox Code Playgroud)

现在在Impala中,使用INVALIDATE METADATA将元数据标记为过期:

INVALIDATE METADATA copy_of_table
Run Code Online (Sandbox Code Playgroud)

您现在应该已经准备好在Impala中愉快地使用copy_of_table。

让我知道这是否有效,因为在不久的将来我可能会这样做。