问题标签 [match-recognize]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
60 浏览

apache-flink - Flink SQL 匹配识别输出所有列

有没有办法从 match_recognize MEASURES 子句输出所有列?我尝试了以下方法:
1。

我得到的错误是:org.apache.calcite.sql.validate.SqlValidatorException: Unknown field '*'

  1. SELECT * FROM events MATCH_RECOGNIZE (PARTITION BY org_id ORDER BY proctime MEASURES A AS start ONE ROW PER MATCH PATTERN (A C* B) DEFINE A AS A.tag = 'tag1', C AS C.tag <> 'tag2', B AS B.tag = 'tag2');

错误是:org.apache.flink.sql.parser.impl.ParseException: Encountered "start" at line 1, column 91.

有没有办法做这个操作?还是在 flink SQL 中不允许?似乎 flink 文档总是谈论最简单的情况,而从不考虑任何复杂的情况。

0 投票
1 回答
156 浏览

sql - 在 Snowflake 中使用 SQL 进行漏斗分析

我正在构建一个查询,以通过事件通过平台跟踪用户的生命周期。该表有EVENTS3 列USER_ID和。下面是表格的快照,DATE_TIMEEVENT_NAME

在此处输入图像描述

以下是我的查询,

我的预期结果,

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

我现在得到的,

在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

以下是我的要求/注意事项,

  • 下一个事件的时间戳应该大于或等于前一个事件的时间戳(以先到者为准,以便时间戳相等或通过漏斗的事件不断增加)。这种逻辑的一个很好的例子可以用当前结果和预期结果的差异来解释,即REGISTRATION_PENDING_CONFIRM_TIMESTAMPQUALIFIED_TIMESTAMP列中的值。
  • 并非所有用户都拥有所有这 5 个事件,例如,如果USER_ID54321 没有/跳过事件“您的个人信息”,则结果必须包含其余步骤的数据(现在如果用户没有/跳过漏斗中的任何事件都不会由查询返回数据)。我觉得这是因为当用户流中缺少定义为度量的事件时,模式搜索会失败。

表中的事件顺序不一致,因此我根据业务/渠道逻辑在度量部分中按顺序定义了事件

0 投票
1 回答
64 浏览

sql - SQL Oracle - 按 ID、任务 ID、最小和最大时间戳分组

我有执行不同任务的用户数据。我想根据用户 ID 和任务 ID 对这些数据进行分组,以获取每个任务的开始和结束时间。当员工更改为另一个任务时,应该有一个新的行,其中包含新的开始和结束时间。

示例简化数据集:

用户身份 任务标识 date_time_stamp(升序)
1 任务-A 16/6/2021 04:17:00
1 任务-A 16/6/2021 04:19:00
1 任务-A 16/6/2021 04:27:00
1 任务-B 16/6/2021 04:31:00
1 任务-B 16/6/2021 04:33:00
1 任务-B 16/6/2021 04:36:00
1 任务-A 16/6/2021 04:42:00
1 任务-A 16/6/2021 04:44:00

示例结果

用户身份 任务标识 first_dtm last_dtm
1 任务-A 16/6/2021 04:17:00 16/6/2021 04:27:00
1 任务-B 16/6/2021 04:31:00 16/6/2021 04:36:00
1 任务-A 16/6/2021 04:42:00 16/6/2021 04:44:00

我知道我应该使用一些结合 GROUP BY 的 min() 和 max() 函数。但是,在此示例中,按用户 ID 和任务 ID 分组将导致任务 A 仅占一行。

0 投票
1 回答
132 浏览

sql - 如何获取每个 id 的特定行?

0 投票
1 回答
55 浏览

python - Flink:在 MATCH_RECOGNIZE 中使用 Python UDF 的最佳替代方案是什么?

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

例如,不支持以下内容:

这提出了几个问题:

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

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

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

0 投票
2 回答
203 浏览

sql - 在 Snowflake 中使用 CTE 进行 MATCH_RECOGNIZE

MATCH_RECOGNIZE在带有几个 CTE 的查询中使用函数。当我运行查询时,出现以下错误:

SQL 编译错误:此上下文不支持 MATCH_RECOGNIZE。

在我的查询中,在 MATCH_RECOGNIZE 之前和之后有几个 CTE,如下所示。

解决这个问题的理想方法是什么?例如,创建常规视图、物化视图或临时表等。我尝试创建视图但出现错误,不确定是否支持。我如何使用MATCH_RECOGNIZE其他后续 CTE 中的结果?

