如何防止hivecreatetable将数据中包含逗号“,”的列拆分为两列

rbpvctlc  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(295)

我使用sqoop导入了mysql表。有些列值中有逗号“,”。例如,“value,st”。我想将该值存储在同一列中,就像在mysql中一样,但是当我创建配置单元表时,“value”和“st”存储在不同的列中。”“st”进入右栏。
我试过了

CREATE EXTERNAL TABLE IF NOT EXISTS personal_to_delete 
(id_personal string, 
no_ktp string, 
nama string, 
nama_tanpa_gelar string, 
alamat1 string, 
kodepos string, 
id_kabupaten_alamat string, 
id_propinsi string, 
npwp string, 
tgl_update string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
WITH SERDEPROPERTIES (
   "separatorChar" = "\",
   "quoteChar"     = ","")
FIELDS TERMINATED BY ',' STORED AS TEXTFILE LOCATION '/user/hadoop/personal_to_delete';

我运行此查询后得到空值。我该怎么解决这个问题?

yvfmudvl

yvfmudvl1#

问题似乎是用于分隔字段的分隔符字符也出现在值本身中。这使得createtable命令很难正常工作。你也需要
在字段或
使用引号字符将字段或
使用一个不同的字段分隔符,它不会出现在字段本身,以使文件“易于理解”的导入过程。
我自己可能会选择这两个选项之一:
正如onecricketeer所建议的:让sqoop直接导入一个配置单元表。这里似乎是一个很好的例子:在这里输入链接描述。
使用sqoop创建文件时,请尝试选项--fields terminated by,该选项设置字段分隔符。如果您将其设置为不同的值,则使用逗号“,”(例如分号)或者数据中没有出现的其他内容),并在配置单元create语句中提供此信息(例如,以“;”结尾的字段)而忽略了它应该起作用的serdeproperties。

相关问题