gpt4 book ai didi

csv - 如何在 Hive 中使用 CSV serde 加载带有嵌入式双引号的 CSV 数据。不更新传入的数据文件

转载 作者:可可西里 更新时间:2023-11-01 14:32:42 26 4
gpt4 key购买 nike

我有如下的文本文件:

1,"TEST"Data","SAMPLE DATA"

表结构是这样的:

CREATE TABLE test1( id string, col1 string , col2 string )
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 'mylocation/test1'`

当我将文件放在相关的 HDFS 位置时。第 2 列和第 3 列填充为 null,这是因为 (TEST"Data) 之间的双引号。

一种方法是使用转义字符“/”更新数据文件,但我们不允许更新传入数据。如何正确加载数据并转义这些嵌入的双引号。

感谢帮助!!

最佳答案

您可以使用 RegexSerDe 加载它

演示

狂欢

mkdir test1

cat>test1/file.txt
1,"TEST"Data","SAMPLE DATA"
2,"TEST Data","SAMPLE DATA"
3,"TEST","Data","SAMPLE","DATA"

hdfs dfs -put test1 /tmp

hive

create external table test1 
(
id string
,col1 string
,col2 string
)
row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
with serdeproperties
(
'input.regex' = '^(\\d+?),"(.*)","(.*)"$'
)
location '/tmp/test1'
;

select * from test1
;

+----------+----------------------+-------------+
| test1.id | test1.col1 | test1.col2 |
+----------+----------------------+-------------+
| 1 | TEST"Data | SAMPLE DATA |
| 2 | TEST Data | SAMPLE DATA |
| 3 | TEST","Data","SAMPLE | DATA |
+----------+----------------------+-------------+

关于csv - 如何在 Hive 中使用 CSV serde 加载带有嵌入式双引号的 CSV 数据。不更新传入的数据文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com