请教一下Hologres,这是什么原因?SELECT
*
FROM
tags_dev.dwd_user_basic_tag
WHERE
ds = '${ds}'
and is_logoff = false
and id IN (
SELECT
regexp_split_to_table(rb_to_array_string(tag_value, ','), ',')::int AS id
FROM
tags_dev.dwd_user_mapping_tag
WHERE
tag_id = 231
AND ds = '2024-03-21'
)
traceId:82770433-6a06-4c2c-8aeb-1fda48227ff4;
errMsg:数据源执行SQL失败:INTERNAL: java.lang.RuntimeException: SQL execute error by datasource... org.postgresql.util.PSQLException: ERROR: function rb_to_array_string(public.roaringbitmap, unknown) does not exist 建议:No function matches the given name and argument types. You might need to add explicit type casts. 位置:194 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2532) org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2267) org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:312) org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:448) org.postgresql.jdbc.PgStatement.execute(PgStatement.java:369)
根据您提供的错误信息,问题出在查询语句中的函数rb_to_array_string(public.roaringbitmap, unknown)
不存在。这个函数能是您自函数或者来自某个扩展库,但在当前的数据库中找不到对应的实现。
建议您检查以下几点:
确保您的数据库中已经安装了相应的扩展库,例如pg_roaringbitmap
。如果没有安装,请先安装该扩展库。
检查您的查询语句中是否正确引用了该函数。如果函数名或参数类型有误,请修改为正确的名称和类型。
如果函数确实存在,但仍然出现错误,可能是因为函数的定义与当前数据库的版本不兼容。在这种情况下,您可能需要更新函数定义以适应当前数据库版本。
希望这些建议能帮助您解决问题。
这个错误是因为在Hologres中没有名为rb_to_array_string
的函数。根据错误信息,建议可能需要添加显式类型转换。
要解决这个问题,您可以尝试使用其他方法将tag_value
转换为数组,然后使用ANY
操作符进行比较。以下是一个可能的解决方案:
SELECT
*
FROM
tags_dev.dwd_user_basic_tag
WHERE
ds = '${ds}'
and is_logoff = false
and id IN (
SELECT
CAST(regexp_split_to_table(tag_value, ',') AS int) AS id
FROM
tags_dev.dwd_user_mapping_tag
WHERE
tag_id = 231
AND ds = '2024-03-21'
)
这里,我们使用了CAST
函数将regexp_split_to_table
的结果转换为整数类型。这样,查询应该可以正常执行。
根据您提供的错误信息,问题出在查询语句中的函数调用上。具体来说,错误提示显示rb_to_array_string(public.roaringbitmap, unknown)
这个函数不存在。
根据错误信息的建议,您可能需要添加显式类型转换来解决这个问题。在这种情况下,您可以尝试将public.roaringbitmap
转换为适当的数据类型,以便与rb_to_array_string
函数兼容。
以下是一个可能的解决方案示例:
SELECT
*
FROM
tags_dev.dwd_user_basic_tag
WHERE
ds = '${ds}'
AND is_logoff = false
AND id IN (
SELECT
regexp_split_to_table(rb_to_array_string(CAST(tag_value AS text), ','), ',')::int AS id
FROM
tags_dev.dwd_user_mapping_tag
WHERE
tag_id = 231
AND ds = '2024-03-21'
)
请注意,这只是一个示例解决方案,具体的解决方法可能因您的数据模型和需求而异。您需要根据实际情况进行调整和测试。
我理解HoloWeb能执行,引擎侧没问题了,是不是连接的时候指定了schema。extension通常是建在pg_catalog或者public下,如果指定了其他schema,有可能会找不到函数 ,此回答整理自钉群“实时数仓Hologres交流群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本技术圈将为大家分析有关阿里云产品Hologres的最新产品动态、技术解读等,也欢迎大家加入钉钉群--实时数仓Hologres交流群32314975