50

次のようにCSVファイルをHiveテーブルに読み込もうとしています。

CREATE TABLE mytable
(
num1 INT,
text1 STRING,
num2 INT,
text2 STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

LOAD DATA LOCAL INPATH '/data.csv'
OVERWRITE INTO TABLE mytable;    


csvはコンマ(、)で区切られ、次のようになります。

1, "some text, with comma in it", 123, "more text"

最初の文字列に「、」があるため、これは破損したデータを返します。
テキスト区切り文字を設定したり、Hiveに文字列の「、」を無視させる方法はありますか?

csvは外部ソースから取得されるため、区切り文字を変更できません。

4

6 に答える 6

37

入力データを再作成または解析できる場合は、CREATETABLEのエスケープ文字を指定できます。

ROW FORMAT DELIMITED FIELDS TERMINATED BY "," ESCAPED BY '\\';

この行を4つのフィールドとして受け入れます

1,some text\, with comma in it,123,more text
于 2012-11-30T13:59:11.067 に答える
35

問題は、Hive引用されたテキストを処理しないことです。フィールド間の区切り文字を変更してデータを前処理する必要があります(たとえば、Hadoopストリーミングジョブを使用)。または、OpenCSVを使用してファイルを解析するカスタムCSVSerDeを使用することもできます。

于 2012-11-29T16:52:44.313 に答える
28

Hive 0.14以降、CSVSerDeはHiveインストールの標準部分です。

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'

https://cwiki.apache.org/confluence/display/Hive/CSV+Serdeを参照してください)

于 2016-02-11T03:16:21.763 に答える
0

区切り文字は一重引用符で囲んでください。

ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';

これはうまくいくでしょう

于 2016-08-09T19:23:11.117 に答える
0

'\;'で終了するFIELDSに円記号を追加します

例えば:

CREATE  TABLE demo_table_1_csv
COMMENT 'my_csv_table 1'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\;'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'your_hdfs_path'
AS 
select a.tran_uuid,a.cust_id,a.risk_flag,a.lookback_start_date,a.lookback_end_date,b.scn_name,b.alerted_risk_category,
CASE WHEN (b.activity_id is not null ) THEN 1 ELSE 0 END as Alert_Flag 
FROM scn1_rcc1_agg as a LEFT OUTER JOIN scenario_activity_alert as b ON a.tran_uuid = b.activity_id;

私はそれをテストしました、そしてそれは働きました。

于 2017-09-14T14:54:07.490 に答える
0

ORG.APACHE.HADOOP.HIVE.SERDE2.OPENCSVSERDESerdeが私のために働いた。私の区切り文字は'|'でした 列の1つは二重引用符で囲まれています。

クエリ:

CREATE EXTERNAL TABLE EMAIL(MESSAGE_ID STRING, TEXT STRING, TO_ADDRS STRING, FROM_ADDRS STRING, SUBJECT STRING, DATE STRING)
ROW FORMAT SERDE 'ORG.APACHE.HADOOP.HIVE.SERDE2.OPENCSVSERDE'
WITH SERDEPROPERTIES (
     "SEPARATORCHAR" = "|",
     "QUOTECHAR"     = "\"",
     "ESCAPECHAR"    = "\""
)    
STORED AS TEXTFILE location '/user/abc/csv_folder';
于 2019-10-09T13:54:38.497 に答える