CSV ファイルには、以下の乱雑な形式のユーザー調査が含まれており、文字列、int、範囲などのさまざまなデータ型が含まれています。
中国、20~30 歳、男性、xxxxx、yyyyy、モバイル開発者。zzzz-vvvv; 「$40,000-50,000」、コンサルティング
日本、30~40 歳、女性、xxxxx、ソフトウェア開発者、zzzz-vvvv; "$40,000-50,000"、開発
. . . . .
以下のコードは、CSV ファイルを各列にそれぞれの値が正しく割り当てられた Hive テーブルに変換するために使用されます。
add jar /home/cloudera/Desktop/project/csv-serde-1.1.2.jar;
drop table if exists 2016table;
create external table 2016table
(
Country string,
Age string,
Gender string,
Random1 string,
Random2 string,
Occupation string,
Random3 string,
Salary string,
Industry string,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\"",
"escapeChar" = "\\"
)
STORED AS TEXTFILE;
LOAD DATA LOCAL INPATH "/home/cloudera/survey/2016edited.csv" INTO TABLE 2016table;
このコードは正常に機能し、各列はそれぞれの値で個別に割り当てられました。すべての Select クエリで真の結果が得られます。
上のテーブル ("2016table") から別のテーブル ("2016sort") を少ない列で作成しようとすると、異なる列で値が混在しています。
そのために使用されるコード
DROP TABLE IF EXISTS 2016sort;
CREATE EXTERNAL TABLE 2016sort (
country1 string,
age1 string,
gender1 string,
occupation1 string,
salary1 string,
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\"",
"escapeChar" = "\\"
)
STORED AS TEXTFILE;
insert into table 2016sort select country,age,gender,occupation,salary from 2016table;
しかし、このコードは値を台無しにします。2016sortからgender1を選択すると、性別列の値と他の列の値が混在します。
何が欠けているかを理解するのを手伝ってくれる人はいますか!