我正在使用Vertica的MATCH子句,Vertica SQL参考手册将其描述为“允许您在搜索事件模式时筛选大量历史数据的SQL扩展,MATCH子句提供了用于分析分区和排序以及匹配的子类结果表中的行基于您定义的模式。“
在程序员指南的示例中,示例中出现了一个短语RESULTS ALL ROWS
,如下所示:
SELECT uid,
sid,
ts,
refurl,
pageurl,
action,
event_name(),
pattern_id(),
match_id()
FROM clickstream_log
MATCH
(PARTITION BY uid, sid ORDER BY ts
DEFINE
Entry AS RefURL NOT ILIKE '%website2.com%' AND PageURL ILIKE '%website2.com%',
Onsite AS PageURL ILIKE '%website2.com%' AND Action='V',
Purchase AS PageURL ILIKE '%website2.com%' AND Action = 'P'
PATTERN
P AS (Entry Onsite* Purchase)
RESULTS ALL ROWS);
但是,我无法找到RESULTS ALL ROWS
所做的定义。令人不安的是,它会影响输出,但会以某种微妙的方式。 (意思是,需要很多行才能达到差异。)
任何人都知道这句话究竟是做什么的?
答案 0 :(得分:1)
我怀疑这是遗留陈述。在v6.1中,它已替换为ROW MATCH (ALL EVENTS | FIRST EVENT)
定义如何为单行解析多个评估为true的事件。
如果您使用ROWS MATCH ALL EVENTS(默认),如果单个行的多个事件的计算结果为true,HP Vertica将返回以下运行时错误:
错误:模式事件必须互斥
提示:尝试使用ROWS MATCH FIRST EVENT 对于ROWS MATCH FIRST EVENT,如果单个行的多个事件的计算结果为true,则HP Vertica会选择SQL语句中首先定义的事件作为它用于该行的事件。