我需要执行一个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上的数组并获取其长度?
答案 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