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

Data Transmission Service:ETL 機能を活用したリアルタイム注文の分析

最終更新日:Mar 28, 2026

Data Transmission Service (DTS) の抽出・変換・書き出し (ETL) 機能では、コードを記述せずに、視覚的でドラッグアンドドロップ可能な DAG インターフェイスを使用して、ストリーミングデータをリアルタイムで処理できます。本チュートリアルでは、リアルタイムのトランザクションデータとプロダクト参照データを結合し、価格しきい値を超える注文をフィルター処理して、結果をターゲットデータベースに書き込むという一連の操作を実践的に解説します。

適用範囲/利用シーン

  • 集中型マルチソースデータ管理:複数のリージョンまたは異種のデータソースから取得したデータを、リアルタイムで単一のデータベースに統合します。

  • リアルタイムレポート作成:製品、顧客、時間などのさまざまな次元で、リアルタイムのビジネス活動を反映するレポートパイプラインを構築します。

  • リアルタイムコンピューティング:ストリーミングデータをクリーニングし、ユーザーのプロファイリング、リスク管理、レコメンデーションシステムなどに活用するための特徴量およびタグを抽出します。

仕組み

本例では、以下の 2 つのデータソースをマージします。

  • ストリームテーブルtest_orders テーブル。リアルタイムのトランザクションイベント(注文 ID、顧客 ID、プロダクト ID、合計金額、注文日付)を受信します。

  • ディメンションテーブルproduct テーブル。比較的静的なプロダクト参照データ(プロダクト ID、プロダクト名、単位価格)を保持します。

ETL タスクは、これらの 2 つのテーブルを結合し、total_price > 3000.00 を満たす注文をフィルター処理したうえで、該当する行をリアルタイムでターゲットテーブルに書き込みます。

实现流程
ストリームテーブルは、イベントが到着するごとに継続的に更新されます。一方、ディメンションテーブルは、変更頻度が低く、ストリームデータを豊かにするために使用される参照データを保持しており、ルックアップテーブルと同様の役割を果たします。

前提条件

開始する前に、以下の条件を満たしていることを確認してください。

  • DTS コンソール へのアクセス権限

  • ソースとして機能する ApsaraDB RDS for MySQL インスタンス(ストリームテーブルおよびディメンションテーブルを含む)

  • ターゲットとして機能する ApsaraDB RDS for MySQL インスタンス

警告

「DAG モードでの ETL タスクの設定」トピックの前提条件および注意事項のセクションを、操作を開始する前に必ずお読みください。

ソースおよびターゲットテーブルの準備

ApsaraDB RDS for MySQL インスタンスに、以下のテーブルを作成します。

リアルタイムトランザクションデータ

CREATE TABLE test_orders (
    order_id    BIGINT        NOT NULL COMMENT '注文 ID',
    user_id     BIGINT        NOT NULL COMMENT 'ユーザー ID',
    product_id  BIGINT        NOT NULL COMMENT 'プロダクト ID',
    total_price DECIMAL(15,2) NOT NULL COMMENT '合計金額',
    order_date  TIMESTAMP     NOT NULL COMMENT '注文日付',
    PRIMARY KEY (order_id)
);

ビジネスディメンションデータ

CREATE TABLE product (
    product_id    BIGINT        NOT NULL COMMENT 'プロダクト ID',
    product_name  VARCHAR(20)            COMMENT 'プロダクト名',
    product_price DECIMAL(15,2) NOT NULL COMMENT '単位価格'
);

ターゲットテーブル

CREATE TABLE test_orders_new (
    order_id      BIGINT        NOT NULL COMMENT '注文 ID',
    user_id       BIGINT        NOT NULL COMMENT 'ユーザー ID',
    product_id    BIGINT        NOT NULL COMMENT 'プロダクト ID',
    total_price   DECIMAL(15,2) NOT NULL COMMENT '合計金額',
    order_date    TIMESTAMP     NOT NULL COMMENT '注文日付',
    product_id_2  BIGINT        NOT NULL COMMENT 'プロダクト ID(product テーブルより)',
    product_name  VARCHAR(20)            COMMENT 'プロダクト名',
    product_price DECIMAL(15,2) NOT NULL COMMENT '単位価格',
    PRIMARY KEY (order_id)
);
ターゲットテーブルでは、product_id_2 を使用して、product ディメンションテーブルからのプロダクト ID を格納します。これにより、product_id という列名が test_orders ストリームテーブルにも存在する場合の列名衝突を回避します。結合対象の 2 つのテーブルで同一の列名が使用されている場合は、ETL タスクの設定前に、ターゲットテーブルのスキーマにおいて片方の列名を変更してください。

ETL タスクの設定

以下の手順では、ストリームテーブルとディメンションテーブルを結合し、結果をフィルター処理してターゲットに書き込むデータフローを設定します。

配置流程概览

