ClickHouse データソースは、ClickHouse との間でデータの読み書きを行うための双方向チャネルを提供します。このトピックでは、DataWorks が ClickHouse に対してサポートするデータ同期機能について説明します。
サポートされるバージョン
次の表に、Alibaba Cloud ClickHouse のバージョンと JDBC ドライバーのバージョンの互換性を示します。
JDBC ドライバーのバージョン | Alibaba Cloud ClickHouse のバージョン |
0.2.4 | 20.8、21.8 |
0.4.0、0.4.2 | 22.8、23.8 |
制限事項
ClickHouse データソースは、オフラインの読み取りおよび書き込み操作のみをサポートします。次の制限が適用されます。
サーバーレスリソースグループ (推奨) および データ統合専用リソースグループ を使用できます。
JDBC を使用して ClickHouse に接続し、JDBC 文を介してのみデータを読み取ることができます。
カラムを選択して並べ替えることができます。また、使用するカラムを指定することもできます。
ClickHouse の過負荷を避けるため、ClickHouse Writer が INSERT モードを使用する場合、システムスループット (TPS) を最大 1,000 に制限する必要があります。
サポートされるデータの型
一般的な Alibaba Cloud ClickHouse のデータの型はサポートされています。Alibaba Cloud ClickHouse のデータの型の完全なリストについては、「データの型」をご参照ください。オープンソースの ClickHouse ドキュメントに記載されているその他のデータの型はサポートされていません。オープンソースの ClickHouse のデータの型の完全なリストについては、「ClickHouse ドキュメント」をご参照ください。
データの型 | ClickHouse Reader | ClickHouse Writer |
Int8 | サポート | サポート |
Int16 | サポート | サポート |
Int32 | サポート | サポート |
Int64 | サポート | サポート |
UInt8 | サポート | サポート |
UInt16 | サポート | サポート |
UInt32 | サポート | サポート |
UInt64 | サポート | サポート |
Float32 | サポート | サポート |
Float64 | サポート | サポート |
Decimal | サポート | サポート |
String | サポート | サポート |
FixedString | サポート | サポート |
Date | サポート | サポート |
DateTime | サポート | サポート |
DateTime64 | サポート | サポート |
Boolean | サポート 説明 ClickHouse には専用のブール値型はありません。代わりに UInt8 または Int8 を使用してください。 | サポート |
Array | 部分的にサポート。 配列要素が整数、浮動小数点数、文字列、またはミリ秒精度の DateTime64 の場合にのみサポートされます。 | サポート |
Tuple | サポート | サポート |
Domain(IPv4,IPv6) | サポート | サポート |
Enum8 | サポート | サポート |
Enum16 | サポート | サポート |
Nullable | サポート | サポート |
Nested | 部分的にサポート。 Nested データの型は、整数、浮動小数点数、文字列、およびミリ秒精度の DateTime64 値をサポートします。 | サポート |
データソースの追加
DataWorks で同期タスクを開発する前に、「データソース管理」の手順に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールでパラメーターの説明を表示して、各パラメーターの意味を理解することができます。
データ同期タスクの開発
同期タスクを設定するためのエントリポイントと手順については、以下の設定ガイドをご参照ください。
単一テーブルのオフライン同期タスクの設定
手順の詳細については、「コードレス UI でのタスクの設定」および「コードエディタでのタスクの設定」をご参照ください。
コードエディタモードのすべてのパラメーターとスクリプト例の詳細については、「付録:スクリプトデモとパラメーターの説明」をご参照ください。
データベース全体のオフライン読み取り同期の設定
手順の詳細については、「リアルタイムのデータベース全体の同期タスクの設定」をご参照ください。
付録:スクリプトデモとパラメーターの説明
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマットの要件に基づいて、スクリプト内の関連パラメーターを設定する必要があります。詳細については、「コードエディタでのタスクの設定」をご参照ください。以下では、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Reader スクリプトデモ
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "clickhouse", // プラグイン名
"parameter": {
"fetchSize":1024,// データベースサーバーから一度にフェッチするレコード数
"datasource": "example",
"column": [ // カラム名
"id",
"name"
],
"where": "", // フィルター条件
"splitPk": "", // シャーディングキー
"table": "" // テーブル名
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "clickhouse",
"parameter": {
"postSql": [
"update @table set db_modify_time = now() where db_id = 1"
],
"datasource": "example", // データソース
"batchByteSize": "67108864",
"column": [
"id",
"name"
],
"writeMode": "insert",
"encoding": "UTF-8",
"batchSize": 1024,
"table": "ClickHouse_table",
"preSql": [
"delete from @table where db_id = -1"
]
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"executeMode": null,
"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 | 同期するテーブル。JSON フォーマットで記述します。 説明 table パラメーターは connection 設定ブロックに含める必要があります。 | はい | なし |
fetchSize | データベースサーバーから一度にフェッチするレコード数。この値は、同期システムがサーバーと通信する頻度を決定し、抽出パフォーマンスに影響します。 説明 fetchSize が大きすぎると、Out-of-Memory (OOM) エラーが発生する可能性があります。ClickHouse の負荷に基づいて、この値を徐々に増やしてください。 | いいえ | 1,024 |
column | ClickHouse から読み取るカラム。カラム名はカンマで区切ります。例: 説明 column パラメーターは必須であり、空にすることはできません。 | はい | なし |
jdbcUrl | ソースデータベースの JDBC 接続 URL。jdbcUrl は connection 設定ブロックに含める必要があります。
| はい | なし |
username | データソースのユーザー名。 | はい | なし |
password | 指定されたユーザー名のパスワード。 | はい | なし |
splitPk | ClickHouse からデータを抽出する際に splitPk を指定すると、splitPk が表すフィールドを使用してデータをシャーディングすることを意味します。これにより、同期タスクを同時実行できるようになり、効率が向上します。 説明 splitPk を設定した場合、fetchSize は必須になります。 | いいえ | なし |
where | フィルター条件。実際には、where を where 条件により、効果的な増分同期が可能になります。where 文を指定しない場合 (where のキーまたは値を指定しない場合を含む)、完全データ同期が実行されます。 | いいえ | なし |
Writer スクリプトデモ
{
"type":"job",
"version":"2.0",// バージョン番号
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"clickhouse",// プラグイン名
"parameter":{
"username": "",
"password": "",
"column": [// フィールド
"id",
"name"
],
"connection": [
{
"table": [// テーブル名
"ClickHouse_table"
],
"jdbcUrl": "jdbc:clickhouse://ip:port/database"
}
],
"preSql": [ // 同期タスク実行前に実行される SQL 文
"TRUNCATETABLEIFEXISTStablename"
],
"postSql": [// 同期タスク実行後に実行される SQL 文
"ALTERTABLEtablenameUPDATEcol1=1WHEREcol2=2"
],
"batchSize": "1024",
"batchByteSize": "67108864",
"writeMode": "insert"
},
"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 スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
jdbcUrl | ターゲットデータベースの JDBC 接続 URL。jdbcUrl は connection 設定ブロックに含める必要があります。
| はい | なし |
username | データソースのユーザー名。 | はい | なし |
password | 指定されたユーザー名のパスワード。 | はい | なし |
table | ターゲットテーブル名。JSON 配列として記述します。 説明 table パラメーターは connection 設定ブロックに含める必要があります。 | はい | なし |
column | データを書き込むターゲットテーブルのフィールド。フィールド名はカンマで区切ります。例: 説明 column パラメーターは必須であり、空にすることはできません。 | はい | なし |
preSql | ターゲットテーブルにデータを書き込む前に実行される SQL 文。 | いいえ | なし |
postSql | ターゲットテーブルにデータを書き込んだ後に実行される SQL 文。 | いいえ | なし |
batchSize | バッチごとに送信されるレコード数。適切な値を設定すると、同期システムと ClickHouse 間のネットワークインタラクションが大幅に削減され、全体的なスループットが向上します。値が大きすぎると、Out-of-Memory (OOM) エラーが発生する可能性があります。 | いいえ | 1,024 |