StarRocks コネクターの使用方法について説明します。
背景情報
StarRocks は、あらゆるシナリオで極めて高速なパフォーマンスを実現し、統合された分析エクスペリエンスを提供する次世代の超並列処理 (MPP) データウェアハウスです。StarRocks には、次のような利点があります。
-
StarRocks は MySQL プロトコルと互換性があるため、MySQL クライアントや一般的なビジネスインテリジェンス (BI) ツールを使用してデータに接続し、分析することができます。
-
StarRocks は分散アーキテクチャを採用しています。
-
データテーブルを水平にパーティション分割し、複数レプリカで保存します。
-
クラスターを柔軟にスケーリングでき、最大 10 PB のデータを分析できます。
-
MPP フレームワークを使用して並列計算を高速化します。
-
複数レプリカをサポートし、フォールトトレランスを提供します。
-
Flink コネクタは、データをキャッシュし、Stream Load を使用してシンクテーブルにバッチで書き込みます。ソーステーブルからは、データをバッチで取得して読み取ります。次の表に、StarRocks コネクタの機能を示します。
|
カテゴリ |
説明 |
|
対応タイプ |
ソーステーブル、ディメンションテーブル、シンクテーブル、およびデータインジェストターゲット |
|
実行モード |
ストリーミングモードおよびバッチモード |
|
データ形式 |
CSV |
|
コネクタ固有のメトリクス |
なし |
|
API タイプ |
DataStream、SQL、および YAML (データインジェスト用) |
|
シンクテーブルにおける更新/削除への対応 |
あり |
前提条件
EMR 上の StarRocks クラスター、または ECS 上のセルフマネージド StarRocks クラスターが必要です。
制限事項
-
Ververica Runtime (VVR) 11.1 以降でのみ、ディメンションテーブルとの結合をサポートします。
-
ネットワークアクセスの制限を回避するため、次の StarRocks クラスターのポートをセキュリティグループまたはファイアウォールのホワイトリストに追加してください:9030、8030、8040、9060、8060、9020。
SQL
機能
E-MapReduce 上の StarRocks は、CREATE TABLE AS SELECT (CTAS) および CREATE DATABASE AS SELECT (CDAS) ステートメントをサポートしています。CTAS は単一テーブルのスキーマとデータを同期し、CDAS はデータベース全体または同じデータベース内の複数テーブルを同期します。詳細については、「Realtime Compute for Apache Flink で CTAS および CDAS ステートメントを使用して MySQL データベースから StarRocks にデータを同期する」をご参照ください。
構文
CREATE TABLE USER_RESULT(
name VARCHAR,
score BIGINT
) WITH (
'connector' = 'starrocks',
'jdbc-url'='jdbc:mysql://fe1_ip:query_port,fe2_ip:query_port,fe3_ip:query_port?xxxxx',
'load-url'='fe1_ip:http_port;fe2_ip:http_port;fe3_ip:http_port',
'database-name' = 'xxx',
'table-name' = 'xxx',
'username' = 'xxx',
'password' = 'xxx'
);
パラメーター
|
タイプ |
パラメーター |
説明 |
型 |
必須 |
デフォルト |
備考 |
|
一般 |
connector |
使用するコネクタを指定します。 |
文字列 |
はい |
— |
値は |
|
jdbc-url |
Java Database Connectivity (JDBC) の URL です。 |
文字列 |
はい |
— |
FE の IP アドレスと JDBC ポートを |
|
|
database-name |
StarRocks データベースの名前です。 |
文字列 |
はい |
— |
— |
|
|
table-name |
StarRocks テーブルの名前です。 |
文字列 |
はい |
— |
— |
|
|
username |
StarRocks に接続するためのユーザー名です。 |
文字列 |
はい |
— |
— |
|
|
password |
StarRocks に接続するためのパスワードです。 |
文字列 |
はい |
— |
— |
|
|
starrocks.create.table.properties |
自動テーブル作成のプロパティを指定します。 |
文字列 |
いいえ |
— |
エンジンやレプリカ数などの初期テーブルプロパティを指定します。例:'starrocks.create.table.properties' = 'buckets 8' または 'starrocks.create.table.properties' = 'replication_num=1'。 |
|
|
ソース固有 |
scan-url |
データスキャンの URL です。 |
文字列 |
いいえ |
— |
FE の IP アドレスと HTTP ポートを指定します。形式: 説明
複数の IP アドレスとポートを指定するには、セミコロン (;) で区切ります。 |
|
scan.connect.timeout-ms |
このタイムアウト内に接続が確立されない場合、コネクタはエラーを報告します。 |
文字列 |
いいえ |
1000 |
単位はミリ秒です。 |
|
|
scan.params.keep-alive-min |
クエリタスクのキープアライブ時間です。 |
文字列 |
いいえ |
10 |
— |
|
|
scan.params.query-timeout-s |
クエリタスクのタイムアウト期間です。 この期間内に結果が返されない場合、システムはクエリタスクを停止します。 |
文字列 |
いいえ |
600 |
単位は秒です。 |
|
|
scan.params.mem-limit-byte |
BE ノード上の単一クエリのメモリ制限です。 |
文字列 |
いいえ |
1073741824 (1 GB) |
単位はバイトです。 |
|
|
scan.max-retries |
失敗したクエリの最大再試行回数です。 この制限を超えると、コネクタはエラーを報告します。 |
文字列 |
いいえ |
1 |
— |
|
|
シンク固有 |
load-url |
データインポートの URL です。 |
文字列 |
はい |
— |
FE の IP アドレスと HTTP ポートを 説明
複数の IP アドレスとポートを指定するには、セミコロン (;) で区切ります。 |
|
sink.semantic |
書き込みの配信セマンティクスです。 |
文字列 |
いいえ |
at-least-once |
有効な値:
|
|
|
sink.buffer-flush.max-bytes |
フラッシュする前にバッファリングするデータの最大量です。 |
文字列 |
いいえ |
94371840 (90 MB) |
範囲:64 MB から 10 GB です。 |
|
|
sink.buffer-flush.max-rows |
フラッシュする前にバッファリングする最大行数です。 |
文字列 |
いいえ |
500000 |
範囲:64,000 から 5,000,000 です。 |
|
|
sink.buffer-flush.interval-ms |
バッファフラッシュの間隔です。 |
文字列 |
いいえ |
300000 |
範囲:1,000 ms から 3,600,000 ms です。 |
|
|
sink.max-retries |
失敗した書き込みの最大再試行回数です。 |
文字列 |
いいえ |
3 |
範囲:0 から 10 です。 |
|
|
sink.connect.timeout-ms |
StarRocks への接続タイムアウト期間です。 |
文字列 |
いいえ |
1000 |
範囲:100 から 60,000 です。単位はミリ秒です。 |
|
|
sink.properties.* |
シンク用の追加 Stream Load プロパティです。 |
文字列 |
いいえ |
— |
これらのパラメーターは Stream Load の動作を制御します。たとえば、 |
|
|
ディメンション固有 |
lookup.cache.enabled |
ディメンションテーブルのキャッシングを有効にするかどうかを指定します。 |
ブール型 |
いいえ |
true |
有効な値:
重要
|
データ型マッピング
|
StarRocks データ型 |
Flink データ型 |
|
NULL |
NULL |
|
BOOLEAN |
BOOLEAN |
|
TINYINT |
TINYINT |
|
SMALLINT |
SMALLINT |
|
INT |
INT |
|
BIGINT |
BIGINT |
|
BIGINT UNSIGNED 説明
Realtime Compute for Apache Flink エンジン VVR 8.0.10 以降が必要です。 |
DECIMAL(20,0) |
|
LARGEINT |
DECIMAL(20,0) |
|
FLOAT |
FLOAT |
|
DOUBLE |
DOUBLE |
|
DATE |
DATE |
|
DATETIME |
TIMESTAMP |
|
DECIMAL |
DECIMAL |
|
DECIMALV2 |
DECIMAL |
|
DECIMAL32 |
DECIMAL |
|
DECIMAL64 |
DECIMAL |
|
DECIMAL128 |
DECIMAL |
|
CHAR(m) 説明
|
CHAR(n) |
|
VARCHAR(m) 説明
|
CHAR(n) |
|
VARCHAR |
STRING |
|
VARBINARY 説明
Realtime Compute for Apache Flink エンジン VVR 8.0.10 以降が必要です。 |
VARBINARY |
コード例
CREATE TEMPORARY TABLE IF NOT EXISTS `runoob_tbl_source` (
`runoob_id` BIGINT NOT NULL,
`runoob_title` STRING NOT NULL,
`runoob_author` STRING NOT NULL,
`submission_date` DATE NULL
) WITH (
'connector' = 'starrocks',
'jdbc-url' = 'jdbc:mysql://ip:9030',
'scan-url' = 'ip:18030',
'database-name' = 'db_name',
'table-name' = 'table_name',
'password' = 'xxxxxxx',
'username' = 'xxxxx'
);
CREATE TEMPORARY TABLE IF NOT EXISTS `runoob_tbl_sink` (
`runoob_id` BIGINT NOT NULL,
`runoob_title` STRING NOT NULL,
`runoob_author` STRING NOT NULL,
`submission_date` DATE NULL
PRIMARY KEY(`runoob_id`)
NOT ENFORCED
) WITH (
'jdbc-url' = 'jdbc:mysql://ip:9030',
'connector' = 'starrocks',
'load-url' = 'ip:18030',
'database-name' = 'db_name',
'table-name' = 'table_name',
'password' = 'xxxxxxx',
'username' = 'xxxx',
'sink.buffer-flush.interval-ms' = '5000'
);
INSERT INTO runoob_tbl_sink SELECT * FROM runoob_tbl_source;
StarRocks ではプライマリキー列を NULLABLE にできます。しかし、Flink は NULL 可能列を含むプライマリキーをサポートしていません。Flink のデータ整合性モデルでは、プライマリキーは一意で NULL 不可である必要があります。そうでない場合、Flink は Invalid primary key. Column 'xxx' is nullable というエラーをスローします。詳細については、「"Invalid primary key. Column 'xxx' is nullable." error」をご参照ください。
データインジェスト
StarRocks パイプラインコネクタを使用して、アップストリームのデータソースからデータレコードとスキーマの変更を外部 StarRocks データベースに書き込みます。 StarRocks コネクタは、コミュニティ版と Alibaba Cloud のフルマネージド EMR Serverless StarRocks の両方をサポートしています。
機能
-
データベースとテーブルの自動作成
アップストリームのデータベースまたはテーブルがダウンストリームの StarRocks インスタンスに存在しない場合、コネクタが自動的に作成します。
table.create.properties.*パラメーターを使用して、自動テーブル作成のオプションを設定できます。 -
スキーマ変更の同期
StarRocks コネクタは、CreateTableEvent、AddColumnEvent、および DropColumnEvent イベントをダウンストリームのデータベースに自動的に適用します。
-
VVR 11.1 以降では、互換性のあるカラムタイプの変更をサポートしています。詳細については、「ALTER TABLE | StarRocks」をご参照ください。
使用上の注意
-
同期された各テーブルにはプライマリキーが必要です。プライマリキーがないテーブルの場合、ダウンストリームにデータを書き込むには、
transformブロックでプライマリキーを指定する必要があります。たとえば、transform: - source-table: ... primary-keys: id, ... -
自動作成されたテーブルでは、バケットキーはプライマリキーと同一であり、テーブルにパーティションキーを設定できません。
-
スキーマ変更を同期する場合、新しいカラムは既存カラムの末尾にのみ追加できます。デフォルトの Lenient スキーマ変更モードでは、他の位置への挿入は自動的に末尾へ移動します。
-
StarRocks 2.5.7 より前のバージョンを使用する場合は、
table.create.num-bucketsパラメーターでバケット数を明示的に指定する必要があります。StarRocks 2.5.7 以降では、適切なバケット数を自動的に決定できます。 -
StarRocks 3.2 以降を使用する場合は、スキーマ変更を高速化するために、
table.create.properties.fast_schema_evolutionオプションを有効にすることを推奨します。 -
EMR Serverless StarRocks へのデータインジェストに CDC YAML を使用すると、ストリーミングの問題が発生する場合があります。次のいずれかの回避策を使用できます:
-
Flink SQL StarRocks コネクタを使用し、
sink.version=V1パラメーターを設定します。 -
FE パラメーター
emr_internal_redirectを有効にします。 -
SLB の代わりに StarRocks のプライベートゾーンドメイン名を使用します。
-
構文
source:
...
sink:
type: starrocks
name: StarRocks Sink
jdbc-url: jdbc:mysql://127.0.0.1:9030
load-url: 127.0.0.1:8030
username: root
password: pass
sink.buffer-flush.interval-ms: 5000 # バッファーフラッシュ間隔を設定します。
設定
|
パラメーター |
説明 |
型 |
必須 |
デフォルト |
備考 |
|
|
シンクコネクタのタイプを指定します。 |
String |
はい |
— |
|
|
|
シンクの表示名。 |
String |
いいえ |
— |
— |
|
|
データベース接続用の JDBC URL。 |
String |
はい |
— |
複数のアドレスをカンマ ( |
|
|
Stream Load 用の FE ノードの HTTP URL。 |
String |
はい |
— |
複数のアドレスをセミコロン ( |
|
|
StarRocks 接続用のユーザー名。 |
String |
はい |
— |
このユーザーは、ターゲットテーブルに対して少なくとも SELECT および INSERT 権限を持っている必要があります。StarRocks の GRANT コマンドで必要な権限を付与できます。 |
|
|
StarRocks 接続用のパスワード。 |
String |
はい |
— |
— |
|
|
データ書き込みの配信セマンティクス。 |
String |
いいえ |
at-least-once |
有効な値:
|
|
|
Stream Load ジョブのラベルプレフィックス。 |
String |
いいえ |
— |
— |
|
|
HTTP 接続を確立するためのタイムアウト。 |
整数 |
いいえ |
30000 |
単位:ミリ秒。値は 100 から 60000 の間である必要があります。 |
|
|
サーバーからの 100 Continue レスポンスを待機するためのタイムアウト。 |
整数 |
いいえ |
30000 |
単位:ミリ秒。値は 3000 から 600000 の間である必要があります。 |
|
|
フラッシュがトリガーされる前の、インメモリキャッシュの最大サイズ (バイト単位)。 |
Long |
いいえ |
157286400 |
単位:バイト。値は 64 MB から 10 GB の間である必要があります。 説明
|
|
|
フラッシュがトリガーされる前の、インメモリキャッシュ内の最大行数。 |
Long |
いいえ |
500000 |
値は 64,000 から 5,000,000 の間である必要があります。 |
|
|
各テーブルのバッファーのフラッシュ間隔。 |
Long |
いいえ |
300000 |
単位:ミリ秒。 説明
少量のデータを同期するジョブの場合、データが永続化されるまでの長い遅延を避けるために、この値を小さくしてください。 |
|
|
最大再試行回数。 |
Long |
いいえ |
3 |
値は 0 から 1000 の間である必要があります。 |
|
|
コネクタがバッファーをフラッシュするかどうかを確認する頻度。 |
Long |
いいえ |
50 |
単位:ミリ秒。 |
|
|
Stream Load に使用されるスレッド数。 |
整数 |
いいえ |
2 |
— |
|
|
Stream Load トランザクションインターフェイスをデータ取り込みに使用するかどうかを指定します。 |
ブール値 |
いいえ |
true |
このオプションは、データベースがサポートしている場合にのみ有効です。 |
|
|
シンクの追加プロパティ。 |
String |
いいえ |
— |
サポートされているプロパティについては、「STREAM LOAD」をご参照ください。 |
|
|
自動作成されるテーブルのバケット数。 |
整数 |
いいえ |
— |
|
|
|
テーブルの自動作成に関する追加プロパティ。 |
String |
いいえ |
— |
たとえば、 |
|
|
スキーマ変更操作のタイムアウト。 |
整数 |
いいえ |
1800 |
値は秒単位の整数である必要があります。 説明
スキーマ変更操作がこの制限を超えると、ジョブは失敗します。 |
|
|
各 Unicode 文字に割り当てるバイト数。 |
整数 |
いいえ |
3 |
CDC では、VARCHAR 型の長さは 文字数 で測定されますが、StarRocks では、VARCHAR 型の長さは バイト数 で測定されます。 ほとんどの場合、Unicode 文字は UTF-8 エンコーディング後も 3 バイトを超えません。ただし、一部の珍しい文字や絵文字記号は 4 バイト以上を占有する場合があります。 |
組み込みカタログの再利用
VVR 11.5 以降では、[Data Management] ページで作成した組み込み StarRocks カタログを、Flink CDC データインジェストジョブで直接参照できます。これにより、手動で設定する必要があるプロパティの数が減り、設定が簡素化されます。
sink:
type: starrocks
using.built-in-catalog: starrocks_catalog
データインジェストジョブでは、次の StarRocks カタログオプションを自動的に再利用できます。
-
jdbc-url
-
http-url
-
username
-
password
-
table.num-buckets
これらの値をオーバーライドするには、対応する YAML オプションを明示的に設定します。明示的に設定したオプションが優先されます。
型マッピング
StarRocks は、すべての CDC YAML 型をサポートしているわけではありません。サポートされていない型を sink に書き込むと、ジョブは失敗します。変換処理で CAST 組み込み関数を使用してサポートされていないデータを変換するか、射影文を使用して結果テーブルから削除できます。詳細については、「Develop a Flink CDC data ingestion job」をご参照ください。
|
CDC 型 |
StarRocks 型 |
備考 |
|
TINYINT |
TINYINT |
— |
|
SMALLINT |
SMALLINT |
|
|
INT |
INT |
|
|
BIGINT |
BIGINT |
|
|
FLOAT |
FLOAT |
|
|
DOUBLE |
DOUBLE |
|
|
BOOLEAN |
BOOLEAN |
|
|
DATE |
DATE |
|
|
TIMESTAMP |
DATETIME |
|
|
TIMESTAMP_LTZ |
DATETIME |
|
|
DECIMAL(p, s) |
DECIMAL(p, s) |
StarRocks はプライマリキーとして DECIMAL をサポートしていないため、コネクターはアップストリームの DECIMAL プライマリキーカラムを、同期される StarRocks スキーマ内で自動的に VARCHAR に変換します。 |
|
CHAR(n) (n <= 85) |
CHAR(n × 3) |
CDC は長さを文字数で測定しますが、StarRocks はバイト数を使用します。コネクターは、マルチバイトの UTF-8 文字を考慮して長さを 3 倍にします。 説明
StarRocks の CHAR 型の最大長は 255 です。そのため、長さが 85 以下の CDC CHAR 型のみが StarRocks の CHAR 型にマッピングされます。 説明
|
|
CHAR(n) (n > 85) |
VARCHAR(n × 3) |
CDC は長さを文字数で測定しますが、StarRocks はバイト数を使用します。コネクターは、マルチバイトの UTF-8 文字を考慮して長さを 3 倍にします。 説明
CDC は長さを文字数で測定しますが、StarRocks はバイト数を使用します。コネクターは長さを 3 倍にします。結果が StarRocks の CHAR 型の上限である 255 バイトを超えるため、VARCHAR にマッピングされます。 説明
|
|
VARCHAR(n) |
VARCHAR(n × 3) |
CDC は長さを文字数で測定しますが、StarRocks はバイト数を使用します。コネクターは、マルチバイトの UTF-8 文字を考慮して長さを 3 倍にします。 説明
|
|
BINARY(n) |
BINARY(n+2) |
データ整合性を確保するため、2 バイトのパディングが追加されます。 |
|
VARBINARY(n) |
VARBINARY(n+1) |
データ整合性を確保するため、1 バイトのパディングが追加されます。 |
スキーマ変更
データインジェストシンクとして、StarRocks は次のスキーマ変更イベントをサポートしています:
-
テーブル作成イベント
説明ダウンストリームの StarRocks テーブルがすでに存在する場合、コネクタは再度作成を試みません。ダウンストリームのテーブルスキーマがアップストリームのスキーマと互換性があることを確認してください。
-
列追加イベント
説明StarRocks では、プライマリキー列をテーブルの最初に配置する必要があります。新しい列は、それらの後に追加する必要があります。
-
列型変更イベント
説明サポートされているスキーマ変更パスについては、「StarRocks 公式ドキュメント」をご参照ください。
-
列削除イベント
-
テーブル切り捨てイベント
-
テーブル削除イベント