ステップ 1:ソースデータベースの設定

  1. DTS コンソール にログインします。DTS コンソール

  2. 左側ナビゲーションウィンドウで、ETL をクリックします。

  3. ストリーミング ETL ページの左上隅にある 新增数据流 をクリックします。データフローの作成 ダイアログボックスで、データフロー名 フィールドに名前を入力し、開発方法DAG に設定します。

  4. OK をクリックします。

  5. ストリームテーブルを設定します。

    1. 左側パネルから、入力/ディメンションテーブル MySQL ノードをキャンバスにドラッグします。

    2. キャンバス上の 入力/ディメンションテーブル MySQL-1 をクリックします。

    3. ノード設定 タブで、以下のパラメーターを設定します。

      パラメーター説明
      データソース名DTS が自動的に名前を生成します。識別が容易になるよう、説明的な名前を入力してください。
      リージョンソースデータベースのリージョンを選択します。対応するリージョン:中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (広州)、中国 (香港)。
      インスタンスソースデータベースインスタンスを選択します。新しいインスタンスを作成するには、インスタンスの作成 をクリックします。詳細については、「DMS でサポートされるデータベース」をご参照ください。
      ノードタイプストリームテーブル を選択します。ストリームテーブルは継続的に更新され、ディメンションテーブルと結合できます。
      フォーマット変換動的テーブルをストリームに書き戻す際のエンコーディング方式を指定します。アップサートストリーム:INSERT および UPDATE 操作はアップサートメッセージとして、DELETE 操作は削除メッセージとしてエンコードされます。一意キー(複合キーも可)が必要です。追記専用ストリーム:出力ストリームには INSERT 操作のみが含まれます。
      データベースおよびテーブルの選択変換対象のデータベースおよびテーブルを選択します。
    4. 出力フィールド タブで、含める列を選択します。

    5. 時刻属性

      パラメーター説明
      イベント時刻ウォーターマーク各イベントが生成された時刻を表すタイムスタンプフィールドを選択します(例:order_date)。
      イベント時刻ウォーターマークの遅延許容される最大の順序外到着遅延時間を入力します。ETL は、この時間だけ遅れて到着するイベントを待機したうえで、破棄します。たとえば、9:59 に生成されたデータが、10:00 に加えて設定された遅延時間が経過しても到着しない場合、そのデータは破棄されます。
      処理時間列名を入力します。ETL はサーバーの処理時間をこの列に格納します。最新バージョンのディメンションテーブルを常に参照するテンポラル結合には、処理時間を使用します。
    ノードの右側に 配置源库信息_感叹号 アイコンが表示されなくなった場合、ストリームテーブルの設定は完了しています。
  6. ディメンションテーブルを設定します。

    1. 左側パネルから、もう 1 つの 入力/ディメンションテーブル MySQL ノードをキャンバスにドラッグします。

    2. キャンバス上の 入力/ディメンションテーブル MySQL-2 をクリックします。

    3. ノード設定 タブで、以下のパラメーターを設定します。

      パラメーター説明
      データソース名DTS が自動的に名前を生成します。識別が容易になるよう、説明的な名前を入力してください。
      リージョンソースデータベースのリージョンを選択します。
      インスタンスソースデータベースインスタンスを選択するか、インスタンスの作成 をクリックします。
      ノードタイプディメンションテーブル を選択します。ディメンションテーブルは、変更頻度が低く、ストリームデータをワイドテーブルに拡張するために使用される参照データを保持します。
      データベースおよびテーブルの選択変換対象のデータベースおよびテーブルを選択します。
    4. 出力フィールド タブで、含める列を選択します。

    ノードの右側に 配置源库信息_感叹号 アイコンが表示されなくなった場合、ディメンションテーブルの設定は完了しています。

ステップ 2:テーブル結合コンポーネントの設定

  1. 左側パネルの 変換 セクションから、JOIN ノードをキャンバスにドラッグします。

  2. ストリームテーブルノードを [Table Join-1] に接続します。ストリームテーブルノードの上にカーソルを合わせ、その右端にある中抜き円をクリックして、[Table Join-1] まで接続線をドラッグします。ディメンションテーブルノードについても同様に繰り返します。

  3. キャンバス上の テーブル結合-1 をクリックして、設定を開きます。

  4. ノード設定 タブで、以下のパラメーターを設定します。

    セクションパラメーター説明
    変換名変換名の入力DTS が自動的に名前を生成します。説明的な名前を入力してください。
    JOIN 設定JOIN 句における左側テーブル主テーブル(左側テーブル)としてストリームテーブルを選択します。
    テンポラル結合時刻属性ストリームテーブルのバージョンとディメンションテーブルのバージョンをどのように照合するかを定義します。未設定の場合、通常の結合が実行されます。イベント時刻ウォーターマークに基づく:イベントが生成された時点でのディメンションテーブルのバージョンと照合します(バージョン管理テーブルで使用)。処理時間に基づく:常にディメンションテーブルの最新バージョンと結合します(標準テーブルで使用)。本例では、処理時間に基づく を選択します。
    結合操作の選択結合タイプを選択します。本例では、内部結合 を選択します。内部結合:両テーブルに一致する値を持つ行のみを返します。左結合:ストリームテーブルのすべての行と、利用可能な場合のディメンションテーブルの一致する行を返します。右結合:ディメンションテーブルのすべての行と、利用可能な場合のストリームテーブルの一致する行を返します。
    結合条件+ 条件の追加+ 条件の追加 をクリックし、結合対象のフィールドを選択します。= 記号の左側のフィールドは左側テーブルに属し、右側のフィールドは右側テーブルに属します。
  5. 出力フィールド タブで、ワイドテーブルに含める列を選択します。

    テーブル結合-1 コンポーネントの右側に 配置源库信息_感叹号 アイコンが表示されなくなった場合、結合の設定は完了しています。

