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

Data Transmission Service:DTS の移行タスクまたは同期タスクにおける ETL の設定

最終更新日:Jun 23, 2026

Data Transmission Service (DTS) は、ストリームベースの抽出・変換・書き出し (ETL) データ処理機能を提供します。DTS の効率的なストリームデータレプリケーションと組み合わせることで、この機能はストリーミングデータのリアルタイムな抽出、変換、操作、書き出しを可能にします。このトピックでは、DTS リンク内で ETL を設定する方法について説明し、データフィルタリング、データマスキング、データ変更タイムスタンプの記録、データ変更の監査などのシナリオで ETL を使用するのに役立つ関連構文情報を提供します。

背景情報

DTS は、データの再配置やリアルタイムのデータ転送に一般的に使用されるデータ移行および同期サービスです。ユーザーは、ターゲットデータベースに書き込む前にリアルタイムデータを変換またはフィルタリングする必要がある場合があります。このニーズに応えるため、DTS はドメイン特化言語 (DSL) スクリプト言語を使用したストリームベースの ETL データ処理を提供し、データ処理ロジックを柔軟に定義できます。DSL の概要とその設定構文については、「データ処理 DSL 構文の概要」をご参照ください。

DTS は、次の 2 つの方法で ETL を設定できます。

説明

DTS の移行タスクと同期タスクはどちらも ETL 設定をサポートしています。このトピックでは、同期タスクを例に説明します。移行タスクの設定方法も同様です。

サポートされるデータベース

次の表に、ETL でサポートされるソースデータベースとターゲットデータベースを示します。

ソースデータベース

ターゲットデータベース

SQL Server

  • AnalyticDB for MySQL 3.0

  • SQL Server

  • MySQL

  • PolarDB for MySQL

MySQL

  • AnalyticDB for MySQL 3.0

  • AnalyticDB for PostgreSQL

  • Kafka

  • ClickHouse クラスター

  • MySQL

  • PolarDB for MySQL

  • Elasticsearch

  • Redis

セルフマネージド Oracle

  • AnalyticDB for MySQL 3.0

  • AnalyticDB for PostgreSQL

  • Kafka

  • MaxCompute

  • PolarDB-X 2.0

  • PolarDB for PostgreSQL (Compatible with Oracle)

PolarDB for MySQL

  • AnalyticDB for MySQL 3.0

  • MySQL

  • PolarDB for MySQL

PolarDB for PostgreSQL (Compatible with Oracle)

  • AnalyticDB for MySQL 3.0

  • PolarDB for PostgreSQL (Compatible with Oracle)

PolarDB-X 1.0

  • Kafka

  • Tablestore

PolarDB-X 2.0

  • PolarDB-X 2.0

  • AnalyticDB for MySQL 3.0

  • MySQL

  • PolarDB for MySQL

セルフマネージド Db2 for LUW

MySQL

セルフマネージド Db2 for i

MySQL

PolarDB for PostgreSQL

  • PolarDB for PostgreSQL

  • PostgreSQL

PostgreSQL

  • PolarDB for PostgreSQL

  • PostgreSQL

  • ApsaraDB SelectDB Edition

TiDB

  • PolarDB for MySQL

  • MySQL

  • AnalyticDB for MySQL 3.0

MongoDB

Lindorm

同期タスク作成時の ETL 設定

注意事項

  • ETL スクリプトで新しい列を追加する場合、その列をターゲットデータベースに手動で追加する必要があります。そうしないと、ETL スクリプトは有効になりません。たとえば、e_set(`new_column`, dt_now()) では、new_column をターゲットデータベースに手動で追加する必要があります。

  • DSL スクリプトは、データ変換とクリーニング操作のみを処理します。データベースオブジェクトの作成はサポートしていません。

  • DSL スクリプトで参照されるフィールドは、ソースデータベースに存在し、どのフィルター条件によっても除外されていない必要があります。そうしないと、タスクが失敗する可能性があります。

  • DSL スクリプトでは、大文字と小文字が区別されます。データベース名、テーブル名、フィールド名は、ソースデータベースのものと完全に一致する必要があります。

  • DSL スクリプトは複数の式をサポートしていません。複数の式を 1 つにまとめるには、e_compose 関数を使用します。

  • ソースデータベースのすべてのテーブルからのすべての DML 変更は、DSL 処理後に同一の列情報を生成する必要があります。そうしないと、タスクが失敗する可能性があります。たとえば、e_set 関数を使用して列を追加する場合、ソースデータベースからの INSERT、UPDATE、DELETE 操作がすべて、ターゲットテーブルで同じ追加列を生成するようにしてください。詳細については、「データ変更時刻の記録」をご参照ください。

