Flink sql:如何查找json数组的大小

4c8rllxm  于 2023-03-06  发布在  Apache
关注(0)|答案(1)|浏览(274)

我正在使用flink sql从Kafka中读取数据,kafka消息中有一个字段是array,例如

{
  "description": "som description",
  "owner": {
    "type": "some",
    "id": "5ff4eb4fed9b4b1288d7993944a8ca23"
  },
  "someArray": [
    {
      "type": "foo",
      "id": "c31a2d10134146e29726fb87246b68d0"
    },
    {
      "type": "foo1",
      "id": "c31a2d10134146e29726fb87246b68d0"
    }
  ]
}

我想编写类似于select description, size_of(someArray) from some_table;选择语句
Flink没有size_of函数。我可以使用一些内置函数得到someArray的长度吗?在这个例子中是2
我曾尝试为此编写UDF,使用UDF时遇到的挑战是,当使用sql-gateway执行查询时,我会在UDF类(它是一个Java类)上遇到类未找到异常。当我尝试使用cli sql-client时,我可以使UDF工作。在我的计算机上运行/usr/local/Cellar/apache-flink/1.16.0/libexec/lib时,我已将包含UDF的jar添加到/usr/local/Cellar/apache-flink/1.16.0/libexec/lib

ewm0tg9j

ewm0tg9j1#

可以使用内置的系统函数CARDINALITY来获取数组的长度,如下所示:

select cardinality(someArray) as array_length...;

有关表API中的集合函数的更多信息,请查看文档。

相关问题