MariaDB データソースは、MariaDB からのデータ読み取りと MariaDB へのデータ書き込みを行うための双方向チャネルを提供します。このトピックでは、DataWorks が MariaDB に対して提供するデータ同期機能について説明します。
サポート対象の MariaDB バージョン
MariaDB データソースは、以下のバージョンをサポートしています:
MariaDB バージョン 5.5.x、10.0.x、10.1.x、10.2.x、10.3.x がサポートされています。また、オフライン同期を使用してビューからデータを読み取ることもできます。
サポート対象のフィールドタイプ
各 MariaDB バージョンのフィールドタイプの完全なリストについては、MariaDB の公式ドキュメントをご参照ください。次の表に、MariaDB 10.3.x でサポートされている主要なフィールドタイプを示します。
フィールドタイプ | オフライン読み取り (MariaDB Reader) | オフライン書き込み (MariaDB Writer) |
TINYINT | サポート | サポート |
SMALLINT | サポート | サポート |
INTEGER | サポート | サポート |
BIGINT | サポート | サポート |
FLOAT | サポート | サポート |
DOUBLE | サポート | サポート |
DECIMAL/NUMERIC | サポート | サポート |
REAL | 非サポート | 非サポート |
VARCHAR | サポート | サポート |
JSON | サポート | サポート |
TEXT | サポート | サポート |
MEDIUMTEXT | サポート | サポート |
LONGTEXT | サポート | サポート |
VARBINARY | サポート | サポート |
BINARY | サポート | サポート |
TINYBLOB | サポート | サポート |
MEDIUMBLOB | サポート | サポート |
LONGBLOB | サポート | サポート |
ENUM | サポート | サポート |
SET | サポート | サポート |
BOOLEAN | サポート | サポート |
BIT | サポート | サポート |
DATE | サポート | サポート |
DATETIME | サポート | サポート |
TIMESTAMP | サポート | サポート |
TIME | サポート | サポート |
YEAR | サポート | サポート |
LINESTRING | 非サポート | 非サポート |
POLYGON | 非サポート | 非サポート |
MULTIPOINT | 非サポート | 非サポート |
MULTILINESTRING | 非サポート | 非サポート |
MULTIPOLYGON | 非サポート | 非サポート |
GEOMETRYCOLLECTION | 非サポート | 非サポート |
前提条件:MariaDB 環境の準備
DataWorks を使用してデータを同期する前に、ご利用の MariaDB 環境を準備する必要があります。これにより、MariaDB のデータ同期タスクを問題なく設定および実行できるようになります。
MariaDB バージョンの確認
Data Integration は、特定のバージョンの MariaDB をサポートしています。詳細については、「サポート対象の MariaDB バージョン」セクションをご参照ください。ご利用の MariaDB データベースで以下の文を実行して、バージョンを確認できます。
アカウント権限の設定
DataWorks がデータソースにアクセスするための専用の MariaDB アカウントを作成します。
(任意) アカウントの作成。
詳細については、「MariaDB ユーザーの作成」をご参照ください。
権限の設定。
MariaDB からのオフライン読み取りの場合、アカウントには同期対象のテーブルに対する SELECT 権限が必要です。
MariaDB へのオフライン書き込みの場合、アカウントには同期対象のテーブルに対する INSERT、DELETE、UPDATE 権限が必要です。
以下のコマンドを実行してアカウントに権限を付与するか、直接 SUPER 権限を付与することができます。以下の文を実行する際は、「sync_account」を作成したアカウントに置き換えてください。
-- CREATE USER 'sync_account'@'%' IDENTIFIED BY 'password'; // 同期アカウントを作成し、パスワードを設定し、任意のホストからのログインを許可します。アットマーク (%) は任意のホストを示します。 GRANT SELECT, INSERT, DELETE, UPDATE ON *.* TO 'sync_account'@'%'; // データベースに対する SELECT、INSERT、DELETE、UPDATE 権限を同期アカウントに付与します。
データソースの追加
DataWorks で同期タスクを開発する前に、「データソース管理」の指示に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際、各パラメーターの意味については、DataWorks コンソールで表示されるパラメーターの説明をご参照ください。
データ同期タスクの開発
同期タスクの設定のエントリポイントと手順については、以下の設定ガイドをご参照ください。
単一テーブルのオフライン同期タスクの設定ガイド
詳細については、「コードエディタでのタスク設定」をご参照ください。
コードエディタのすべてのパラメーターとスクリプト例については、「付録:MariaDB スクリプトのデモとパラメーターの説明」セクションをご参照ください。
付録:MariaDB スクリプトのデモとパラメーターの説明
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマットの要件に基づいて、スクリプト内の関連パラメーターを設定する必要があります。詳細については、「コードエディタでのタスク設定」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Reader スクリプトのデモ
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"mariadb",// プラグイン名。
"parameter":{
"column":[// カラム名。
"id"
],
"connection":[
{ "querySql":["select a,b from join1 c join join2 d on c.id = d.id;"], // 接続内で querySql を文字列として記述します。
"datasource":"",// データソース。
"table":[// テーブル名。テーブルが 1 つしかない場合でも、配列形式 [] で記述する必要があります。
"xxx"
]
}
],
"where":"",// フィルター条件。
"splitPk":"",// 分割キー。
"encoding":"UTF-8"// エンコーディング形式。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"// エラーレコード数。
},
"speed":{
"throttle":true,// throttle が false の場合、mbps パラメーターは有効にならず、レートは制限されません。throttle が true の場合、レートは制限されます。
"concurrent":1,// ジョブの同時実行数。
"mbps":"12"// レート制限。ここで、1 mbps は 1 MB/s に相当します。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Reader スクリプトのパラメーター
スクリプトパラメーター名 | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタではデータソースを追加できます。このパラメーターの値は、追加したデータソースの名前と同じである必要があります。 | はい | なし |
table | データを同期する元のテーブルの名前。1 つの Data Integration タスクでは、1 つの宛先テーブルにのみデータを同期できます。 以下の例は、table パラメーターを使用して範囲を設定する高度な使用法を示しています:
説明 タスクは、一致するすべてのテーブルからデータを読み取ります。具体的には、column パラメーターで指定されたカラムを読み取ります。テーブルまたは指定されたカラムが存在しない場合、タスクは失敗します。 | はい | なし |
column | 設定されたテーブルから同期するカラムのセット。JSON 配列を使用してフィールド情報を記述します。デフォルトでは、すべてのカラムが使用されます。例:[ * ]。
| はい | なし |
splitPk | MariaDB Reader がデータを抽出する際に splitPk を指定すると、splitPk が表すフィールドがデータパーティション分割に使用されます。その後、データ同期タスクは同時実行のサブタスクを開始して効率を向上させます。
| いいえ | なし |
where | フィルター条件。多くのビジネスシナリオでは、where 条件を gmt_create>$bizdate に設定することで、当日のデータを同期することがあります。
| いいえ | なし |
querySql (このパラメーターはコードレス UI ではサポートされていません。) | 一部のビジネスシナリオでは、where パラメーターだけではフィルター条件を定義するのに不十分な場合があります。このパラメーターを使用して、フィルター SQL 文を定義できます。 tablescolumnssplitPk たとえば、複数テーブルの結合後にデータを同期するには、select a,b from table_a join table_b on table_a.id = table_b.id を使用します。querySql を設定すると、MariaDB Reader は table、column、where、および splitPk パラメーターを無視します。querySql パラメーターは、table、column、where、および splitPk パラメーターよりも優先度が高くなります。datasource は、ユーザー名やパスワードなどの情報を解析するために使用されます。 説明 querySql パラメーターは大文字と小文字を区別します。たとえば、querysql と記述した場合、有効になりません。 | いいえ | なし |
Writer スクリプトのデモ
{
"type":"job",
"version":"2.0",// バージョン番号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"mariadb",// プラグイン名。
"parameter":{
"postSql":[],// インポート後に実行される文。
"datasource":"",// データソース。
"column":[// カラム名。
"id",
"value"
],
"writeMode":"insert",// 書き込みモード。insert、replace、または update に設定できます。
"batchSize":1024,// 1 つのバッチで送信するレコード数。
"table":"",// テーブル名。
"preSql":[
"delete from XXX;" // インポート前に実行される文。
]
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{// エラーレコード数。
"record":"0"
},
"speed":{
"throttle":true,// throttle が false の場合、mbps パラメーターは有効にならず、レートは制限されません。throttle が true の場合、レートは制限されます。
"concurrent":1, // ジョブの同時実行数。
"mbps":"12"// レート制限。これにより、最大同期レートを制御し、アップストリームまたはダウンストリームのデータベースへの過剰な読み書き圧力を防ぎます。ここで、1 mbps は 1 MB/s に相当します。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}Writer スクリプトのパラメーター
スクリプトパラメーター名 | 説明 | 必須 | デフォルト値 |
datasource | データソースの名前。コードエディタではデータソースを追加できます。このパラメーターの値は、追加したデータソースの名前と同じである必要があります。 | はい | なし |
table | データを同期する宛先テーブルの名前。 | はい | なし |
writeMode | インポートモード。insert into, on duplicate key update, and replace into モードがサポートされています:
| いいえ | insert into |
column | 宛先テーブルに書き込むフィールド。フィールドはカンマ (,) で区切ります。例:"column": ["id", "name", "age"]。すべてのカラムに順に書き込むには、アスタリスク (*) を使用します。例:"column": ["*"]。 | はい | なし |
preSql | データ同期タスクが実行される前に実行される SQL 文。コードレス UI は 1 つの SQL 文のみをサポートします。コードエディタは複数の SQL 文をサポートします。たとえば、タスクが実行される前にテーブルから古いデータをクリアできます (truncate table tablename)。 説明 複数の SQL 文に対するトランザクションはサポートされていません。 | いいえ | なし |
postSql | データ同期タスクの実行後に実行される SQL 文。コードレス UI は 1 つの SQL 文のみをサポートします。コードエディタは複数の SQL 文をサポートします。たとえば、タイムスタンプを追加できます 説明 複数の SQL 文に対するトランザクションはサポートされていません。 | いいえ | なし |
batchSize | 1 つのバッチで送信するレコード数。値を大きくすると、データ同期システムと MariaDB 間のネットワーク通信を大幅に削減でき、全体的なスループットが向上します。この値が大きすぎると、データ同期プロセスでメモリ不足 (OOM) エラーが発生する可能性があります。 | いいえ | 256 |
updateColumn | プライマリキーまたは一意なインデックスの競合が発生したときに更新するフィールド。このパラメーターは、writeMode が update に設定されている場合に使用されます。フィールドはカンマ (,) で区切ります。例:"updateColumn":["name", "age"]。 | いいえ | なし |