2017-10-06 21 views
0

私はすべての研究を行い、HIVEのどこにでも同じ問題を見ることができませんでした。HIVE 2.1.1テーブルの作成CSV-Serde

https://github.com/ogrodnek/csv-serde

私の外部表の作成は以下のserdeの性質を持っていますが、何らかの理由で、デフォルトEscapeCharに(「\」..下のリンクをたどって、私は引用符で囲まれたデータでは問題がありません。)私のデータのための二重引用符( ")であるquoteCharによって置き換えられている

CREATE EXTERNAL TABLE IF NOT EXISTS people_full(
`Unique ID` STRING, 
. 
. 
. 
. 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
    "escapeChar" = "\\" 
) 
STORED AS TEXTFILE 

データISSUE:

サンプルHDFSソースデータ: "\" Robsビジネス 対象HIVE出力: "" "Robsビジネス

このように、置換後のRobsビジネスで見られる3つの二重引用符は、データの望ましくないデータ区切りを引き起こしています長い文字列)は、HIVEがデータ内に3つの二重引用符を扱うことができない場合があります(引用符( ")も私のデフォルト引用符文字です)。

なぜこのようなことが起こり、解決策がありますか?助けてください。多くのありがとう。

ベスト

、 アシャは

答えて

0

は、それが動作することにより、エスケープしてみてください。以下のスクリーンショットの例をご覧ください。 enter image description here

+0

こんにちは@ kundam、申し訳ありませんが正しいSQLを表示するために私の質問を編集しました。私は "escapeChar" = "\\"を使用していた(私の記事で) "\ '"は置換を避けて動作しますが、バックスラッシュのデフォルトのエスケープ文字は変更したくありません。 –

+0

私の実際の問題は、( '\')がデフォルトの引用符で置き換えられているので、HIVEの既知の問題ですか?助けてくれてありがとう。 –

+0

**あなたの投稿を**編集し**実際のコードをスクリーンショットではなくテキストとして表示してください。他の人は画像からコピー&ペーストすることはできません。 [詳細はこちら](https://meta.stackoverflow.com/a/285557/1402846)を参照してください。ありがとうございました。 – Pang

0

データの間にダブルクォートでHDFSにCSVファイルをインポートし、そのファイルのハイブのテーブルを作成し、正常に動作し、ファイル内の各レコードを表示する外部表を作成するために、ハイブにクエリに従ってください。ここで

create external table tablename (datatype colname,datatype2 colname2) row format 
SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES 
("separatorChar" = ",","quoteChar" = "\"") stored as textfile location '/dir_name/'; 

、テーブル名は、テーブルの名前を表し、データ型が文字列のようなものです、intまたは多分他とCOLNAMEはあなたが与えるしようとしている列の名前を表し、最後にDIR_NAMEはCSVまたはテキストファイルの場所ですhdfsの場所にあります。

関連する問題