gpt4 book ai didi

database - 使用不同长度的行在 Hive 中加载 CSV 文件

转载 作者:可可西里 更新时间:2023-11-01 17:01:16 25 4
gpt4 key购买 nike

如何在 Hive 中加载每行具有不同列数的 CSV 文件?问题是每一行都有未定义的字段数,否则我会创建一个表,其中包含我的 CSV 可以拥有的最大字段数 ...

字段 1 到 5 将始终存在。然而,字段 6 到 Infinity 可能并不总是存在。一个可能可以接受的解决方案是在 Hive 中导入文件时将字段 6 连接到 Infinity。

这可能吗?

这里是我的 CSV 文件的示例,以明确说明:

data11;data12;data13;data14
data21;data22;data23;data24;data25
data31;data32;data33;data34;data35;data36
data41;data42;data43

最佳答案

我能想到的三个选项:

如果可能字段的数量不是真正的无限,而只是大于 5,那么您可以简单地定义所有这些字段,数据中不存在的字段将只是空值。

您可以编写自定义 SerDe。

或者您可以将分隔符设置为数据中不存在的内容,然后使用正则表达式自行提取字段。示例:

create table a(line string) row format delimited fields terminated by '\A';

create view b as
select
regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 1) as col1,
regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 2) as col2,
regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 3) as col3,
regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 4) as col4,
regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 5) as col5,
split(regexp_extract(line, '([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)\;([^\;]*)', 6), '\;') as rest
from a;

关于database - 使用不同长度的行在 Hive 中加载 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23811791/

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