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

AnalyticDB:パス分析関数

最終更新日:Jul 29, 2024

AnalyticDB for MySQLは、パス計算ジョブの効率的な処理、イベントシーケンスの照合とカウント、および複雑なイベントシーケンスの検出と統計に分析結果を適用するのに役立つパス分析機能を提供します。 このトピックでは、パス分析関数の使用方法について説明します。

AnalyticDB for MySQLは、次のパス分析機能をサポートしています。

  • SEQUENCE_MATCH(): イベントのシーケンスが特定の順序で発生するかどうかを確認します。

  • SEQUENCE_COUNT(): 特定のイベントシーケンスの発生回数をカウントする。

前提条件

V3.2.1.0以降のAnalyticDB for MySQLクラスターが作成されます。

説明

AnalyticDB For MySQLクラスターのマイナーバージョンを表示する方法については、クラスターのマイナーバージョンを表示するにはどうすればよいですか。 クラスターのマイナーバージョンを更新するには、テクニカルサポートにお問い合わせください。

テストデータセット

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

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

    CREATE TABLE sequence_test(
      `uid` INT COMMENT 'user id',
      `ts` DATETIME COMMENT 'date time', 
      `number` INT NULL COMMENT 'number' 
    );
  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

特定のイベントの発生順序を一致させるために使用される正規表現。

サポートされている形式: '(?n)(?n)''(?n).*(?n)''(?n)(?t演算子値)(?n)' 。 パラメーター:

  • (?n): 条件リスト内のマッチング条件の位置。 値nは条件の数を超えることはできず、0にすることはできません。

  • .*: 指定された条件に一致する2つのイベント間の他のイベントの数を許可します。

  • (?t演算子値): 2つのイベント間の時間差を指定します。

    • t: 固定予約フィールドであるタイムスタンプフィールド。

    • operator: オペレータ。 有効な値:>=,>,<,<=,==,<>、および!=.

    • value: 一致する時間値。浮動小数点数、正数、または負数にすることができます。 時間値の単位は、データ型によって異なります。

      • DATATIMEおよびTIMESTAMPデータ型の単位: ミリ秒。

      • DATEデータ型の単位: 日。

      • BIGINTデータ型の単位: イベントの時間単位によって異なります。

timestamp

イベントのtimestampフィールド。イベントが発生した時刻を指定します。 タイムスタンプフィールドの値は、BIGINT、DATETIME、timestamp、またはDATEタイプにすることができます。

cond

一致するイベント条件。 各条件は、イベントのフィールドを照合するために使用される。

戻り値のデータ型はBOOLEANです。

最大32の条件を指定できます。

説明

この関数は、最初に指定された条件に一致するイベントのシーケンスを照会し、次に指定された正規表現に対してシーケンスを照合します。

  • number = 1number = 2number = 3の条件に一致するイベントのシーケンスを照会します。 クエリされたイベントのシーケンスが次の要件を満たしているかどうかを確認します。number = 3に一致するイベントは、number = 1に一致するイベントの直後に発生しました。

    サンプル文:

    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の条件に一致するイベントのシーケンスを照会します。 クエリされたイベントのシーケンスが次の要件を満たしているかどうかを確認します。number = 3に一致するイベントは、number = 1に一致するイベントの後に発生しました。

    サンプル文:

    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の条件に一致するイベントのシーケンスを照会します。 クエリされたイベントのシーケンスが次の要件を満たしているかどうかを確認します。number = 2に一致するイベントは、number = 1に一致するイベントの後に発生し、2つのイベント間の時間差が3,600ミリ秒以上です。

    サンプル文:

    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

特定のイベントの発生順序を一致させるために使用される正規表現。

サポートされている形式: '(?n)(?n)''(?n).*(?n)''(?n)(?t演算子値)(?n)' 。 パラメーター:

  • (?n): 条件リスト内のマッチング条件の位置。 値nは条件の数を超えることはできず、0にすることはできません。

  • .*: 指定された条件に一致する2つのイベント間の他のイベントの数を許可します。

  • (?t演算子値): 2つのイベント間の時間差を指定します。

    • t: 固定予約フィールドであるタイムスタンプフィールド。

    • operator: オペレータ。 有効な値:>=,>,<,<=,==,<>、および!=.

    • value: 一致する時間値。浮動小数点数、正数、または負数にすることができます。 時間値の単位は、データ型によって異なります。

      • DATATIMEおよびTIMESTAMPデータ型の単位: ミリ秒。

      • DATEデータ型の単位: 日。

      • BIGINTデータ型の単位: イベントの時間単位によって異なります。

timestamp

イベントのtimestampフィールド。イベントが発生した時刻を指定します。 タイムスタンプフィールドの値は、BIGINT、DATETIME、timestamp、またはDATEタイプにすることができます。

cond

一致するイベント条件。 各条件は、イベントのフィールドを照合するために使用される。

戻り値のデータ型はBOOLEANです。

最大32の条件を指定できます。

説明

この関数は、最初に指定された条件に一致するイベントのシーケンスを照会し、次に指定された正規表現に対してシーケンスを照合します。

  • number = 1number = 2number = 3の条件に一致するイベントのシーケンスを照会します。 クエリされた一連のイベントの中で、次の要件を満たす一連のイベントの数を数えます。number=3に一致するイベントは、number=1に一致するイベントの直後に発生しました。

    例:

    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の条件に一致するイベントのシーケンスを照会します。 クエリされた一連のイベントの中で、次の要件を満たす一連のイベントの数をカウントします。number = 3に一致するイベントは、number = 1に一致するイベントと、オプションでその間の他のイベントの後に発生しました。

    例:

    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の条件に一致するイベントのシーケンスを照会します。 クエリされた一連のイベントの中で、次の要件を満たす一連のイベントの数を数えます。number = 2に一致するイベントは、number = 1に一致するイベントの後に発生し、2つのイベント間の時間差が3,600ミリ秒以上です。

    例:

    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                                   |
    +------------------------------------------------------------------+