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

Realtime Compute for Apache Flink:SelectDB

最終更新日:Jun 04, 2026

SelectDB コネクタは、Realtime Compute for Apache Flink と Alibaba Cloud 上のフルマネージド型 Apache Doris 互換リアルタイムデータウェアハウスである ApsaraDB for SelectDB を統合します。このコネクタを使用して、SelectDB からの読み取り、SelectDB への書き込み、SelectDB 内でのルックアップを行うリアルタイムパイプラインを構築したり、YAML ベースのデータインジェストジョブで完全なデータベース同期を実行したりできます。

サポートされる機能:

カテゴリ 詳細
テーブルタイプ ソーステーブル、結果テーブル、ディメンションテーブル、データインジェスト結果
実行モード ストリームおよびバッチ
データフォーマット JSON および CSV
API タイプ DataStream、SQL、およびデータインジェスト YAML ジョブ
更新/削除のサポート はい
監視メトリック なし

主な特徴:

  • 完全データベースのデータ同期

  • 2 相コミット(2PC)による 1 回限りのセマンティクス — レコードの重複や喪失が発生しない

  • Apache Doris 1.0 以降との互換性

前提条件

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

  • Ververica Runtime (VVR) 8.0.10 以降を搭載した Realtime Compute for Apache Flink

  • ApsaraDB for SelectDB インスタンス。詳細については、「インスタンスの作成」をご参照ください。

  • インスタンスに設定された IP アドレスホワイトリスト。詳細については、「ホワイトリストの設定」をご参照ください。

コネクタの設定

SelectDB コネクタは VVR 11.1 以降に組み込まれており、手動でのインストールは不要です。

VVR 8.0.10 ~ 11.0 の場合は、手動でコネクタをインストールしてください。

  1. Maven Central から JAR パッケージをダウンロードします(Flink バージョン 1.15~1.17 対応)。

  2. JAR を Realtime Compute for Apache Flink 開発コンソールにアップロードします。詳細については、「カスタムコネクタの管理」をご参照ください。

  3. SQL ジョブ内で 'connector' = 'doris' を使用してコネクタを参照します。

SQL

構文

ソーステーブル、結果テーブル、ディメンションテーブルの 3 種類のテーブルタイプは、すべて同じ DDL 構文を共有します。含まれるパラメーターによってテーブルのロールを指定します。

SelectDB をソーステーブルとして使用するには、まずダイレクトクラスター接続を有効にしてください。ApsaraDB for SelectDB コンソールで、インスタンス詳細 > ネットワーク情報 に移動し、ダイレクトクラスター接続の有効化 をクリックします。これにより、Arrow Flight SQL プロトコルが有効になり、高スループットの並列読み取りが可能になります。
CREATE TABLE selectdb_source (
  order_id      BIGINT,
  user_id       BIGINT,
  total_amount  DECIMAL(10, 2),
  order_status  TINYINT,
  create_time   TIMESTAMP(3),
  product_name  STRING
) WITH (
  'connector'        = 'doris',
  'fenodes'          = 'selectdb-cn-*******.selectdbfe.rds.aliyuncs.com:8080',
  'table.identifier' = 'shop_db.orders',
  'username'         = 'admin',
  'password'         = '****'
);

パラメーター

共通

パラメーター 必須 デフォルト 説明
connector はい doris に固定されます。
fenodes はい SelectDB インスタンスの HTTP エンドポイント:<VPC アドレスまたはパブリックアドレス>:<HTTP プロトコルポート>。両方とも SelectDB コンソールの インスタンス詳細 > ネットワーク情報 から取得できます。例:selectdb-cn-****.selectdbfe.rds.aliyuncs.com:8080
jdbc-url いいえ ディメンションテーブルのルックアップおよびメタデータクエリ用の Java Database Connectivity (JDBC) 接続文字列:jdbc:mysql://<VPC アドレスまたはパブリックアドレス>:<MySQL プロトコルポート>。例:jdbc:mysql://selectdb-cn-***.selectdbfe.rds.aliyuncs.com:9030
table.identifier はい <データベース>.<テーブル> 形式の対象テーブル。例:db.tbl
username はい データベースユーザー名。インスタンス詳細 ページの右上隅からパスワードをリセットできます(必要に応じて)。
password はい データベースユーザー名のパスワード。
doris.request.retries いいえ 3 失敗したリクエストの再試行回数。
doris.request.connect.timeout いいえ 30s 接続タイムアウト。
doris.request.read.timeout いいえ 30s 読み取りタイムアウト。

ソーステーブル

