DataWorks の ClickHouse データソースでは、ClickHouse からの読み取りおよび ClickHouse への書き込みが可能です。本トピックでは、サポートされるデータ同期機能と必要な構成について説明します。
サポートされるバージョン
本データソースは、以下の ApsaraDB for ClickHouse カーネルバージョンおよびそれらに対応する Java Database Connectivity (JDBC) ドライバーのバージョンをサポートしています。
JDBC ドライバーのバージョン | ApsaraDB for ClickHouse カーネルのバージョン |
0.2.4 | 20.8、21.8 |
0.4.0、0.4.2 | 22.8、23.8、25.3 |
制限事項
ClickHouse データソースは、バッチ読み取りおよびバッチ書き込み操作のみをサポートします。
サーバーレスリソースグループ を使用できます。
接続は Java Database Connectivity (JDBC) を使用して確立され、データ読み取りは JDBC ステートメントに限定されます。
列のフィルタリングおよび並べ替えが可能です。
ClickHouse への負荷を高めないよう、INSERT モードで ClickHouse Writer を使用する場合は、最大スループットを 1,000 トランザクション/秒 (TPS) に設定することを推奨します。
単一の ClickHouse テーブルに対するバッチ同期は、ApsaraDB for ClickHouse のみでサポートされます。
サポートされるデータの型
以下の表には、サポートされている一般的な ApsaraDB for ClickHouse のデータ型を示します。ApsaraDB for 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 | 一部サポート対象 ネストされたデータの型が整数型、浮動小数点型、文字列型、または DateTime64 型(ミリ秒精度)の場合のみサポートされます。 | サポート対象 |
データソースの追加
DataWorks で同期タスクを開発する前に、まず「データソースの管理」の手順に従って、必要なデータソースを DataWorks に追加する必要があります。データソースを追加する際に、DataWorks コンソールで パラメーターの説明を表示することで、各パラメーターの意味を確認できます。
データ同期
同期タスクの設定方法および設定手順については、以下の構成ガイドをご参照ください。
単一テーブルのバッチ同期
設定手順については、「コードレス UI を使用したタスクの設定」および「コードエディタを使用したタスクの設定」をご参照ください。
コードエディタでのタスク設定に必要なパラメーターの一覧およびスクリプトのサンプルについては、「付録:スクリプトのサンプルとパラメーターの説明」をご参照ください。
データベース全体のバッチ同期
設定手順については、「データベース全体のバッチ同期タスクの設定」をご参照ください。
付録:スクリプトのサンプルとパラメーター
コードエディタを使用したバッチ同期タスクの設定
コードエディタを使用してバッチ同期タスクを設定する場合、統一されたスクリプトフォーマット要件に基づき、関連するパラメーターをスクリプト内に設定する必要があります。詳細については、「コードエディタの使用」をご参照ください。以下に、コードエディタを使用してバッチ同期タスクを設定する際に、データソースに対して設定する必要があるパラメーターについて説明します。
Reader スクリプトのサンプル
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "clickhouse", // コネクタ名。
"parameter": {
"datasource": "example",
"table": "source_table", // ソーステーブル。
"column": [ // 読み取る列。
"id",
"name"
],
"where": "", // フィルター条件。
"splitPk": "", // 並列読み取り用のシャードキー。
"fetchSize": 1024 // 1 バッチあたりの取得レコード数。
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "stream",
"parameter": {},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0" // 許容される不正データレコードの最大数。
},
"speed": {
"throttle": true, // 速度制限を有効化するかどうかを指定。
"concurrent": 1, // ジョブの並行スレッド数。
"mbps": "12" // 最大転送レート(MB/s)。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}Reader スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
datasource | DataWorks で作成した ClickHouse データソースの名前です。 | はい | なし |
table | データを読み取るソーステーブルです。 説明 table は connection 構成ブロック内に含める必要があります。 | はい | なし |
fetchSize | データベースから 1 バッチあたりに取得するレコード数です。値を大きくするとネットワーク通信回数が減り、データ抽出のパフォーマンスが向上します。 説明 この値をあまり大きく設定すると、メモリ不足(OOM)エラーが発生する可能性があります。ご利用のリソース使用量および ClickHouse のワークロードに応じて、徐々に値を増加させることを推奨します。 | いいえ | 1024 |
column | ClickHouse から読み取る列です。列名はカンマで区切ります。例: 説明 column パラメーターは必須であり、空にすることはできません。 | はい | なし |
jdbcUrl | ソースデータベースへの Java Database Connectivity (JDBC) 接続文字列です。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": {
"datasource": "example_ch_writer", // ターゲットデータソースの名前。
"column": [ // ターゲット列。
"id",
"name"
],
"table": "target_table", // ターゲットテーブル。
"preSql": [ // タスク実行前に実行する SQL ステートメント。
"TRUNCATE TABLE IF EXISTS target_table"
],
"postSql": [ // タスク実行後に実行する SQL ステートメント。
"OPTIMIZE TABLE target_table FINAL"
],
"batchSize": 1024, // 1 バッチあたりの書き込みレコード数。
"writeMode": "insert"
},
"name": "Writer",
"category": "writer"
}
],
"setting": {
"errorLimit": {
"record": "0" // 許容される不正データレコードの最大数。
},
"speed": {
"throttle": true, // 速度制限を有効化するかどうかを指定。
"concurrent": 1, // ジョブの並行スレッド数。
"mbps": "12" // 最大転送レート(MB/s)。
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}Writer スクリプトのパラメーター
パラメーター | 説明 | 必須 | デフォルト値 |
jdbcUrl | ターゲットデータベースへの JDBC 接続文字列です。jdbcUrl パラメーターは connection 構成ブロックに含まれます。
| はい | なし |
datasource | DataWorks で作成した ClickHouse データソースの名前です。 | はい | なし |
password | データソースのユーザー名に対応するパスワードです。 | はい | なし |
table | データを書き込むターゲットテーブルです。 説明 table は connection 構成ブロック内に含める必要があります。 | はい | なし |
column | データを書き込むターゲット列です。列名を JSON 配列で指定します。例: 説明 column パラメーターは必須であり、空にすることはできません。 | はい | なし |
preSql | 書き込みタスクの開始前に実行される SQL ステートメントです。 | いいえ | なし |
postSql | 書き込みタスクの完了後に実行される SQL ステートメントです。 | いいえ | なし |
batchSize | 1 バッチあたりの書き込みレコード数です。値を大きくすると、ClickHouse とのネットワーク通信回数が減り、全体的なスループットが向上します。 | いいえ | 1024 |