将csv文件导入hive表;数据包含额外的逗号,因此无法正确导入

问题描述

我在 csv 数据中混合了逗号、单引号和双引号。我最初尝试直接从 csv 文件创建一个 Hive 表并且它工作正常。

但是,客户想要一张可由 Hive 和 Impala 访问的镶木地板。所以我修改一个简单的查询,该查询一个 hive 表构建为一个 3 部分的查询

  1. 创建一个主表
  2. 创建一个永久的配置单元表和
  3. 从表 1 导入到表 2。

现在 csv 文件本身已导入到 Hive 环境中。我尝试了两种方法来做到这一点

#1 使用文本到列来拆分所有列和

#2 没有文本到列,而是直接导入。

#1 的问题是有一个额外的手动步骤。 #2 方法的问题是所有文本现在都显示在 1 列中,这是可以的。但是当我使用 3 部分查询来导入它时,数据在最终表中没有对齐。表1中的示例记录如下所示-

samplefirstname.samplelastname@sampleclient.com,"FirstName","LastName","Xyz,Abcd; damage Claim T20212020","Hdgsd,Fashs; damage Claim T20212020","","EMAILINCAPS@domaininlowcase.com","10/10/1600 4:04:22 PM","10/10/1600 12:00:00 AM","Accepted","11/11/1600 6:22:48 AM","14428","SOMENAME"

我的第一个查询在这里-

Create External Table If Not Exists ${environment}folder.sample_table(
email1 string,firstName string,lastName string,matter string,holdname string,id1 string,email2 string,email3 string,date1 string,date2 string,response string,date3 string,id2 string,Account string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES ('separatorChar' = ",",'quoteChar'= "\"",'escapeChar' = "\\")
STORED AS TEXTFILE
LOCATION '/${directory}/loc1/loc2/loc3/';

我的插入 sql 查询在这里-

Insert overwrite table ${environment}folder2.sme
select
split(email,")[0] as email
split(email,")[1] as firstname

如果我不使用拆分功能,所有数据都会卡在一个列中。如果我使用拆分函数,它可以正常工作直到前几列,如果数据点采用“我的名字,你好,你好”这种格式,它就会开始中断。 我试过 reg_exp 但不确定它是否与其他地方(如 python)的工作方式相同。 任何建议表示赞赏。 TIA

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...