ステップ 3:テーブルレコードフィルター コンポーネントの設定

  1. 左側パネルの 変換 セクションから、テーブルレコードフィルター ノードをキャンバスにドラッグします。

  2. テーブル結合-1テーブルレコードフィルター-1 に接続します:テーブル結合-1 の上にカーソルを合わせ、右端の中抜き円をクリックして、テーブルレコードフィルター-1 まで接続線をドラッグします。

  3. キャンバス上の テーブルレコードフィルター-1 をクリックします。

  4. ノード設定 タブで、変換名 フィールドに名前を入力します。

  5. WHERE 条件 フィールドで、以下のいずれかの方法でフィルター条件を指定します。

    • 条件を直接入力します。たとえば、合計金額が 3,000 を超える注文のみを通過させるには、total_price>3000.00 を入力します。

    • 入力フィールド セクションのフィールドおよび 演算子 セクションの演算子をクリックして、視覚的に条件を構築します。

    コンポーネントの右側に 配置源库信息_感叹号 アイコンが表示されなくなった場合、フィルターの設定は完了しています。

ステップ 4:ターゲットデータベースの設定

  1. 左側パネルの 出力 セクションから、MySQL ノードをキャンバスにドラッグします。

  2. テーブルレコードフィルター-1出力 MySQL-1 に接続します:テーブルレコードフィルター-1 の上にカーソルを合わせ、右端の中抜き円をクリックして、出力 MySQL-1 まで接続線をドラッグします。

  3. キャンバス上の 出力 MySQL-1 をクリックします。

  4. ノード設定 タブで、以下のパラメーターを設定します。

    パラメーター説明
    データソース名DTS が自動的に名前を生成します。説明的な名前を入力してください。
    リージョンターゲットデータベースのリージョンを選択します。対応するリージョン:中国 (杭州)、中国 (上海)、中国 (青島)、中国 (北京)、中国 (張家口)、中国 (深セン)、中国 (広州)、中国 (香港)。
    インスタンスターゲットデータベースインスタンスを選択するか、インスタンスの作成 をクリックします。
    テーブルマッピングターゲットテーブルの選択 セクションで、ターゲットテーブルをクリックします。
  5. 出力フィールド タブで、ターゲットテーブルに書き込む列を選択します。

    コンポーネントの右側に 配置源库信息_感叹号 アイコンが表示されなくなった場合、ターゲットデータベースの設定は完了しています。

ステップ 5:事前チェックおよびタスクの開始

  1. Flink SQL 検証の生成 をクリックします。DTS は Flink SQL ステートメントを生成し、検証チェックを実行します。

  2. 検証が完了したら、ETL 検証の詳細の表示 をクリックして、生成された SQL およびチェック結果を確認します。確認後、閉じる をクリックします。

    検証に失敗した場合は、結果にリストされた問題を修正してから、再度 Flink SQL を生成してください。
  3. 次へ:タスク設定の保存および事前チェック をクリックします。事前チェックが成功した場合にのみ、タスクを開始できます。いずれかの項目が失敗した場合は、失敗した項目の横にある 詳細の表示 をクリックして問題を修正し、再度事前チェックを実行してください。

  4. 事前チェックが成功した後、次へ:インスタンスの購入 をクリックします。

  5. インスタンスの購入 ページで、インスタンスクラス および コンピューティングユニット (CU) のパラメーターを設定します。Data Transmission Service(従量課金)サービス利用規約 および パブリックプレビュー向けサービス利用規約 を読み、同意してください。

    パブリックプレビュー期間中は、各ユーザーが最大 2 つの ETL インスタンスを無料で作成できます。
  6. 購入および開始 をクリックして、ETL タスクを起動します。

結果

タスクが開始されると、DTS は test_orders から変更イベントを継続的に読み取り、product ディメンションテーブルと結合し、total_price > 3000.00 のフィルター条件を適用して、該当する行をリアルタイムで test_orders_new に書き込みます。

図 1.リアルタイムトランザクションデータテーブル:test_orders目标表test_orders_new

図 2.ターゲットテーブル:test_orders_new业务数据表test_orders

次に何をすべきか