操作手順

  1. 同期タスクを作成します。詳細については、「同期ソリューションの概要」をご参照ください。

  2. 詳細設定 ステップで、ETL 機能の設定 に設定します。

  3. 入力ボックスに、データ処理 DSL 構文 を使用して ETL 文を入力します。

    説明

    たとえば、id が 3 より大きいレコードを削除するには、e_if(op_gt(`id`, 3), e_drop()) を使用します。ここで、op_gt は値が別の値より大きいかどうかをチェックする式関数であり、id は変数です。このスクリプトは id > 3 のレコードを除外します。

  4. 必要に応じて残りのステップを完了します。

既存の同期タスクにおける ETL 設定の変更

既存の同期タスクで ETL 設定を変更するには、次のものが含まれます。

  • ETL が設定されていない既存の同期タスクがある場合 (つまり、同期タスクの作成時に ETL 機能の設定いいえ に設定されていた場合)、いいえ に変更して DSL スクリプトを設定できます。

  • ETL がすでに設定されている場合は、既存の DSL スクリプトを変更するか、ETL 機能の設定いいえ に設定できます。

    重要
    • 既存の DSL スクリプトを編集するには、まず同期オブジェクトを選択中のオブジェクトからソースオブジェクトに戻し、選択中のオブジェクトに再度追加してから DSL スクリプトを編集します。

    • 移行タスクでは DSL スクリプトの変更はサポートされていません。

注意事項

  • 既存の同期タスクで ETL 設定を変更しても、ターゲットデータベースのテーブルスキーマの変更はサポートされません。スキーマを変更するには、同期タスクを開始する前にターゲットデータベースで変更してください。

  • ETL 設定を変更すると、データリンクが中断される可能性があります。注意して進めてください。

  • ETL 設定の変更は、タスクの再起動後に処理される増分データにのみ適用されます。変更前に処理された既存データには影響しません。

  • DSL スクリプトは、データ変換とクリーニング操作のみを処理します。データベースオブジェクトの作成はサポートしていません。

  • DSL スクリプトで参照されるフィールドは、ソースデータベースに存在し、どのフィルター条件によっても除外されていない必要があります。そうしないと、タスクが失敗する可能性があります。

  • DSL スクリプトでは、大文字と小文字が区別されます。データベース名、テーブル名、フィールド名は、ソースデータベースのものと完全に一致する必要があります。

  • DSL スクリプトは複数の式をサポートしていません。複数の式を 1 つにまとめるには、e_compose 関数を使用します。

  • ソースデータベースのすべてのテーブルからのすべての DML 変更は、DSL 処理後に同一の列情報を生成する必要があります。そうしないと、タスクが失敗する可能性があります。たとえば、e_set 関数を使用して列を追加する場合、ソースデータベースからの INSERT、UPDATE、DELETE 操作がすべて、ターゲットテーブルで同じ追加列を生成するようにしてください。詳細については、「データ変更時刻の記録」をご参照ください。

操作手順

  1. 新しい DTS 同期タスクのリストページにログインします。

  2. 対象の同期タスクで、点点点 をクリックし、ETL 設定の変更 を選択します。

  3. 詳細設定 ステップで、ETL 機能の設定 に設定します。

  4. 入力ボックスに、データ処理 DSL 構文 を使用して ETL 文を入力します。

    説明

    たとえば、id が 3 より大きいレコードを削除するには、e_if(op_gt(`id`, 3), e_drop()) を使用します。ここで、op_gt は値が別の値より大きいかどうかをチェックする式関数であり、id は変数です。このスクリプトは id > 3 のレコードを除外します。

  5. 必要に応じて残りのステップを完了します。

データ処理 DSL 構文の概要

データ処理 DSL は、データ同期シナリオにおけるデータ処理のために DTS が特別に設計したスクリプト言語です。条件関数をサポートし、文字列、日付、数値を処理できるため、以下の特徴を持つデータ処理ロジックを柔軟に定義できます。

  • 強力な機能:多くの関数を提供し、関数の組み合わせをサポートします。

  • 比較的シンプルな構文:データフィルタリング、変換、マスキングなどの一般的なシナリオの例が含まれています。詳細については、「一般的なシナリオ例」をご参照ください。

  • 高い実行効率:コード生成技術を使用して、同期プロセスへのパフォーマンスへの影響を最小限に抑えます。

説明
  • DSL 構文では、列名は一重引用符 ('') ではなく、バッククォート (``) を使用します。

  • このプロダクトは SLS データ処理構文をリファレンスしています。JSON 関数はサポートしていますが、イベント分割関数はサポートしていません。SLS 構文については、「構文の概要」をご参照ください。

一般的なシナリオ例

