AnalyticDB for MySQL は、SEQUENCE_MATCH や SEQUENCE_COUNT などのパス解析関数を提供し、パス計算タスクを効率的に処理します。これらの関数は、イベントシーケンスを照合およびカウントします。分析結果を使用して、複雑なイベントシーケンスを検出および分析できます。このトピックでは、これらのパス解析関数の使用方法について説明します。
AnalyticDB for MySQL は、次のパス解析関数をサポートしています。
SEQUENCE_MATCH(): 特定の順序でイベントのシーケンスが発生するかどうかをチェックします。
SEQUENCE_COUNT(): 特定のイベントシーケンスの発生回数をカウントします。
前提条件
V3.2.1.0 以降の AnalyticDB for MySQL クラスターが作成されていること。
AnalyticDB for MySQL クラスターのマイナーバージョンを表示および更新するには、AnalyticDB for MySQL コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。
テストデータセット
次の例は、パス解析関数をテストするためのデータセットを準備する方法を示しています。
AnalyticDB for MySQL のテストテーブルを作成します。
CREATE TABLE sequence_test( `uid` INT COMMENT 'ユーザー ID', `ts` DATETIME COMMENT '日時', `number` INT NULL COMMENT '番号' );テストテーブルにデータを挿入します。
INSERT INTO sequence_test VALUES (1, '2022-11-02 10:41:00', 1); INSERT INTO sequence_test VALUES (2, '2022-11-02 13:28:02', 2); INSERT INTO sequence_test VALUES (3, '2022-11-02 16:15:01', 1); INSERT INTO sequence_test VALUES (4, '2022-11-02 19:05:04', 2); INSERT INTO sequence_test VALUES (5, '2022-11-02 20:08:44', 3);
SEQUENCE_MATCH
SEQUENCE_MATCH() 関数は、特定の順序でイベントのシーケンスが発生するかどうかをチェックします。この関数は、指定された正規表現に対してイベントのシーケンスを照合し、ブール値を返します。値 1 は、イベントのシーケンスが指定された正規表現に一致することを示します。値 0 は、イベントのシーケンスが指定された正規表現に一致しないことを示します。
構文
SEQUENCE_MATCH(pattern, timestamp, cond1, cond2, ...)パラメーター
パラメーター | 説明 |
pattern | イベントの発生順序を照合するために使用される正規表現。 サポートされている pattern の構文は、
|
timestamp | イベントのタイムスタンプフィールド。イベントが発生した日時を示します。このフィールドは、BIGINT、DATETIME、TIMESTAMP、および DATE データ型をサポートします。 |
cond | イベントの制約。各制約は通常、フィールドに対する比較操作です。 データ型は BOOLEAN です。 最大 32 個の cond 制約を渡すことができます。 説明 この関数は、まず cond 制約を満たすイベントをフィルターし、次にそれらをパターンと照合します。 |
例
この例では、イベントシーケンスを
number=1、number=2、number=3の 3 種類のイベントでフィルターします。次に、number=1のイベントの直後にnumber=3のイベントが続くかどうかをチェックします。サンプル文:
SELECT SEQUENCE_MATCH('(?1)(?3)', ts, number = 1, number = 2, number = 3) FROM sequence_test;サンプル結果:
+-------------------------------------------------------------------+ | sequence_match('(?1)(?3)', ts, number = 1, number = 2, number = 3)| +-------------------------------------------------------------------+ | 0 | +-------------------------------------------------------------------+この例では、イベントシーケンスを
number=1、number=2、number=3の 3 種類のイベントでフィルターします。次に、number=1のイベントの後にnumber=3のイベントが発生するかどうかをチェックします。その際、間に他のイベントがいくつでも入ることを許可します。サンプル文:
SELECT SEQUENCE_MATCH('(?1).*(?3)', ts, number = 1, number = 2, number = 3) FROM sequence_test;サンプル結果:
+----------------------------------------------------------------------+ | sequence_match('(?1).*(?3)', ts, number = 1, number = 2, number = 3) | +----------------------------------------------------------------------+ | 1 | +----------------------------------------------------------------------+この例では、イベントシーケンスを
number=1とnumber=2の 2 種類のイベントでフィルターします。次に、number=1のイベントの直後にnumber=2のイベントが続き、それらの間の時間差が 3,600 ms 以上であるかどうかをチェックします。サンプル文:
SELECT SEQUENCE_MATCH('(?1)(?t>=3600)(?2)', ts, number = 1, number = 2) FROM sequence_test;サンプル結果:
+------------------------------------------------------------------+ | sequence_match('(?1)(?t>=3600)(?2)', ts, number = 1, number = 2) | +------------------------------------------------------------------+ | 1 | +------------------------------------------------------------------+
SEQUENCE_COUNT
SEQUENCE_COUNT() 関数は、特定のイベントシーケンスの発生回数をカウントします。
構文
SEQUENCE_COUNT(pattern, timestamp, cond1, cond2, ...)パラメーター
パラメーター | 説明 |
pattern | イベントの発生順序を照合するために使用される正規表現。 サポートされている pattern の構文は、
|
timestamp | イベントのタイムスタンプフィールド。イベントが発生した日時を示します。このフィールドは、BIGINT、DATETIME、TIMESTAMP、および DATE データ型をサポートします。 |
cond | イベントの制約。各制約は通常、フィールドに対する比較操作です。 データ型は BOOLEAN です。 最大 32 個の cond 制約を渡すことができます。 説明 この関数は、まず cond 制約を満たすイベントをフィルターし、次にそれらをパターンと照合します。 |
例
この例では、イベントシーケンスを
number=1、number=2、number=3の 3 種類のイベントでフィルターします。次に、number=1のイベントの直後にnumber=3のイベントが続く回数をカウントします。サンプル文:
SELECT SEQUENCE_COUNT('(?1)(?3)', ts, number = 1, number = 2, number = 3) FROM sequence_test;サンプル結果:
+--------------------------------------------------------------------+ | sequence_count('(?1)(?3)', ts, number = 1, number = 2, number = 3) | +--------------------------------------------------------------------+ | 0 | +--------------------------------------------------------------------+この例では、イベントシーケンスを
number=1、number=2、number=3の 3 種類のイベントでフィルターします。次に、number=1のイベントの後にnumber=3のイベントが発生する回数をカウントします。その際、間に他のイベントがいくつでも入ることを許可します。サンプル文:
SELECT SEQUENCE_COUNT('(?1).*(?3)', ts, number = 1, number = 2, number = 3) FROM sequence_test;サンプル結果:
+----------------------------------------------------------------------+ | sequence_count('(?1).*(?3)', ts, number = 1, number = 2, number = 3) | +----------------------------------------------------------------------+ | 1 | +----------------------------------------------------------------------+この例では、イベントシーケンスを
number=1とnumber=2の 2 種類のイベントでフィルターします。次に、number=1のイベントの直後にnumber=2のイベントが続き、それらの間の時間差が 3,600 ms 以上である回数をカウントします。サンプル文:
SELECT SEQUENCE_COUNT('(?1)(?t>=3600)(?2)', ts, number = 1, number = 2) FROM sequence_test;サンプル結果:
+------------------------------------------------------------------+ | sequence_count('(?1)(?t>=3600)(?2)', ts, number = 1, number = 2) | +------------------------------------------------------------------+ | 2 | +------------------------------------------------------------------+