パラメーター 必須 デフォルト 説明
doris.request.query.timeout いいえ 21600s クエリタイムアウト(デフォルトは 6 時間)。
doris.request.tablet.size いいえ 1 パーティションごとのタブレット数。値を小さくすると Flink の並列度が向上しますが、データベースへの負荷が増加します。
doris.batch.size いいえ 4064 1 回のリクエストで Backend (BE) ノードから読み取る最大行数。接続オーバーヘッドおよびネットワーク遅延を低減するために増加させます。
doris.exec.mem.limit いいえ 8192mb クエリあたりのメモリ制限(バイト単位、デフォルトは 8 GB)。
source.use-flight-sql いいえ false 設定不要 — SelectDB コンソールで ダイレクトクラスター接続 を有効にすると、Arrow Flight SQL が自動的に有効になります。
source.flight-sql-port いいえ Frontend (FE) ノードの Arrow Flight SQL ポート(arrow_flight_sql_port)。

結果テーブル

書き込みモードは、配信保証およびフラッシュ動作に影響します。一貫性要件に基づいて選択してください。

ストリーミング書き込み バッチ書き込み
トリガー条件 Flink チェックポイント間隔に従う データ量または時間しきい値による定期的なフラッシュ
配信保証 1 回限り(2PC 経由) 少なくとも 1 回。べき等性は Unique モデルで実現
レイテンシ チェックポイント間隔に制限される 柔軟で、チェックポイントとは独立
フォールトトレランス Flink ステートの完全な復旧 Unique モデルによる重複排除に依存
パラメーター 必須 デフォルト 説明
sink.label-prefix いいえ Stream Load インポートのラベルプレフィックス。すべてのジョブ間でグローバルに一意である必要があります — 同じラベルは 1 回しかコミットできません。ジョブ再起動時にも 1 回限りのセマンティクスを保証するために必須です。
sink.properties.* いいえ SelectDB Stream Load API に直接渡される Stream Load インポートパラメーター。以下の例を参照してください。
sink.enable-delete いいえ true DELETE 操作を伝播します。Doris テーブルでバッチ削除が有効になっている必要があり、Unique モデルでのみ機能します。
sink.enable-2pc いいえ true 明示的トランザクション操作1 回限りのセマンティクスのための 2 相コミット(2PC)を有効にします。「」をご参照ください。
sink.buffer-size いいえ 1 MB 書き込みキャッシュバッファーサイズ(バイト単位)。デフォルト値のままにしてください。
sink.buffer-count いいえ 3 書き込みキャッシュバッファー数。デフォルト値のままにしてください。
sink.max-retries いいえ 3 コミット失敗後の最大再試行回数。
sink.enable.batch-mode いいえ false バッチ書き込みモードに切り替えます。フラッシュは下記の 3 つの sink.buffer-flush.* パラメーターによって制御され、チェックポイントとは無関係になります。1 回限りの保証はありません。べき等性には Unique モデルを使用してください。
sink.flush.queue-size いいえ 2 バッチモード時のキャッシュキューのサイズ。
sink.buffer-flush.max-rows いいえ 500000 バッチモード時の 1 回のフラッシュあたりの最大行数。
sink.buffer-flush.max-bytes いいえ 100 MB バッチモード時の 1 回のフラッシュあたりの最大バイト数。
sink.buffer-flush.interval いいえ 10s バッチモード時のフラッシュ間隔。
sink.ignore.update-before いいえ true Flink CDC からの update-before イベントを無視します。

sink.properties.* の例:

CSV フォーマット:

'sink.properties.column_separator' = ','
-- 値にカンマが含まれる可能性がある場合は、印刷不可能な区切り文字を使用します:
-- 'sink.properties.column_separator' = '\x01'

JSON フォーマット:

'sink.properties.format'            = 'json',
'sink.properties.read_json_by_line' = 'true'
-- 代替: 'sink.properties.strip_outer_array' = 'true'

ディメンションテーブル

パラメーター 必須 デフォルト 説明
lookup.cache.max-rows いいえ -1 ルックアップキャッシュの最大行数。-1 はキャッシュを無効にします。
lookup.cache.ttl いいえ 10s キャッシュエントリの生存時間(TTL)。
lookup.max-retries いいえ 1 ルックアップクエリ失敗後の再試行回数。
lookup.jdbc.async いいえ false 非同期ルックアップを有効にします。
lookup.jdbc.read.batch.size いいえ 128 非同期ルックアップモード時の 1 回のクエリあたりの最大バッチサイズ。
lookup.jdbc.read.batch.queue-size いいえ 256 非同期ルックアップモード時の中間バッファーキューのサイズ。
lookup.jdbc.read.thread-size いいえ 3 非同期ルックアップモード時のタスクごとの JDBC ルックアップスレッド数。

使用例

ソーステーブル

CREATE TEMPORARY TABLE selectdb_source (
  order_id      BIGINT,
  user_id       BIGINT,
  total_amount  DECIMAL(10, 2),
  order_status  TINYINT,
  create_time   TIMESTAMP(3),
  product_name  STRING
) WITH (
  'connector'        = 'doris',
  'fenodes'          = 'selectdb-cn-*******.selectdbfe.rds.aliyuncs.com:8080',
  'table.identifier' = 'shop_db.orders',
  'username'         = 'admin',
  'password'         = '****'
);

結果テーブル

