La source de données ClickHouse offre des canaux de lecture et d'écriture bidirectionnels pour ClickHouse. Cette rubrique décrit les fonctionnalités de synchronisation des données ClickHouse prises en charge par DataWorks.
Versions prises en charge
Le tableau ci-dessous présente les versions prises en charge d'ApsaraDB for ClickHouse et les versions compatibles du pilote JDBC :
|
Version du pilote JDBC |
Version du noyau ApsaraDB for ClickHouse |
|
0.2.4 |
20.8, 21.8 |
|
0.4.0, 0.4.2 |
22.8, 23.8, 25.3 |
Limites
La source de données ClickHouse prend uniquement en charge la lecture et l'écriture par lot, comme détaillé ci-dessous.
Prend en charge les groupes de ressources serverless.
Prend en charge les connexions JDBC à ClickHouse et autorise uniquement la lecture des données via JDBC Statement.
Permet le filtrage et le réordonnancement des colonnes. Spécifiez les colonnes selon vos besoins.
Afin de préserver les performances de ClickHouse, nous vous recommandons de limiter le débit système (TPS) à 1 000 maximum lorsque ClickHouse Writer utilise le mode INSERT.
La synchronisation par lot de table unique ClickHouse prend uniquement en charge ApsaraDB for ClickHouse.
Types de colonnes pris en charge
Les types de données ApsaraDB for ClickHouse courants suivants sont pris en charge. Pour la liste complète des types de données ApsaraDB for ClickHouse, consultez la section Types de données. Les autres types issus de l'ensemble officiel des types de données ClickHouse open source ne sont pas pris en charge. Pour consulter la liste complète des types de données ClickHouse open source, reportez-vous à la documentation ClickHouse Doc.
|
Type de données |
ClickHouse Reader |
ClickHouse Writer |
|
Int8 |
Pris en charge |
Pris en charge |
|
Int16 |
Pris en charge |
Pris en charge |
|
Int32 |
Pris en charge |
Pris en charge |
|
Int64 |
Pris en charge |
Pris en charge |
|
UInt8 |
Pris en charge |
Pris en charge |
|
UInt16 |
Pris en charge |
Pris en charge |
|
UInt32 |
Pris en charge |
Pris en charge |
|
UInt64 |
Pris en charge |
Pris en charge |
|
Float32 |
Pris en charge |
Pris en charge |
|
Float64 |
Pris en charge |
Pris en charge |
|
Decimal |
Pris en charge |
Pris en charge |
|
String |
Pris en charge |
Pris en charge |
|
FixedString |
Pris en charge |
Pris en charge |
|
Date |
Pris en charge |
Pris en charge |
|
DateTime |
Pris en charge |
Pris en charge |
|
DateTime64 |
Pris en charge |
Pris en charge |
|
Boolean |
Pris en charge Remarque
ClickHouse ne dispose pas de type Boolean distinct. Vous pouvez utiliser UInt8 ou Int8 à la place. |
Pris en charge |
|
Array |
Partiellement pris en charge. Pris en charge lorsque le type d'élément du tableau est un entier, un nombre à virgule flottante, une chaîne ou DateTime64 avec une précision à la milliseconde. |
Pris en charge |
|
Tuple |
Pris en charge |
Pris en charge |
|
Domain(IPv4,IPv6) |
Pris en charge |
Pris en charge |
|
Enum8 |
Pris en charge |
Pris en charge |
|
Enum16 |
Pris en charge |
Pris en charge |
|
Nullable |
Pris en charge |
Pris en charge |
|
Nested |
Partiellement pris en charge. Les types d'éléments Nested prennent en charge les entiers, les nombres à virgule flottante, les chaînes et DateTime64 avec une précision à la milliseconde. |
Pris en charge |
Ajouter une source de données
Avant de développer une tâche de synchronisation dans DataWorks, ajoutez la source de données requise à DataWorks en suivant les instructions fournies dans la section Configuration de la source de données. Consultez les descriptions des paramètres dans la console DataWorks pour comprendre la signification des paramètres lors de l'ajout d'une source de données.
Développer une tâche de synchronisation des données
Pour obtenir des informations sur le point d'entrée et la procédure de configuration d'une tâche de synchronisation, consultez les guides de configuration suivants.
Guide de configuration des tâches de synchronisation par lot de table unique
Pour la procédure, consultez les sections Configuration sans code et Configuration en mode script.
Pour l'ensemble complet des paramètres du mode script et un exemple de script, reportez-vous à la section Annexe : Exemple de script et descriptions des paramètres ci-dessous.
Guide de configuration de la synchronisation par lot en lecture complète de base de données
Pour la procédure, consultez la section Configuration de la synchronisation par lot de base de données.
Annexe : Exemple de script et descriptions des paramètres
Configurer une tâche de synchronisation par lot à l'aide de l'éditeur de code
Si vous souhaitez configurer une tâche de synchronisation par lot à l'aide de l'éditeur de code, configurez les paramètres associés dans le script conformément aux exigences de format de script unifié. Pour plus d'informations, consultez la section Configuration en mode script. Les informations suivantes décrivent les paramètres que vous devez configurer pour les sources de données lors de la configuration d'une tâche de synchronisation par lot à l'aide de l'éditeur de code.
Exemple de script Reader
{
"type": "job",
"version": "2.0",
"steps": [
{
"stepType": "clickhouse", //Plugin name.
"parameter": {
"fetchSize":1024,//This configuration item defines the number of records fetched in batch each time between the plugin and the database server.
"datasource": "example",
"column": [ //Column names.
"id",
"name"
],
"where": "", //Filter condition.
"splitPk": "", //Split key.
"table": "" //Table name.
},
"name": "Reader",
"category": "reader"
},
{
"stepType": "clickhouse",
"parameter": {
"postSql": [
"update @table set db_modify_time = now() where db_id = 1"
],
"datasource": "example", //Data source.
"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" //Maximum number of error records allowed during synchronization.
},
"speed": {
"throttle":true,//When throttle is false, the mbps parameter does not take effect, indicating no rate limiting; when throttle is true, rate limiting is applied.
"concurrent":1 //Job concurrency.
"mbps":"12",//Rate limit, where 1mbps = 1MB/s.
}
},
"order": {
"hops": [
{
"from": "Reader",
"to": "Writer"
}
]
}
}
Paramètres du script Reader
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
|
datasource |
Le nom de la source de données. Le mode script permet d'ajouter des sources de données. La valeur de ce paramètre doit correspondre au nom de la source de données ajoutée. |
Oui |
Aucune |
|
table |
La table à synchroniser, décrite en JSON. Remarque
table doit être inclus dans l'unité de configuration connection. |
Oui |
Aucune |
|
fetchSize |
Ce paramètre définit le nombre de lignes récupérées à chaque lot entre le plug-in et le serveur de base de données. Il détermine le nombre d'allers-retours réseau entre le système de synchronisation des données et le serveur, et peut améliorer les performances d'extraction des données. Remarque
Une valeur fetchSize trop élevée peut provoquer une erreur OOM (Out Of Memory) lors du processus de synchronisation des données. Augmentez-la progressivement en fonction de la charge de ClickHouse. |
Non |
1 024 |
|
column |
Les colonnes ClickHouse à lire, séparées par des virgules. Par exemple, Remarque
Le paramètre column est obligatoire et ne peut pas être vide. |
Oui |
Aucune |
|
jdbcUrl |
La chaîne de connexion JDBC pour la base de données source. jdbcUrl est inclus dans l'unité de configuration connection.
|
Oui |
Aucune |
|
username |
Le nom d'utilisateur de la source de données. |
Oui |
Aucune |
|
password |
Le mot de passe correspondant au nom d'utilisateur spécifié pour la source de données. |
Oui |
Aucune |
|
splitPk |
Lorsque ClickHouse extrait des données, la spécification de splitPk indique que vous souhaitez utiliser le champ représenté par splitPk pour fragmenter les données. La synchronisation des données lance alors des tâches simultanées pour améliorer l'efficacité de la synchronisation. Remarque
Lorsque splitPk est configuré, le paramètre fetchSize est obligatoire. |
Non |
Aucune |
|
where |
Condition de filtrage. Dans les scénarios métier réels, vous synchronisez souvent les données du jour en cours, la condition where étant spécifiée sous la forme La condition where permet d'effectuer efficacement une synchronisation incrémentielle. Si vous ne fournissez pas d'instruction where, y compris en omettant la clé ou la valeur pour where, la synchronisation des données est traitée comme une synchronisation complète. |
Non |
Aucune |
Exemple de script Writer
{
"type":"job",
"version":"2.0",//Version number.
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"clickhouse",//Plugin name.
"parameter":{
"username": "",
"password": "",
"column": [//Fields.
"id",
"name"
],
"connection": [
{
"table": [//Table name.
"ClickHouse_table"
],
"jdbcUrl": "jdbc:clickhouse://ip:port/database"
}
],
"preSql": [ //SQL statements executed before the data synchronization task runs.
"TRUNCATETABLEIFEXISTStablename"
],
"postSql": [//SQL statements executed after the data synchronization task runs.
"ALTERTABLEtablenameUPDATEcol1=1WHEREcol2=2"
],
"batchSize": "1024",
"batchByteSize": "67108864",
"writeMode": "insert"
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//Number of error records.
},
"speed":{
"throttle":true,//When throttle is false, the mbps parameter does not take effect, indicating no rate limiting; when throttle is true, rate limiting is applied.
"concurrent":1, //Job concurrency.
"mbps":"12"//Rate limit, where 1mbps = 1MB/s.
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Paramètres du script Writer
|
Paramètre |
Description |
Obligatoire |
Valeur par défaut |
|
jdbcUrl |
La chaîne de connexion JDBC pour la base de données de destination. jdbcUrl est inclus dans l'unité de configuration connection.
|
Oui |
Aucune |
|
username |
Le nom d'utilisateur de la source de données. |
Oui |
Aucune |
|
password |
Le mot de passe correspondant au nom d'utilisateur spécifié pour la source de données. |
Oui |
Aucune |
|
table |
Les noms des tables dans lesquelles écrire, décrits sous forme de tableau JSON. Remarque
table doit être inclus dans l'unité de configuration connection. |
Oui |
Aucune |
|
column |
Les colonnes dans lesquelles écrire dans la table de destination, séparées par des virgules. Par exemple, Remarque
Le paramètre column est obligatoire et ne peut pas être vide. |
Oui |
Aucune |
|
preSql |
L'instruction SQL standard exécutée avant l'écriture des données dans la table de destination. |
Non |
Aucune |
|
postSql |
L'instruction SQL standard exécutée après l'écriture des données dans la table de destination. |
Non |
Aucune |
|
batchSize |
Le nombre d'enregistrements validés à chaque lot. Cette valeur réduit considérablement le nombre d'allers-retours réseau entre le système de synchronisation des données et ClickHouse, et améliore le débit global. Une valeur trop élevée peut provoquer une erreur OOM lors du processus de synchronisation des données. |
Non |
1 024 |