すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:パス解析関数

最終更新日:Nov 09, 2025

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 コンソールにログインし、クラスター情報 ページの 構成情報 セクションに移動します。

テストデータセット

次の例は、パス解析関数をテストするためのデータセットを準備する方法を示しています。

  1. AnalyticDB for MySQL のテストテーブルを作成します。

    CREATE TABLE sequence_test(
      `uid` INT COMMENT 'ユーザー ID',
      `ts` DATETIME COMMENT '日時', 
      `number` INT NULL COMMENT '番号' 
    );
  2. テストテーブルにデータを挿入します。

    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 の構文は、'(?n)(?n)''(?n).*(?n)'、および '(?n)(?t operator value)(?n)' です。パラメーターは次のように説明されます。

  • (?n): 条件付きイベントに一致します。これは、cond 制約のリストにある n 番目の条件を表します。n の値は 0 にすることはできず、cond 制約の数を超えることもできません。

  • .*: 指定された 2 つのイベントの間に、他のイベントがいくつでも発生することを許可します。

  • (?t operator value): 2 つのイベント間の時間差を指定します。

    • t: タイムスタンプフィールドを表す固定の予約語。

    • operator: オペレーター。サポートされているオペレーターには、>=><<===<>、および != が含まれます。

    • value: タイムスタンプフィールドの値。このパラメーターは、浮動小数点数、正の数、および負の数をサポートします。

      • DATETIME 型と TIMESTAMP 型の場合、単位はミリ秒 (ms) です。

      • DATE 型の場合、単位は日 (d) です。

      • BIGINT 型の場合、単位はイベントの時間単位によって異なります。

timestamp

イベントのタイムスタンプフィールド。イベントが発生した日時を示します。このフィールドは、BIGINT、DATETIME、TIMESTAMP、および DATE データ型をサポートします。

cond

イベントの制約。各制約は通常、フィールドに対する比較操作です。

データ型は BOOLEAN です。

最大 32 個の cond 制約を渡すことができます。

説明

この関数は、まず cond 制約を満たすイベントをフィルターし、次にそれらをパターンと照合します。

  • この例では、イベントシーケンスを number=1number=2number=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=1number=2number=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=1number=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 の構文は、'(?n)(?n)''(?n).*(?n)'、および '(?n)(?t operator value)(?n)' です。パラメーターは次のように説明されます。

  • (?n): 条件付きイベントに一致します。これは、cond 制約のリストにある n 番目の条件を表します。n の値は 0 にすることはできず、cond 制約の数を超えることもできません。

  • .*: 指定された 2 つのイベントの間に、他のイベントがいくつでも発生することを許可します。

  • (?t operator value): 2 つのイベント間の時間差を指定します。

    • t: タイムスタンプフィールドを表す固定の予約語。

    • operator: オペレーター。サポートされているオペレーターには、>=><<===<>、および != が含まれます。

    • value: タイムスタンプフィールドの値。このパラメーターは、浮動小数点数、正の数、および負の数をサポートします。

      • DATETIME 型と TIMESTAMP 型の場合、単位はミリ秒 (ms) です。

      • DATE 型の場合、単位は日 (d) です。

      • BIGINT 型の場合、単位はイベントの時間単位によって異なります。

timestamp

イベントのタイムスタンプフィールド。イベントが発生した日時を示します。このフィールドは、BIGINT、DATETIME、TIMESTAMP、および DATE データ型をサポートします。

cond

イベントの制約。各制約は通常、フィールドに対する比較操作です。

データ型は BOOLEAN です。

最大 32 個の cond 制約を渡すことができます。

説明

この関数は、まず cond 制約を満たすイベントをフィルターし、次にそれらをパターンと照合します。

  • この例では、イベントシーケンスを number=1number=2number=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=1number=2number=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=1number=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                                   |
    +------------------------------------------------------------------+