データフィルタリング

  • 数値列によるフィルタリング:id > 10000 のレコードを削除して同期しないようにします:e_if(op_gt(`id`, 10000), e_drop())。

  • 文字列一致によるフィルタリング:name に "hangzhou" が含まれるレコードを削除します:e_if(str_contains(`name`, "hangzhou"), e_drop())。

  • 日付によるフィルタリング:order_timestamp が特定の日時より前のレコードを同期しません:e_if(op_lt(`order_timestamp`, "2015-02-23 23:54:55"), e_drop())。

  • 複数条件によるフィルタリング:

    • id > 1000 かつ name に "hangzhou" が含まれるレコードを削除します:e_if(op_and(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop())。

    • id > 1000 または name に "hangzhou" が含まれるレコードを削除します:e_if(op_or(str_contains(`name`, "hangzhou"), op_gt(`id`, 1000)), e_drop())。

データマスキング

マスキング:電話番号列の最後の 4 桁をアスタリスクに置き換えます:e_set(`phone`, str_mask(`phone`, 7, 10, '*'))。

データ変更時刻の記録

  • すべてのテーブルに列を追加:__OPERATION__ が INSERT、UPDATE、または DELETE の場合、"dts_sync_time" という名前の列を追加し、その値をログのコミットタイムスタンプ (__COMMIT_TIMESTAMP__) にします。

    e_if(op_or(op_or(
            op_eq(__OPERATION__, __OP_INSERT__),
            op_eq(__OPERATION__, __OP_UPDATE__)),
            op_eq(__OPERATION__, __OP_DELETE__)),
        e_set(dts_sync_time, __COMMIT_TIMESTAMP__))
  • 特定のテーブル "dts_test_table" に列を追加:__OPERATION__ が INSERT、UPDATE、または DELETE の場合、"dts_sync_time" という名前の列を追加し、その値をログのコミットタイムスタンプ (__COMMIT_TIMESTAMP__) にします。

    e_if(op_and(
          op_eq(__TB__,'dts_test_table'),
          op_or(op_or(
            op_eq(__OPERATION__,__OP_INSERT__),
            op_eq(__OPERATION__,__OP_UPDATE__)),
            op_eq(__OPERATION__,__OP_DELETE__))),
          e_set(dts_sync_time,__COMMIT_TIMESTAMP__))
    説明

    タスクを開始する前に、ターゲットテーブルに "dts_sync_time" 列を手動で追加する必要があります。

データ変更の監査

データ変更の種類と時刻を記録:変更の種類を "operation_type" 列に、変更タイムスタンプを "updated" 列にターゲットデータベースに書き込みます。

e_compose(
    e_switch(
        op_eq(__OPERATION__,__OP_DELETE__), e_set(operation_type, 'DELETE'),
        op_eq(__OPERATION__,__OP_UPDATE__), e_set(operation_type, 'UPDATE'),
        op_eq(__OPERATION__,__OP_INSERT__), e_set(operation_type, 'INSERT')),
    e_set(updated, __COMMIT_TIMESTAMP__),
    e_set(__OPERATION__,__OP_INSERT__)
)
説明

タスクを開始する前に、ターゲットテーブルに "operation_type" と "updated" 列を追加する必要があります。

完全データと増分データの区別

データが完全移行または増分移行からのものかを is_increment_dml 列に記録します。__COMMIT_TIMESTAMP__ の値を確認することで、完全移行と増分移行を区別できます。完全移行では、__COMMIT_TIMESTAMP__ は 0 (1970-01-01 08:00:00、タイムゾーンの影響を受けます) です。増分移行では、ソースデータベースのログ書き込み時刻を反映します。対応する ETL スクリプトは次のとおりです。

e_if_else(__COMMIT_TIMESTAMP__ > DATETIME('2000-01-01 00:00:00'), 
    e_set(`is_increment_dml`, True),
    e_set(`is_increment_dml`, False)
)

データ処理 DSL 構文

定数と変数

  • 定数

    タイプ

    int

    123

    float

    123.4

    string

    "hello1_world"

    boolean

    true または false

    datetime

    DATETIME('2021-01-01 10:10:01')

  • 変数

    変数

    説明

    データの型

    値の例

    __TB__

    テーブル名

    string

    table

    __DB__

    データベース名

    string

    mydb

    __OPERATION__

    操作タイプ

    string

    __OP_INSERT__, __OP_UPDATE__, __OP_DELETE__

    __BEFORE__

    UPDATE 操作の変更前の値 (pre-image)

    説明

    DELETE 操作には変更前の値のみがあります。

    特殊マーカー、型なし

    v(`column_name`,__BEFORE__)

    __AFTER__

    UPDATE 操作の変更後の値 (post-image)

    説明

    INSERT 操作には変更後の値のみがあります。

    特殊マーカー、型なし

    v(`column_name`,__AFTER__)

    __COMMIT_TIMESTAMP__

    トランザクションのコミット時刻

    datetime

    '2021-01-01 10:10:01'

    `column`

    レコードの指定された列の値

    string

    `id`, `name`

式関数

  • 数値演算

    関数

    構文

    有効値

    戻り値

    加算

    op_sum(value1, value2)

    • value1: 整数または浮動小数点数

    • value2: 整数または浮動小数点数

    両方のパラメーターが整数の場合は整数を返し、それ以外の場合は浮動小数点数を返します。

    op_sum(`col1`, 1.0)

    減算

    op_sub(value1, value2)

    • value1: 整数または浮動小数点数

    • value2: 整数または浮動小数点数

    両方のパラメーターが整数の場合は整数を返し、それ以外の場合は浮動小数点数を返します。

    op_sub(`col1`, 1.0)

    乗算

    op_mul(value1, value2)

    • value1: 整数または浮動小数点数

    • value2: 整数または浮動小数点数

    両方のパラメーターが整数の場合は整数を返し、それ以外の場合は浮動小数点数を返します。

    op_mul(`col1`, 1.0)

    部門

    op_div_true(value1, value2)

    • value1: 整数または浮動小数点数

    • value2: 整数または浮動小数点数

    両方のパラメーターが整数の場合は整数を返し、それ以外の場合は浮動小数点数を返します。

    op_div_true(`col1`, 2.0); col1=15 の場合、7.5 を返します。

    剰余演算

    op_mod(value1, value2)

    • value1: 整数または浮動小数点数

    • value2: 整数または浮動小数点数

    両方のパラメーターが整数の場合は整数を返し、それ以外の場合は浮動小数点数を返します。

    op_mod(`col1`, 10); col1=23 の場合、3 を返します。

  • 論理演算

    関数

    構文

    有効な値

    戻り値

    等価性チェック

    op_eq(value1, value2)

    • value1: 整数、浮動小数点数、または文字列

    • value2: 整数、浮動小数点数、または文字列

    ブール値:true または false

    op_eq(`col1`, 23)

    より大きいかどうかのチェック

    op_gt(value1, value2)

    • value1: 整数、浮動小数点数、または文字列

    • value2: 整数、浮動小数点数、または文字列

    ブール値:true または false

    op_gt(`col1`, 1.0)

    より小さい

    op_lt(value1, value2)

    • value1: 整数、浮動小数点数、または文字列

    • value2: 整数、浮動小数点数、または文字列

    ブール値:true または false

    op_lt(`col1`, 1.0)

    以上かどうかのチェック

    op_ge(value1, value2)

    • value1: 整数、浮動小数点数、または文字列

    • value2: 整数、浮動小数点数、または文字列

    ブール値:true または false

    op_ge(`col1`, 1.0)

    以下かどうかのチェック

    op_le(value1, value2)

    • value1: 整数、浮動小数点数、または文字列

    • value2: 整数、浮動小数点数、または文字列

    ブール値:true または false

    op_le(`col1`, 1.0)

    AND 演算

    op_and(value1, value2)

    • value1: ブール値

    • value2: ブール値

    ブール値:true または false

    op_and(`is_male`, `is_student`)

    OR 演算

    op_or(value1, value2)

    • value1: ブール値

    • value2: ブール値

    ブール値:true または false

    op_or(`is_male`, `is_student`)

    IN 演算

    op_in(value, json_array)

    • value: 任意の型

    • json_array: JSON 形式の文字列

    ブール値:true または false

    op_in(`id`,json_array('["0","1","2","3","4","5","6","7","8"]'))

    値が null かどうかをチェック

    op_is_null(value)

    value: 任意の型

    ブール値:true または false

    op_is_null(`name`)

    値が null でないかどうかをチェック

    op_is_not_null(value)

    value: 任意の型

    ブール値:true または false

    op_is_not_null(`name`)

  • 文字列関数

    関数

    構文

    値の範囲

    戻り値

    文字列の連結

    op_add(str_1,str_2,...,str_n)

    • str_1: 文字列

    • str_2: 文字列

    • ...

    • str_n: 文字列

    連結された文字列

    op_add(`col`,'hangzhou','dts')

    文字列のフォーマットと連結

    str_format(format, value1, value2, value3, ...)

    • format: 中括弧をプレースホルダーとして使用する文字列、例:"part1: {}, part2: {}"

    • value1: 任意の型

    • value2: 任意の型

    フォーマットされた文字列

    str_format("part1: {}, part2: {}", `col1`, `col2`); col1="ab" かつ col2="12" の場合、"part1: ab, part2: 12" を返します。

    文字列の置換

    str_replace(original, oldStr, newStr, count)

    • original: 元の文字列

    • oldStr: 置換する文字列

    • newStr: 置換後の文字列

    • count: 整数、最大置換回数。すべての出現箇所を置換する場合は -1 を設定します。

    置換された文字列

    str_replace(`name`, "a", 'b', 1); name="aba" の場合、"bba" を返します。str_replace(`name`, "a", 'b', -1); name="aba" の場合、"bbb" を返します。

    すべての文字列型フィールド (varchar、text、char など) の値を置換

    tail_replace_string_field(search, replace, all)

    • search: 置換する文字列

    • replace: 置換後の文字列

    • all: すべての一致を置換するかどうか。現在、true のみをサポートしています。

      説明

      すべての一致を置換したくない場合は、str_replace 関数を使用してください。

    置換された文字列

    tail_replace_string_field('\u000f', '', true) は、文字列型フィールド値のすべての "\u000f" をスペースに置き換えます。

    文字列の先頭と末尾から指定された文字を削除

    str_strip(string_val, charSet)

    • string_val: 元の文字列

    • char_set: 削除する文字のセット

    先頭と末尾の文字が削除された文字列

    str_strip(`name`, 'ab'); name=axbzb の場合、xbz を返します。

    文字列を小文字に変換

    str_lower(value)

    value: 文字列の列または文字列リテラル

    小文字の文字列

    str_lower(`str_col`)

    文字列を大文字に変換

    str_upper(value)

    value: 文字列の列または文字列リテラル

    大文字の文字列

    str_upper(`str_col`)

    文字列を数値に変換

    cast_string_to_long(value)

    value: 文字列

    整数

    cast_string_to_long(`col`)

    数値を文字列に変換

    cast_long_to_string(value)

    value: 整数

    文字列

    cast_long_to_string(`col`)

    部分文字列の出現回数をカウント

    str_count(str,pattern)

    • str: 文字列の列または文字列リテラル

    • pattern: 検索する部分文字列

    部分文字列が出現する回数

    str_count(`str_col`, 'abc'); str_col="zabcyabcz" の場合、2 を返します。

    部分文字列の位置を検索

    str_find(str, pattern)

    • str: 文字列の列または文字列リテラル

    • pattern: 検索する部分文字列

    最初の一致の位置。見つからない場合は `-1` を返します

    str_find(`str_col`, 'abc'); `str_col="xabcy"` の場合、`1` を返します。

    文字列が文字のみで構成されているかチェック

    str_isalpha(str)

    str: 文字列の列または文字列リテラル

    true または false

    str_isalpha(`str_col`)

    文字列が数字のみで構成されているかチェック

    str_isdigit(str)

    • str: 文字列の列または文字列リテラル

    true または false

    str_isdigit(`str_col`)

    正規表現のマッチング

    regex_match(str,regex)

    • str: 文字列の列または文字列リテラル

    • regex: 正規表現の文字列の列または文字列リテラル

    true または false

    regex_match(__TB__,'user_\\d+')

    データマスキングのために文字列の一部を指定された文字でマスクします。たとえば、電話番号の最後の 4 桁をアスタリスクに置き換えます

    str_mask(str, start, end, maskStr)

    • str: 文字列の列または文字列リテラル

    • start: 整数、マスキングの開始位置 (最小値 0)

    • end: 整数、マスキングの終了位置 (最大値は文字列の長さマイナス 1)

    • maskStr: 単一文字の文字列、例:'#'

    開始位置から終了位置までの文字がマスクされた文字列

    str_mask(`phone`, 7, 10, '#')

    cond の後の文字列の一部を抽出

    substring_after(str, cond)

    • str: 元の文字列

    • cond: 文字列

    文字列

    説明

    結果には cond は含まれません。

    substring_after(`col`, 'abc')

    cond の前の文字列の一部を抽出

    substring_before(str, cond)

    • str: 元の文字列

    • cond: 文字列

    文字列

    説明

    結果には cond は含まれません。

    substring_before(`col`, 'efg')

    cond1 と cond2 の間の文字列の一部を抽出

    substring_between(str, cond1, cond2)

    • str: 元の文字列

    • cond1: 文字列

    • cond2: 文字列

    文字列

    説明

    結果には cond1 も cond2 も含まれません。

    substring_between(`col`, 'abc','efg')

    値が文字列型かどうかをチェック

    is_string_value(value)

    value: 文字列または列名

    ブール値:true または false

    is_string_value(`col1`)

    文字列型フィールドの内容を置換します。末尾から逆順に開始します

    tail_replace_string_field(search, replace, all)

    search: 置換する文字列

    replace: 置換後の文字列

    all: すべて置換するかどうか。true または false

    置換された文字列

    すべての文字列フィールド値の "\u000f" をスペースに置き換えます。

    tail_replace_string_field('\u000f','',true)

    MongoDB のフィールドの値を取得

    bson_value("field1","field2","field3",...)

    • field1: トップレベルのフィールド名

    • field2: 第 2 レベルのフィールド名

    ドキュメント内の指定されたフィールドの値

    • e_set(`user_id`, bson_value("id"))

    • e_set(`user_name`, bson_value("person","name"))

  • 日付/時刻関数

    関数

    構文

    値の範囲

    戻り値

    現在のシステム時刻

    dt_now()

    なし

    DATETIME、秒単位の精度

    dts_now()

    dt_now_millis()

    なし

    DATETIME、ミリ秒単位の精度

    dt_now_millis()

    UTC タイムスタンプ (秒) を DATETIME に変換

    dt_fromtimestamp(value,[timezone])

    • value: 整数

    • timezone: タイムゾーン (任意)

    DATETIME、秒単位の精度

    dt_fromtimestamp(1626837629)

    dt_fromtimestamp(1626837629,'GMT+08')

    UTC タイムスタンプ (ミリ秒) を DATETIME に変換

    dt_fromtimestamp_millis(value,[timezone])

    • value: 整数

    • timezone: タイムゾーン (任意)

    DATETIME、ミリ秒単位の精度

    dt_fromtimestamp_millis(1626837629123);

    dt_fromtimestamp_millis(1626837629123,'GMT+08')

    DATETIME を UTC タイムスタンプ (秒) に変換

    dt_parsetimestamp(value,[timezone])

    • value: DATETIME

    • timezone: タイムゾーン (任意)

    整数

    dt_parsetimestamp(`datetime_col`)

    dt_parsetimestamp(`datetime_col`,'GMT+08')

    DATETIME を UTC タイムスタンプ (ミリ秒) に変換

    dt_parsetimestamp_millis(value,[timezone])

    • value: DATETIME

    • timezone: タイムゾーン (任意)

    整数

    dt_parsetimestamp_millis(`datetime_col`)

    dt_parsetimestamp_millis(`datetime_col`,'GMT+08')

    DATETIME を文字列に変換

    dt_str(value, format)

    • value: DATETIME

    • format: yyyy-MM-dd HH:mm:ss 形式の文字列

    文字列

    dt_str(`col1`, 'yyyy-MM-dd HH:mm:ss')

    文字列を DATETIME に変換

    dt_strptime(value,format)

    • value: 文字列

    • format: yyyy-MM-dd HH:mm:ss 形式の文字列

    DATETIME

    dt_strptime('2021-07-21 03:20:29', 'yyyy-MM-dd hh:mm:ss')

    年、月、日、時、分、秒を加算または減算して時刻を調整

    dt_add(value, [years=intVal],

    [months=intVal],

    [days=intVal],

    [hours=intVal],

    [minutes=intVal]

    )

    • value: DATETIME

    • intVal: 整数

      説明

      マイナス記号 (-) は減算を示します。

    DATETIME

    • dt_add(datetime_col,years=-1)

    • dt_add(datetime_col,years=1,months=1)

  • 条件式

    関数

    構文

    値の範囲

    戻り値

    C 言語の三項演算子 (? :) と同様に、条件に基づいて値を返します

    (cond ? val_1 : val_2)

    • cond: ブール型のフィールドまたは式

    • val_1: 戻り値 1

    • val_2: 戻り値 2

      説明

      val_1 と val_2 は同じ型である必要があります。

    cond が true の場合は val_1 を返し、それ以外の場合は val_2 を返します

    (id>1000? 1 : 0)

  • JSON 関数

    説明

    値の型は、データベース内の任意のフィールド型を表します。

    関数

    構文

    値の範囲

    戻り値

    JSON 配列文字列をセットに変換

    json_array(arrayText)

    説明

    ブール値を返す式でのみ使用できます。

    arrayText: 文字列、変換する JSON 配列文字列

    セット

    op_in(`id`,json_array('["0","1","2","3"]')) はセット ["0","1","2","3"] を返します。

    指定されたデータで JSON 配列を作成

    json_array2(item...)

    item...: 値の型、JSON 配列のデータ

    JSON 配列

    json_array2("0","1","2","3")["0","1","2","3"] を返します。

    指定されたデータで JSON オブジェクトを作成

    json_object(item...)

    item...: JSON オブジェクトのデータ (キーと値のペア)。キー名 (文字列) とキー値 (値の型) で構成され、コンマ (,) で区切られます。

    JSON

    json_object('name','ZhangSan','age',32, 'loginId',100){"name":"ZhangSan","age":32,"loginId":100} を返します。

    JSON オブジェクトの指定された位置 (配列) にデータを挿入

    json_array_insert(json, kvPairs...)

    • json: 文字列、変更する JSON オブジェクト

    • kvPairs...: 挿入するデータ。各ペアは JSONPath (文字列) と値 (値の型) で構成され、コンマで区切られます。

    JSON

    説明
    • 指定された位置が存在しない場合、元の JSON オブジェクトを返します。

    • 指定された位置の要素が存在しない場合、データはターゲット配列の末尾に追加されます。

    json_array_insert('{"Address":["City",1]}','$.Address[3]',100){"Address":["City",1,100]} を返します。

    JSON オブジェクトの指定された位置にデータを挿入

    json_insert(json, kvPairs...)

    • json: 文字列、変更する JSON オブジェクト

    • kvPairs...: 挿入するデータ。各ペアは JSONPath (文字列) と値 (値の型) で構成され、コンマで区切られます。

    JSON

    説明
    • 指定された場所が存在する場合、システムは操作対象の JSON オブジェクトを返します。

    • 指定された位置が存在しない場合、データは JSON オブジェクトに追加されます。

    json_insert('{"Address":["City","Xian","Number",1]}','$.ID',100){"Address":["City","Xian","Number",1],"ID":100} を返します。

    JSON オブジェクトの指定された位置にデータを挿入または更新

    json_set(json, kvPairs...)

    • json: 文字列、変更する JSON オブジェクト

    • kvPairs...: 挿入または更新するデータ。各ペアは JSONPath (文字列) と値 (値の型) で構成され、コンマで区切られます。

    値の型

    説明
    • 指定された位置が存在する場合、データを更新します。

    • 指定された位置が存在しない場合、データを JSON オブジェクトに追加します。

    json_set('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100){"ID":1,"Address":["City","Xian","Number",1], "IP":100} を返します。

    JSON オブジェクトのキーと値のペアを挿入または更新

    json_put(json, key, value)

    • json: 文字列、変更する JSON オブジェクト

    • key: 文字列、挿入または更新するキー名

    • value: 値の型、キーの値

    JSON

    説明
    • json が JSON オブジェクトでない場合、null を返します。

    • キーが存在する場合、その値を更新します。

    • キーが存在しない場合、JSON オブジェクトに追加します。

    json_put('{"loginId":100}','loginTime','2024-10-10'){"loginId":100, "loginTime":"2024-10-10"} を返します。

    JSON オブジェクトの指定された位置のデータを置換

    json_replace(json, kvPairs...)

    • json: 文字列、変更する JSON オブジェクト

    • kvPairs...: 置換するデータ。各ペアは JSONPath (文字列) と値 (値の型) で構成され、コンマで区切られます。

    値の型

    説明

    指定された位置が存在しない場合、元の JSON オブジェクトを返します。

    json_replace('{"ID":1,"Address":["City","Xian","Number",1]}',"$.IP",100){"ID":1,"Address":["City","Xian","Number",1]} を返します。

    JSON オブジェクトの位置に指定されたデータが存在するかどうかを確認

    json_contains(json, jsonPath, item)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • jsonPath: 文字列、JSON オブジェクト内の位置

    • item: 値の型、検索するデータ

    ブール値: true または false

    json_contains('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID',1)true を返します。

    JSON オブジェクトに指定された位置が存在するかどうかを確認します。

    json_contains_path(json, jsonPath)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • jsonPath: 文字列、確認する位置

    ブール値: true または false

    json_contains_path('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID')true を返します。

    JSON オブジェクトの指定された位置からデータを取得

    json_extract(json, jsonPath)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • jsonPath: 文字列、JSON オブジェクト内の位置

    値の型

    json_extract('{"ID":1,"Address":["City","Xian","Number",1]}','$.ID')1 を返します。

    JSON オブジェクトの指定されたキーの値を取得

    json_get(json, key)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • key: 文字列、キー名

    値の型

    json_get('{"ID":1,"Address":["City","Xian","Number",1]}','ID')1 を返します。

    JSON オブジェクトの指定された位置にあるすべてのキーを取得

    json_keys(json, jsonPath)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • jsonPath: 文字列、JSON オブジェクト内の位置

    JSON 配列

    json_keys('{"ID":1,"Address":["City","Xian","Number",1]}','$')["ID","Address"] を返します。

    JSON オブジェクトの指定された位置の長さ (キーの数) を取得

    json_length(json, jsonPath)

    • json: 文字列、クエリ対象の JSON オブジェクト

    • jsonPath: 文字列、JSON オブジェクト内の位置

      説明

      jsonPath が "$" の場合、json_length(json) と同等です。

    整数

    json_length('{"ID":1,"Address":["City","Xian","Number",1]}','$')2 を返します。

    JSON オブジェクトのルートの長さ (キーの数) を取得

    json_length(json)

    json: 文字列、クエリ対象の JSON オブジェクト

    整数

    json_length('{"ID":1,"Address":["City","Xian","Number",1]}')2 を返します。

    JSON 文字列を JSON オブジェクトに解析

    json_parse(json)

    json: 文字列、解析する JSON 文字列

    値の型

    json_parse('{"ID":1,"Address":["City","Xian","Number",1]}'){"ID":1,"Address":["City","Xian","Number",1]} を返します。

    JSON オブジェクトの指定された位置からデータを削除

    json_remove(json, jsonPath)

    • json: 文字列、変更する JSON オブジェクト

    • jsonPath: 文字列、JSON オブジェクト内の位置

    JSON

    json_remove('{"loginId":100, "loginTime":"2024-10-10"}','$.loginTime'){"loginId":100} を返します。

グローバル関数

  • フロー制御関数

    関数

    構文

    パラメーター

    if 文

    e_if(bool_expr, func_invoke)

    • bool_expr:ブール定数または関数呼び出し。 定数: true または false。 関数呼び出しの例: op_gt(`id`, 10)。

    • func_invoke:関数呼び出し。 サポートされる関数: e_drop、e_keep、e_set、e_if、e_compose

    e_if(op_gt(`id`, 10), e_drop()); ID > 10 の場合、レコードを破棄します。

    if-else 文

    e_if_else(bool_expr, func_invoke1, func_invoke2)

    • bool_expr:ブール定数または関数呼び出し。 定数: true または false。 関数呼び出しの例: op_gt(`id`, 10)。

    • func_invoke1:条件が true の場合に実行される関数呼び出し。

    • func_invoke2:条件が false の場合に実行される関数呼び出し。

    e_if_else(op_gt(`id`, 10), e_set(`tag`, 'large'), e_set(`tag`, 'small')); ID > 10 の場合、タグを "large" に設定し、それ以外の場合は "small" に設定します。

    複数の条件を評価し、最初に一致した操作を実行する Switch に似た文です。 一致する条件がない場合は、デフォルトの操作を実行します。

    s_switch(condition1, func1, condition2, func2, ..., default=default_func)

    • condition1:ブール定数または関数呼び出し。 定数: true または false。 関数呼び出しの例: op_gt(`id`, 10)。

    • func_invoke:関数呼び出し。 condition1 をチェックし、true の場合はこの関数を実行して switch 文を終了します。 false の場合は、次の条件をチェックします。

    • default_func:すべての条件が false の場合に実行される関数呼び出し。

    e_switch(op_gt(`id`, 100), e_set(`str_col`, '>100'), op_gt(`id`, 90), e_set(`str_col`, '>90'), default=e_set(`str_col`, '<=90')).

    複数の操作を組み合わせる

    e_compose(func1, func2, func3, ...)

    • func1:関数呼び出し。 e_set、e_drop、e_if が指定可能です。

    • func2:関数呼び出し。 e_set、e_drop、e_if が指定可能です。

    e_compose(e_set(`str_col`, 'test'), e_set(`dt_col`, dt_now())); str_col を "test" に設定し、dt_col を現在の時間に設定します。

  • データ操作関数

    関数

    構文

    パラメーター

    このレコードを破棄する (同期しない)

    e_drop()

    なし

    e_if(op_gt(`id`, 10), e_drop()); ID > 10 のレコードを破棄します。

    このレコードを保持する (送信先に同期する)

    e_keep(condition)

    condition:ブール式

    e_keep(op_gt(id, 1)); ID > 1 のレコードのみを同期します。

    列の値を設定する

    e_set(`col`, val, NEW)

    • col:列名

    • val:定数または関数呼び出し。 col のデータの型と一致する必要があります。

    • NEW:col を val のデータの型に変換します (オプション)。

      重要

      NEW を省略する場合は、その前のカンマを含めないでください。 タスクエラーを避けるために、データの型の互換性を確認してください。

    • e_set(`dt_col`, dt_now()); dt_col を現在の時間に設定します。

    • e_set(`col1`, `col2` + 1); col1 を col2 + 1 に設定します。

    • e_set(`col1`, 1, NEW); col1 を数値型に変換し、1 に設定します。

    MongoDB のフィールド保持、フィールド破棄、およびフィールド名マッピング

    e_expand_bson_value('*', 'fieldA',{"fieldB":"fieldC"})

    • *:保持するフィールド名。* はすべてのフィールドを意味します。

    • fieldA:破棄するフィールド名。

    • {"fieldB":"fieldC"}:フィールド名のマッピング。fieldB はソースフィールド名、fieldC は送信先フィールド名です。

      説明

      フィールド名のマッピングはオプションです。

    e_expand_bson_value("*", "_id,name"); _id と name を除くすべてのフィールドを送信先に書き込みます。