我的CSV文件包含有关公司员工的详细信息。一栏包含员工薪水(例如-4,000美元)。 因此,当我编写一个脚本以通过','分隔将数据加载到表中时,它将我的工资列作为4& 000分开。如何处理?
CSV文件示例 - 澳大利亚,35-39,咨询,启动(1-25),Web应用程序开发人员,“$ 10,001 - $ 25,000”,Enterprise
表格代码 -
创建表调查 ( 国家字符串, 年龄字符串, industryType字符串, companyType字符串, 职业串, 工资字符串, 项目字符串) 行格式分隔 字段以',';
结尾
答案 0 :(得分:2)
符合Apache Create/Drop/Truncate Table的DDL语法,更具体地说,符合Row Formats & SerDe,为了更改FIELDS/LINES/etc
属性,您可以使用:
ROW FORMAT
,或设置了ROW FORMAT DELIMITED
),或SERDE
子句)。CREATE TABLE survey(country string, age string, industryType string, companyType string, occupation string, salary string, project string)
ROW FORMAT DELIMITED
FIELDS
TERMINATED BY ","
ESCAPED BY "\\"
LINES TERMINATED BY "\n"
STORED AS TEXTFILE;
注意缺少一个可以指定引用字段值的字符的子句。
查看名为" CSV / TSV"的记录来自Row Formats & SerDe的表格。
CREATE TABLE survey(country string, age string, industryType string, companyType string, occupation string, salary string, project string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = ",",
"quoteChar" = "\"",
"escapeChar" = "\\"
)
STORED AS TEXTFILE;
我建议您使用包含一行值的CSV文件进行测试。在该行内部将所有列值括在双引号中,看看会发生什么。封闭了Beeing,","字符(如salary
字段中的字符)将/应自动转义,因此保存为相应列值的一部分。