Select col1 from staging returns the following
"a, b,u,y"
"c, d"
e
f
我想要以下结果(删除双引号,然后用逗号分隔单个记录,然后堆叠它们)
a
b
u
y
c
d
e
f
我尝试实现这一目标的方式是
从分段中选择不同的(regexp_replace(col1,'"'''))
这将删除双引号。
我认为这应该有效,但有些东西不见了......
select distinct(explode(split(col1,","))) from staging
我尝试的是通过提供将返回数组的拆分器来拆分列值。之后,使用explode将数组拆分为Rows。
我确定提到逗号的RegX不正确......
答案 0 :(得分:1)
我认为这是你想要实现的目标:
SELECT DISTINCT col1
FROM (
SELECT
explode(split(regexp_replace(col1, "\\s|\"", ''), ',')) AS col1
FROM staging
) t;
DISTINCT
似乎在Hive中作为UDTF隐式实现,并且在表达式({{{{{ 1}}是一个UDTF。)
这是此查询与您发布的示例数据一起返回的内容:
explode
如果你不想要或不需要DISTINCT(你可以看到隐式排序结果),那么你可以只使用查询的内部部分:
hive> DESCRIBE staging;
OK
col1 string
Time taken: 0.295 seconds, Fetched: 1 row(s)
hive> SELECT * FROM staging;
OK
"a, b,u,y"
"c, d"
e
f
Time taken: 0.208 seconds, Fetched: 4 row(s)
hive> SELECT DISTINCT col1
> FROM (
> SELECT
> explode(split(regexp_replace(col1, "\\s|\"", ''), ',')) AS col1
> FROM staging
> ) t;
...
... Lots of MapReduce-related spam
...
a
b
c
d
e
f
u
y
Time taken: 19.787 seconds, Fetched: 8 row(s)
然后会返回类似的内容:
SELECT
explode(split(regexp_replace(col1, "\\s|\"", ''), ',')) AS col1
FROM staging;