database - 将 CSV 加载到表格时出错

标签 database csv hadoop hive rdbms

我的 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/

相关文章:

java - 如何解决 hive 中的执行错误?

java - 将 Mysql 转换为 Sqlite 数据库

mysql - 使用 MYSQL 中先前的 COUNT() 值选择记录

php - 我如何将 csv 文件中的 utf-8 设置为 phpmyadmin

python - 使用 pkg_resources 时以通用换行模式打开文件?

java - Hadoop 将数据附加到 hdfs 文件并忽略重复条目

hadoop - Hadoop Map/Reduce作业分配

java - 在上次迭代期间花费很长时间在 Java Sql 中执行批量准备语句

sql - 如何通过sql向access数据库插入超链接?

r - 如何创建两个具有相同名称但一个使用大写字母而另一个使用小写字母的不同 CSV 文件