请问Flink中是否可以在 json_query 函数的 path 中使用变量,例如 select?[阿里云实时计算 Flink版]

请问Flink中是否可以在 json_query 函数的 path 中使用变量,例如 select json_query( col_a, col_b) from table_a?报错 Caused by: org.apache.flink.table.planner.codegen.CodeGenException: Unsupported call: JSON_QUERY(STRING, STRING, SYMBOL NOT NULL, SYMBOL NOT NULL, SYMBOL NOT NULL) If you think this function should be supported, you can create an issue and start a discussion for it. 但是 就可以执行 select json_query( col_a, ‘$’) from table_a path 使用固定的串,sql-client 执行 sql

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
3 条回复 A 作者 M 管理员
  1. 根据您提供的错误信息,当前版本的 Flink 不支持在 json_query 函数的路径中使用变量。这也是导致出现错误的原因。

    目前 Flink 中的表达式和函数的参数只支持常量值或列引用作为输入,不支持直接在函数调用中传递变量。所以,您在 JSON_QUERY 函数的路径中使用变量是不被支持的。

    如果您确实需要动态构建 JSON 查询路径,一种解决方法是通过编写自定义函数来实现此功能。您可以在自定义函数中接收变量作为参数,并根据变量动态构建 JSON 查询路径。然后,在 Flink 作业中使用这个自定义函数来执行 JSON 查询操作。

    下面是一个示例,展示了如何创建一个自定义函数来动态构建 JSON 查询路径:

    public class DynamicJsonQueryFunction extends ScalarFunction {    public String eval(String input, String path) {        // 根据输入的变量构建 JSON 查询路径逻辑        String jsonPath = "$." + path;                // 执行 JSON 查询操作并返回结果        return JsonPath.read(input, jsonPath);    }}

    在将自定义函数注册到 Flink 表环境后,您可以在 SQL 查询中使用它:

    SELECT DynamicJsonQuery(col_a, col_b) FROM table_a;

    请注意,此示例仅演示了一种通用的思路,具体实现可能需要根据您的需求进行调整。

  2. 开源的部分建议到社区问问https://qr.dingtalk.com/page/yunpan?route=previewDentry&spaceId=1781248759&fileId=95856306982&type=file,此回答整理自钉群“实时计算Flink产品交流群”