6

各フィールドが二重引用符で囲まれた CSV データがあります。Hive テーブルを作成したときに serde 'com.bizo.hive.serde.csv.CSVSerde' を使用しました上記のテーブルを Impala でクエリすると、SerDe not found というエラーが発生します。

/usr/lib/impala/lib フォルダーに CSV Serde JAR ファイルを追加しました。

後で Impala のドキュメントで調べたところ、Impala はカスタム SERDE をサポートしていません。このような場合、引用符付きの CSV データが処理されるように、この問題をどのように克服できますか。CSV Serde を使用したいのは、正当なフィールド vavlue である値にコンマが含まれているためです。

どうもありがとう

4

3 に答える 3

5

ハイブは使えますか?もしそうなら、ここにうまくいくかもしれないアプローチがあります。CREATEあなたのテーブルをEXTERNAL TABLEハイブ内として使用SERDEし、CREATEステートメントの適切な場所で使用します(CREATE TABLEステートメントの最後にROW FORMAT SERDE your_serde_hereのようなものが必要だと思います)。この前に、次のことを行う必要がある場合があります。

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 では、INVALIDATE METADATAを使用して、メタデータを古いものとしてマークします。

INVALIDATE METADATA copy_of_table

これで、Impala で copy_of_table を問題なく操作できるようになりました。

近い将来このようなことをするかもしれないので、これが機能するかどうか教えてください.

于 2014-12-16T18:52:19.570 に答える
1

ハイブ内

CREATE TABLE mydb.my_serde_table_impala AS SELECT FROM mydb.my_serde_table

インパラ内

INVALIDATE METADATA mydb.my_serde_table_impala

これらの手順を追加して、最初に _impala テーブルを削除し、serde テーブルのファイルを生成または取り込みます。

Impala は、Hive とは異なり、MapReduce をバイパスします。そのため、Impala は MapReduce のように SerDe を使用できません/使用しません。

于 2017-03-29T21:13:41.400 に答える