将csv加载到表时出错

vdzxcuhz  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(333)

我的csv文件包含公司员工的详细信息。其中一列包含员工的工资(例如-4000美元)。因此,当我编写一个脚本以“,”分隔将数据加载到表中时,它将我的salary列分别作为4000。怎么处理?
csv文件示例-澳大利亚,35-39岁,咨询,初创企业(1-25岁),web应用程序开发人员,“$10001-$25000”,企业
表代码-
创建表调查(国家字符串、年龄字符串、行业类型字符串、公司类型字符串、职业字符串、薪资字符串、项目字符串)行格式分隔字段,以“,”结尾;

aemubtdh

aemubtdh1#

参考文献:

符合apache的create/drop/truncate表的ddl语法,更具体地说,符合row-formats&serde,以便更改 FIELDS/LINES/etc 属性,可以使用:
本地serde(如果 ROW FORMAT 未指定,或 ROW FORMAT DELIMITED 已设置),或
自定义序列(通过应用 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

请参阅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文件进行测试。在该行中,将所有列值用双引号括起来,然后查看结果。beeing括起来,“,”字符(如 salary 字段)将/应自动转义,并因此保存为相应列值的一部分。
祝你好运。

相关问题