MySQL
Doris では、次の方法で MySQL からデータをロードできます。
- JDBC Catalog を使用した MySQL データのロード
Doris は JDBC Catalog を使用して MySQL を外部 Catalog としてマッピングし、MySQL のデータを SQL で直接クエリできるようにします。INSERT INTO または CREATE TABLE AS SELECT と組み合わせることで、一度限りの移行や定期的なバッチロードに使用できます。
- Streaming Job を使用した MySQL データの継続的な同期
Doris は Streaming Job を使用して、MySQL の全量データと増分データを継続的に Doris に同期します。Flink CDC の読み取り機能と連携し、ジョブを実行し続けながら MySQL の Binlog を読み取り、exactly-once セマンティクスで Doris のテーブルに書き込みます。SQL マッピング同期と自動テーブル作成同期の二つのモードをサポートします。Doris 4.1.0 以降で利用できます。
- Flink Doris Connector を使用した MySQL データのロード
Flink Doris Connector と Flink MySQL CDC を組み合わせると、リアルタイムに同期できます。Flink による追加のストリーム処理ロジックが必要な場合に適しています。この Connector は、データベース全体をワンクリックで同期するツールも提供します。詳しくは、Flink Doris Connectorを参照してください。
- サードパーティーツールを使用した MySQL データのロード
DataX、SeaTunnel、CloudCanal などのデータ統合ツールも、MySQL から Doris へのデータ同期をサポートします。
一度限りのデータ移行には、通常 JDBC Catalog を直接使用できます。全量データと増分データの継続的な同期が必要な場合は、Streaming Job を推奨します。
JDBC Catalog を使用した MySQL データのロード
JDBC Catalog を使用して MySQL を外部 Catalog としてマッピングし、INSERT INTO または CREATE TABLE AS SELECT でデータをロードします。構文の詳細は、JDBC MySQL Catalogを参照してください。
ステップ 1: MySQL にデータを用意する
CREATE TABLE test.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO test.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
ステップ 2: Doris に Catalog を作成する
CREATE CATALOG mysql_catalog PROPERTIES (
"type" = "jdbc",
"user" = "root",
"password" = "123456",
"jdbc_url" = "jdbc:mysql://127.0.0.1:3306/test",
"driver_url" = "mysql-connector-java-8.0.25.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver"
);
ステップ 3: Doris にロード先のテーブルを作成する
CREATE DATABASE IF NOT EXISTS doris_db;
CREATE TABLE doris_db.students (
id INT,
name VARCHAR(64),
age INT
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
ステップ 4: INSERT INTO でデータをロードする
INSERT INTO doris_db.students
SELECT id, name, age FROM mysql_catalog.test.students;
ロード先のテーブルがまだ存在しない場合は、CREATE TABLE AS SELECT を使用して、テーブルの作成とデータのロードを一度の操作で行うこともできます。
CREATE TABLE doris_db.students
PROPERTIES ("replication_num" = "1")
AS
SELECT * FROM mysql_catalog.test.students;
ステップ 5: ロードしたデータを確認する
SELECT * FROM doris_db.students;
+----+-------+------+
| id | name | age |
+----+-------+------+
| 1 | Emily | 25 |
| 2 | Bob | 30 |
+----+-------+------+
Streaming Job を使用した MySQL データの継続的な同期
Streaming Job は Flink CDC を介して MySQL の Binlog を継続的に読み取り、Doris に書き込みます。次の二つのモードをサポートします。
- 自動テーブル作成を伴う MySQL CDC: Doris は初回の同期時に同期先のテーブルを自動作成します(
include_tablesで一つ、複数、またはすべてのテーブルを同期できます)。at-least-once セマンティクスを提供します。 - SQL マッピングを伴う MySQL CDC: ロード先のテーブルを Doris に事前作成する必要があります。柔軟なカラムマッピング、データ変換、exactly-once セマンティクスをサポートします。
制限事項
- 主キーテーブル(Unique Key)のみをサポートします。
- Load 権限が必要です。自動テーブル作成同期では、初回実行時に同期先のテーブルを自動作成するため、Create 権限も必要です。
- Doris 4.1.0 以降で利用できます。
前提条件
Streaming Job を送信する前に、MySQL 側で Binlog を有効にし、ユーザーに対応する REPLICATION 権限を付与する必要があります。環境ごとの設定手順については、次を参照してください。
- Amazon RDS MySQL のセットアップガイド
- Amazon Aurora MySQL のセットアップガイド
- 各モードの注意事項と必要な権限については、継続的なロードの概要を参照してください。
操作例: 自動テーブル作成同期
自動テーブル作成同期では、FROM MYSQL ... TO DATABASE ... 構文を使用します。同期先は Doris のデータベースで、初回の同期時にテーブルが自動作成されます。
ステップ 1: MySQL にデータを用意する
CREATE TABLE test.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO test.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
ステップ 2: Doris に同期先のデータベースを作成する
自動テーブル作成同期ではテーブルを事前作成する必要はありませんが、テーブルを格納する同期先のデータベースは存在している必要があります。
CREATE DATABASE IF NOT EXISTS doris_db;
ステップ 3: Streaming Job を作成する
次の例では、include_tables を使用して students テーブルだけを同期します(複数のテーブルはカンマで区切って指定できます。空にするとデータベース全体を同期します)。
CREATE JOB mysql_db_sync
ON STREAMING
FROM MYSQL (
"jdbc_url" = "jdbc:mysql://127.0.0.1:3306",
"driver_url" = "mysql-connector-java-8.0.25.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver",
"user" = "root",
"password" = "123456",
"database" = "test",
"include_tables" = "students",
"offset" = "initial"
)
TO DATABASE doris_db (
"table.create.properties.replication_num" = "1" -- set to 1 in single-BE deployments
);
ステップ 4: ジョブの状態を確認する
SELECT * FROM jobs("type"="insert") WHERE ExecuteType = "STREAMING";
ステップ 5: 自動作成された Doris のテーブルとロード済みデータを確認する
SHOW TABLES FROM doris_db;
SELECT * FROM doris_db.students;
よく使う操作とすべてのパラメータについては、自動テーブル作成を伴う MySQL CDCを参照してください。
操作例: SQL マッピング同期
ステップ 1: MySQL にデータを用意する
CREATE TABLE test.students (
id INT PRIMARY KEY,
name VARCHAR(64),
age INT
);
INSERT INTO test.students VALUES (1, 'Emily', 25), (2, 'Bob', 30);
ステップ 2: Doris にロード先のテーブルを作成する
SQL マッピング同期では、ロード先のテーブルを事前に作成する必要があります。
CREATE DATABASE IF NOT EXISTS doris_db;
CREATE TABLE doris_db.students (
id INT,
name VARCHAR(64),
age INT
)
UNIQUE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");
ステップ 3: Streaming Job を作成する
CREATE STREAMING JOB で INSERT INTO ... SELECT * FROM cdc_stream(...) 構文を使用します。
CREATE JOB mysql_students_sync
ON STREAMING
DO
INSERT INTO doris_db.students
SELECT * FROM cdc_stream(
"type" = "mysql",
"jdbc_url" = "jdbc:mysql://127.0.0.1:3306",
"driver_url" = "mysql-connector-java-8.0.25.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver",
"user" = "root",
"password" = "123456",
"database" = "test",
"table" = "students",
"offset" = "initial"
);
ステップ 4: ジョブの状態を確認する
SELECT * FROM jobs("type"="insert") WHERE ExecuteType = "STREAMING";
ステップ 5: ロードしたデータを確認する
SELECT * FROM doris_db.students;
よく使う操作(一時停止、再開、削除、タスクの確認など)とすべてのパラメータについては、SQL マッピングを伴う MySQL CDCを参照してください。