我正在尝试从csv文件加载数据,其中的值用双引号'"'和制表符分隔'\ t'包围.但是当我尝试将其加载到hive时,它不会抛出任何错误并且数据加载而没有任何错误但我认为所有数据都被加载到一个列中,并且它显示为NULL的大多数值都在我的create table语句之下.
CREATE TABLE example
(
organization STRING,
order BIGINT,
created_on TIMESTAMP,
issue_date TIMESTAMP,
qty INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
ESCAPED BY '"'
STORED AS TEXTFILE;
Run Code Online (Sandbox Code Playgroud)
输入文件样本; -
"Organization" "Order" "Created on" "issue_date" "qty"
"GB" "111223" "2015/02/06 00:00:00" "2015/05/15 00:00:00" "5"
"UK" "1110" "2015/05/06 00:00:00" "2015/06/1 00:00:00" "51"
Run Code Online (Sandbox Code Playgroud)
和Load语句将数据推送到hive表中.
LOAD DATA INPATH '/user/example.csv' OVERWRITE INTO TABLE example
Run Code Online (Sandbox Code Playgroud)
可能是什么问题,我怎么能忽略文件的标题.如果我从create语句中删除ESCAPED BY'"',它在各自的列中加载,但所有的值都用双引号括起来.如何从值中删除双引号并忽略文件的标题?
che*_*aux 19
您现在可以使用OpenCSVSerde,它允许您定义分隔符并轻松地转义周围的双引号:
CREATE EXTERNAL TABLE example (
organization STRING,
order BIGINT,
created_on TIMESTAMP,
issue_date TIMESTAMP,
qty INT
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
"separatorChar" = "\t",
"quoteChar" = "\""
)
LOCATION '/your/folder/location/';
Run Code Online (Sandbox Code Playgroud)
您不想使用escaped by,那是转义字符,而不是引号字符。我认为 Hive 实际上并不支持引号字符。您可能想看看这个 csv serde,它接受 quotechar 属性。
另外,如果您有 HUE,您可以使用 Metastore Manager Web 应用程序加载 CSV,这将处理标题行、列数据类型等。
| 归档时间: |
|
| 查看次数: |
41767 次 |
| 最近记录: |