0

当我尝试在使用 Python UDF 的 SQL 查询中使用 MATCH_RECOGNIZE 时,出现错误Python Function can not be used in MATCH_RECOGNIZE for now.

例如,不支持以下内容:

SELECT T.aa as ta
FROM MyTable
MATCH_RECOGNIZE (
  ORDER BY proctime
  MEASURES
    A.a as aa,
    pyFunc(1,2) as bb
  PATTERN (A B)
  DEFINE
    A AS a = 1,
    B AS b = 'b'
) AS T

这提出了几个问题:

  1. 为什么 Blink 规划器需要支持 Python 函数?

  2. 我在哪里可以找到这种缺乏支持的文档?关于这个特性的文档没有提到 Python。是否期望我通过验证测试进行解析?

  3. (主要问题) MATCH_RECOGNIZE 的最佳替代方案是用户定义的表聚合 Python 函数吗?我只想按顺序查找两个事件(在一小时内)。我知道我可以通过自加入来做到这一点,但我想看看是否有更有效/更干净的可能性。

4

1 回答 1

1

作为无法在 measure 子句中使用 Python UDF 的解决方法,您似乎可以从 MATCH_RECOGNIZE 生成作为 UDF 输入所需的数据,然后在后续步骤中应用 UDF。

像这样的东西:

SELECT
  T.aa AS ta, 
  pyFunc(T.one, T.two) AS tb
FROM MyTable
MATCH_RECOGNIZE (
  ORDER BY proctime
  MEASURES
    A.a AS aa,
    1 AS one,
    2 AS two
  PATTERN (A B)
  DEFINE
    A AS a = 1,
    B AS b = 'b'
) AS T

如果您决定改用该方法,则使用对时间属性有间隔约束的自联接应该会产生一个有效的计划。

于 2021-07-27T14:36:09.957 回答