关于hologres的数组函数
这里的几个函数不支持常量查询,查询字段写在子查询里也不支持吗?
Hologres的数组函数中,包括array_max、array_min、array_contains、array_except、array_distinct和array_union等都暂不支持常量查询。这意味着在这些函数中,你不能直接使用具体的常量值进行查询,而需要通过变量或者字段值来替代。
当涉及到查询字段写在子查询里的情况,这其实是Hologres支持的一种常见操作方式。在SELECT语句中,每一个输出列都有一个名称,这个名称在一个简单的SELECT中只是用来标记要显示的列。但如果SELECT是一个大型查询的子查询时,那么这个大型查询会把该名称看做是子查询产生的虚表的列名。然而,要注意的是,虽然子查询在Hologres中是支持的,但并不是所有PostgreSQL支持的子查询函数 Hologres都能支持。因此,在使用子查询时一定要确认所使用的函数是否得到了Hologres的支持。
Hologres支持数组类型的函数,但是这些函数在某些情况下可能不支持常量查询或子查询。例如:
array_union:这个函数用于合并两个数组,并返回一个新的数组,其中包含所有唯一的元素。如果尝试使用常量作为输入参数,可能会导致错误。
array_max、array_min:这些函数分别用于找出数组中的最大值和最小值。对于数值型数组,它们可以正常工作;但对于非数值型数组(如字符串),这些函数的适用性可能会受到限制。
array_contains:这个函数用于检查一个数组是否包含特定的元素。它通常需要一个数组列名作为第一个参数,而不是一个常量数组。
array_except:这个函数用于从一个数组中移除另一个数组中存在的元素。同样,它通常要求两个数组都来自表中的列,而不仅仅是常量数组。
array_distinct:这个函数用于删除数组中的重复项。它接受一个数组列名作为参数,而不支持直接传递常量数组。
应该是array_union这个函数本身在hqe执行,但是被推到了pqe,所以报错了。问题出在 t1.user_list = t1.department_list 这个条件上,判断array是否相等走的是pqe,可以用 t1.user_list @> t1.department_list and t1.user_list <@ t1.department_list 绕过,此回答整理自钉群“实时数仓Hologres交流群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975