【发布时间】:2017-07-06 17:45:03
【问题描述】:
我看到了一些类似的问题,但由于问题不完全相同,或者解决方案不适用于我的情况,所以我在这里发布我的问题。
我正在解析一个表,该表在 csv_line 列中包含一个 csv 行。
问题是某些列有逗号,,它也是字段分隔符。这些列嵌入在引号中。
我正在做的解析是:
with
sample as (
select 'field1,field3,"http://another.domain/abc/...eIds=111,222,333,444,...,",CustomerX,end' as csv_line)
select
regexp_extract(csv_line,'(,?(".*?"|[^,]*)){1}') as f1
regexp_extract(csv_line,'(,?(".*?"|[^,]*)){n}') as fn
from raw_sample
我已尝试替换字符/逗号。
我知道 OpenCSVSerde 允许在 Create 表中定义分隔符和转义双引号,但我可能正在寻找可以设置的属性,或者可能是正则表达式,这可以以正确的方式进行拆分。
提前致谢
【问题讨论】:
-
“手动解析”是什么意思?为什么不使用 CSV SerDe?
-
手动解析,在 hive 中进行。我需要计算几个 csv 文件并将它们合并到一个表中。除了其他计算。我需要查询来执行这项工作。 :/ 也许我需要用 Spark 来做这件事..
-
那么,为什么不使用 CSV SerDe?
-
如何使用它,而不是在 create table 语句中?
-
不清楚。请给出一个反映实际场景的数据样本,包括所需的结果。
标签: csv parsing hadoop split hive