CREATE TEMPORARY TABLE selectdb_sink (
  order_id      BIGINT,
  user_id       BIGINT,
  total_amount  DECIMAL(10, 2),
  order_status  TINYINT,
  create_time   TIMESTAMP(3),
  product_name  STRING
) WITH (
  'connector'        = 'doris',
  'fenodes'          = 'selectdb-cn-*******.selectdbfe.rds.aliyuncs.com:8080',
  'table.identifier' = 'shop_db.orders',
  'username'         = 'admin',
  'password'         = '****',
  'sink.label-prefix' = 'flink_orders'  -- ジョブ間でグローバルに一意である必要があります
);

ディメンションテーブル

SelectDB は、ストリーミングファクトテーブルに対して結合されるルックアップディメンションテーブルとして機能します。

-- Kafka からのファクトテーブル
CREATE TEMPORARY TABLE fact_table (
  `id`           BIGINT,
  `name`         STRING,
  `city`         STRING,
  `process_time` AS proctime()
) WITH (
  'connector' = 'kafka',
  ...
);

-- SelectDB からのディメンションテーブル
CREATE TEMPORARY TABLE dim_city (
  `city`     STRING,
  `level`    INT,
  `province` STRING,
  `country`  STRING
) WITH (
  'connector'        = 'doris',
  'fenodes'          = 'selectdb-cn-*******.selectdbfe.rds.aliyuncs.com:8080',
  'jdbc-url'         = 'jdbc:mysql://selectdb-cn-***.selectdbfe.rds.aliyuncs.com:9030',
  'table.identifier' = 'dim.dim_city',
  'username'         = 'admin',
  'password'         = '****'
);

-- 時系列結合
SELECT a.id, a.name, a.city, c.province, c.country, c.level
FROM fact_table a
LEFT JOIN dim_city FOR SYSTEM_TIME AS OF a.process_time AS c
ON a.city = c.city;

データインジェスト

YAML ベースのデータインジェストジョブで SelectDB コネクタを結果として使用し、完全なデータベース同期を実行します。

構文

source:
  type: <source-type>

sink:
  type: doris
  name: Doris Sink
  fenodes: selectdb-cn-****.selectdbfe.rds.aliyuncs.com:8080
  username: root
  password: ""

パラメーター

パラメーター 必須 デフォルト 説明
type はい doris に固定されます。
name いいえ シンクの説明的な名前。
fenodes はい HTTP エンドポイント:<VPC アドレスまたはパブリックアドレス>:<HTTP プロトコルポート>。両方とも SelectDB コンソールの インスタンス詳細 > ネットワーク情報 から取得できます。例:selectdb-cn-****.selectdbfe.rds.aliyuncs.com:8080
jdbc-url いいえ JDBC 接続文字列。例:jdbc:mysql://selectdb-cn-***.selectdbfe.rds.aliyuncs.com:9030
username はい データベースユーザー名。
password はい データベースユーザー名のパスワード。
sink.enable.batch-mode いいえ true データインジェストジョブではバッチモードがデフォルトで有効になっています。フラッシュは 3 つの sink.buffer-flush.* パラメーターによって制御されます。1 回限りの保証はありません。べき等性には Unique モデルを使用してください。
sink.flush.queue-size いいえ 2 キャッシュキューのサイズ。
sink.buffer-flush.max-rows いいえ 500000 1 回のフラッシュあたりの最大行数。
sink.buffer-flush.max-bytes いいえ 100 MB 1 回のフラッシュあたりの最大バイト数。
sink.buffer-flush.interval いいえ 10s フラッシュ間隔。最小値:1s
sink.properties.* いいえ Stream Load インポートパラメーター。

sink.properties.* の例:

CSV フォーマット:

sink.properties.column_separator: ','
# 値にカンマが含まれる可能性がある場合は、印刷不可能な区切り文字を使用します:
# sink.properties.column_separator: '\x01'

JSON フォーマット:

sink.properties.format: 'json'
sink.properties.read_json_by_line: 'true'

型マッピング

Flink から SelectDB

Flink CDC 型 SelectDB 型 注記
TINYINT TINYINT
SMALLINT SMALLINT
INT INT
BIGINT BIGINT
DECIMAL DECIMAL
FLOAT FLOAT
DOUBLE DOUBLE
BOOLEAN BOOLEAN
DATE DATE
TIMESTAMP[(p)] DATETIME[(p)]
TIMESTAMP_LTZ[(p)] DATETIME[(p)]
CHAR(n) CHAR(n*3) SelectDB は文字列を UTF-8 で格納します。英字は 1 バイト、漢字は 3 バイトを占有します。CHAR の最大長は 255 であり、これを超える値は自動的に VARCHAR に変換されます。
VARCHAR(n) VARCHAR(n*3) UTF-8 の乗数は同様に適用されます。VARCHAR の最大長は 65533 であり、これを超える値は自動的に STRING に変換されます。
BINARY(n) STRING
VARBINARY(n) STRING
STRING STRING

次のステップ