将String转换为数组并在Vertica上验证大小

时间:2019-03-03 10:10:47

标签: sql vertica

我需要执行一个SQL查询,该查询将String列转换为Array,然后验证该数组的大小

我能够使用postgresql轻松做到这一点: 例如

select
cardinality(string_to_array('a$b','$')),
cardinality(string_to_array('a$b$','$')),
cardinality(string_to_array('a$b$$$$$','$')),

但是由于某种原因,尝试将vertica上的String转换为数组并不是那么简单,请参见以下链接:

https://www.vertica.com/blog/vertica-quick-tip-dynamically-split-string/ https://forum.vertica.com/discussion/239031/how-to-create-an-array-in-vertica

还有很多其他人没有提供帮助。

我也尝试使用:

select  REGEXP_COUNT('a$b$$$$$','$')

但是我得到的值不正确-1。

我如何将字符串转换为Vertica上的数组并获取其长度?

3 个答案:

答案 0 :(得分:1)

$在正则表达式中具有特殊含义。它代表字符串的结尾。

尝试转义:

select REGEXP_COUNT('a$b$$$$$', '[$]')

答案 1 :(得分:1)

您可以使用Java,C ++,R或Python创建UDx标量函数(UDSF)。输入将是一个字符串,而输出将是一个整数。 https://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/ExtendingVertica/UDx/ScalarFunctions/ScalarFunctions.htm

这将允许您在传入的字符串上使用特定于语言的数组逻辑。例如在python中,您可以包括以下逻辑:

input_list = input.split("$")
filtered_input_list = list(filter(None, input_list))
list_count = len(filtered_input_list)

这些示例是为Vertica编写UDx的一个很好的起点。 https://github.com/vertica/UDx-Examples

答案 2 :(得分:0)

我无法转换为数组-但我能够获取值的长度 我要做的是将使用计数转换为行-这不是最佳性能 但是通过这种方式,我也可以做类似分隔符之间的每个值过滤的操作-而且我不需要对$

这样的字符使用[]
select (select count(1)   
        from (select StringTokenizerDelim('a$b$c','$') over ()) t)  

返回3