当我添加以下内容时,会出现此错误:

位置 0 处的语法错误行 xx 意外“创建”。

0 投票
0 回答
24 浏览

sql - 如何在 Flink CEP SQL 中设置模式之间的连续性?

我们知道,在 Flink CEP Java 中,可以使用 next()、followBy() 和 Continuous() 等 API 来设置不同模式之间的连续性。但是,在 CEP SQL 中,由于语法比较简单,很难清楚地描述模式之间的连续性。

我的问题是,如果定义的模式是 PATTERN(a b+ c),是否所有匹配模式 a、b 和 c 的事件都严格连续?我的意思是,CEP SQL 中的 PATTERN(a b+ c) 是否等同于 CEP Java 中的 a.next(b).oneOrMore().consecutive().next(c)?

例如,对于PATTERN(a b+ c),如果输入事件流是{abbbc axbxbc},我只想输出{abbbc},因为{axbxbc}包含不匹配的事件x,需要排除。

0 投票
1 回答
35 浏览

oracle - 理解匹配识别中的以下子句

这个问题已经得到回答,但我无法得到查询的几个部分。下面是输入表。

我的要求是获得下一个订单(发货日期)是早还是晚。例如- 第一个订单是在 10-05-2020 + 供应(30)= 09-06-2020(下一个预期日期),但患者在 2020 年 7 月 6 日订购,所以第二个订单是早期订单案例。现在,07-06-2020+supply(30)= 09-07-2020(预计日期),但患者于 2020 年 7 月 12 日订购。第三个订单是延迟订单案例。

如果订单较早,则下一个预期日期为发货日期 +供应,但如果订单较晚,则下一个预期日期为上一个预期日期 + 供应。(操作会更好地理解)

下面是我从 Stack Overflow 得到的查询:

模式和定义子句实际上在这里做什么以及它如何计算所需的结果?

0 投票
1 回答
39 浏览

apache-flink - Flink 的 Match_Recognize 函数是否适合捕获这种类型的模式?

我正在尝试以下述模式捕获事件:

  • 开始事件 = SalePackageA 事件(客户 A 购买 PackageA)
  • 2-nd event = PackageUsage 事件(客户 A 使用 PackageA)
  • 第三个事件 = PackageUsage 事件(客户 A 使用 PackageA)
  • 第 4 个事件 = PackageUsage 事件(客户 A 使用 PackageA)
  • ...
  • 第 N 个事件 = PackageUsage 事件(客户 A 使用 PackageA)
  • 停止事件 = SalePackageA 事件(客户 A 再次购买 PackageA)

即:客户购买了一些余额为 2048mb 的数据包,然后客户使用它 - 我在每个 PackageUsage 事件中收到使用的字节。

因此,match_recognize 应该使用一些聚合逻辑对每个 PackageUsage 事件大喊大叫:

而当同一个客户购买同一个套餐时,这个“流程”应该被打断,新的“流程”会重新开始。

Flink 的 CEP 是否适用于所描述的案例?任何想法/建议如何使用 CEP 实现这一点?

0 投票
1 回答
65 浏览

sql - Oracle SQL 或 PL/SQL:在 MATCH_RECOGNIZE 中添加具有不同计算或计算列的多个列

感恩节快乐!!

这篇文章仅用于学习和教育目的

表结构、插入语句和 SQL 查询在下面的 db fiddle 链接中进行了更新,以保持这篇文章的简洁明了。请参考以下链接:

db<>小提琴

我正在尝试计算“7 天移动平均线”,并根据这个新列“7 天移动平均线”添加计算列。尝试了不同的方法并收到错误“此处不允许使用窗口功能”。后来在excel电子表格中尝试并得到了公式。仍然不确定如何使用 Match_Recognize 在 SQL 中实现这一点,因此向各位专家寻求帮助。

请注意:我正在上传 excel 和公式的屏幕截图,因为 stackoverflow 没有让我选择上传 excel 电子表格。

以下是我期望的输出(以黄色突出显示的列): 在此处输入图像描述

更新: 感谢您的建议和纠正我。更新了帖子。

棘手的部分:
列“7_MOV_AVG”:第 8 行(根据 excel 序列号)是单元格 E2 到 E8 的平均值,
而第 9 行(根据 excel 序列号)以后的公式考虑了前一行的值,不知道如何实现这一点。下面是计算截图: 在此处输入图像描述

感谢您对此的任何帮助。提前致谢。

谢谢,
里查