将CSV加载到表时出错

时间:2017-11-08 09:37:38

标签: database csv hadoop hive rdbms

我的CSV文件包含有关公司员工的详细信息。一栏包含员工薪水(例如-4,000美元)。 因此,当我编写一个脚本以通过','分隔将数据加载到表中时,它将我的工资列作为4& 000分开。如何处理?

CSV文件示例 - 澳大利亚,35-39,咨询,启动(1-25),Web应用程序开发人员,“$ 10,001 - $ 25,000”,Enterprise

表格代码 -

  

创建表调查   (   国家字符串,   年龄字符串,   industryType字符串,   companyType字符串,   职业串,   工资字符串,   项目字符串)   行格式分隔   字段以',';

结尾

1 个答案:

答案 0 :(得分:2)

参考文献:

符合Apache Create/Drop/Truncate Table的DDL语法,更具体地说,符合Row Formats & SerDe,为了更改FIELDS/LINES/etc属性,您可以使用:

  • 原生SerDe (如果未指定ROW FORMAT,或设置了ROW FORMAT DELIMITED),或
  • 自定义SerDe (通过应用SERDE子句)。

选项1:使用本地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

查看名为" 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字段中的字符)将/应自动转义,因此保存为相应列值的一部分。

祝你好运。

相关问题