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