我的 CSV 文件包含有关公司员工的详细信息。一栏包含员工的薪水(例如 - 4,000 美元)。 因此,当我编写脚本以通过“,”分隔将数据加载到表中时,它将我的薪水列分别作为 4 和 000。如何处理?
CSV 文件示例 - 澳大利亚,35-39 岁,咨询,创业 (1-25),Web 应用程序开发人员,"$10,001 - $25,000",企业
表格代码-
create table survey ( country string, age string, industryType string, companyType string, occupation string, salary string, project string) row format delimited fields terminated by ',' ;
最佳答案
引用资料:
符合 Apache 的 DDL 语法 Create/Drop/Truncate Table ,更具体地说,到 Row Formats & SerDe , 为了改变 FIELDS/LINES/etc
属性,你可以使用:
- native SerDe(如果未指定
ROW FORMAT
,或者设置了ROW FORMAT DELIMITED
),或者 - 自定义 SerDe(通过应用
SERDE
子句)。
选项 1:使用 native 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;
请注意缺少可以指定字符引用字段值的子句。
选项 2:使用自定义 Serde
请参阅来自 Row Formats & SerDe 的表中名为“CSV/TSV”的记录.
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 文件进行测试。在行内将所有列值括在双引号中,看看会发生什么。被包围的“,”字符(如 salary
字段中的字符)将/应该自动转义,因此保存为相应列值的一部分。
祝你好运。
关于database - 将 CSV 加载到表格时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47176158/