Utilisez clickhouse-client pour importer des fichiers locaux dans Alibaba Cloud ClickHouse.
Prérequis
Un compte de base de données est créé. Gérer les comptes des clusters Community-Compatible Edition | Gérer les comptes des clusters Enterprise Edition.
-
clickhouse-client (version ≥ version de votre cluster) est installé. Installer clickhouse-client.
RemarqueLes imports via le réseau public sont lents. Pour les grands ensembles de données, utilisez le réseau interne.
Installez clickhouse-client sur une instance ECS située dans le même VPC que votre cluster Alibaba Cloud ClickHouse, puis connectez-vous via l'endpoint VPC.
L'instance ECS nécessite un accès au réseau public pour installer clickhouse-client.
Si vous n'avez pas encore acheté d'instance ECS, sélectionnez Public IP Address lors de l'achat de l'instance. Créer une instance à l'aide de l'assistant.
Si votre instance ECS existante ne dispose pas d'adresse IP publique, associez-lui une EIP. Associer une adresse IP élastique (EIP).
L'adresse IP du serveur clickhouse-client est ajoutée à la liste d'autorisation de Alibaba Cloud ClickHouse. Définir la liste d'autorisation.
Le fichier source utilise un format pris en charge. Formats de fichiers pris en charge.
Procédure
Cet exemple importe un fichier CSV dans la table test_tbl_distributed de la base de données default de Alibaba Cloud ClickHouse. Remplacez les paramètres par vos valeurs réelles :
Base de données de destination : default
Table de destination : test_tbl_distributed
Fichier de données source : testData.csv
Étape 1 : Préparer les données
Dans le répertoire d'installation de clickhouse-client, créez le fichier testData.csv avec le contenu suivant.
1,yang,32,shanghai,http://example.com
2,wang,22,beijing,http://example.com
3,xiao,23,shenzhen,http://example.com
4,jess,45,hangzhou,http://example.com
5,jack,14,shanghai,http://example.com
6,tomy,25,hangzhou,http://example.com
7,lucy,45,shanghai,http://example.com
8,tengyin,26,shanghai,http://example.com
9,wangli,27,shenzhen,http://example.com
10,xiaohua,37,shanghai,http://example.com
Étape 2 : Créer une table
-
Connectez-vous à la base de données.
Alibaba Cloud ClickHouse s'intègre au service Data Management Service (DMS). Se connecter à un cluster ClickHouse à l'aide de DMS.
Autres clients : Se connecter à une base de données.
-
Créez une table en fonction de l'édition de votre cluster.
ImportantL'ordre des colonnes et les types de données doivent correspondre à ceux du fichier source.
Enterprise Edition nécessite uniquement une table locale. Community-Compatible Edition peut également nécessiter une table distribuée. Consultez la syntaxe de référence CREATE TABLE.
Enterprise edition
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id;Si vous recevez le message d'erreur
ON CLUSTER is not allowed for Replicated databaselors de l'exécution de cette instruction, vous pouvez mettre à niveau la version mineure du moteur pour corriger l'erreur.Community-compatible edition
Sélectionnez un moteur en fonction du type de réplica de votre cluster.
ImportantLors de la création d'une table dans un cluster à deux réplicas, vous devez utiliser un moteur Replicated de la famille de moteurs MergeTree. Si vous créez une table avec un moteur non répliqué dans un cluster à deux réplicas, les données ne peuvent pas être répliquées entre les réplicas, ce qui peut entraîner une incohérence des données.
Single-replica
-
Créez une table locale.
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id; -
(Facultatif) Créez une table distribuée.
Ignorez cette étape si vous avez uniquement besoin d'une table locale.
Recommandé pour les clusters multi-nœuds.
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
Two-replica
-
Créez une table locale.
CREATE TABLE test_tbl_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{database}/{table}/{shard}', '{replica}') order by id; -
(Facultatif) Créez une table distribuée.
Ignorez cette étape si vous avez uniquement besoin d'une table locale.
Recommandé pour les clusters multi-nœuds.
CREATE TABLE test_tbl_distributed ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = Distributed(default, default, test_tbl_local, rand());
-
Étape 3 : Importer les données
Exécutez la commande suivante depuis le répertoire d'installation de clickhouse-client.
Pour accélérer les imports, divisez le fichier source et exécutez plusieurs clients en parallèle.
Pour les clusters multi-nœuds, importez les données dans la table distribuée.
cat <file_name> | ./clickhouse-client --host=<host> --port=<port> --user=<user> --password=<password> --query="INSERT INTO <table_name> FORMAT <file_type>";
|
Paramètre |
Description |
|
file_name |
Chemin d'accès au fichier source. |
|
host |
Endpoint public ou VPC du cluster, disponible sur la page Cluster Information. Choisissez un endpoint en fonction de l'emplacement de clickhouse-client :
|
|
port |
Port TCP, disponible sur la page Cluster Information. |
|
user |
Compte de base de données. |
|
password |
Mot de passe du compte de base de données. |
|
table_name |
Nom de la table de destination. Pour les tables distribuées, utilisez le nom de la table distribuée. |
|
file_type |
Format du fichier source. |
Étape 4 : Vérifier le résultat de l'importation
-
Connectez-vous au cluster.
-
Exécutez une instruction de requête.
ImportantSur les clusters Community-Compatible Edition multi-nœuds, interrogez la table distribuée pour afficher toutes les données. Une table locale renvoie uniquement les données d'un seul nœud.
SELECT * FROM test_tbl_local;Sortie attendue :
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | yang | 32 | shanghai | http://example.com | | 2 | wang | 22 | beijing | http://example.com | | 3 | xiao | 23 | shenzhen | http://example.com | | 4 | jess | 45 | hangzhou | http://example.com | | 5 | jack | 14 | shanghai | http://example.com | | 6 | tomy | 25 | hangzhou | http://example.com | | 7 | lucy | 45 | shanghai | http://example.com | | 8 | tengyin | 26 | shanghai | http://example.com | | 9 | wangli | 27 | shenzhen | http://example.com | | 10 | xiaohua | 37 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+
Formats de fichiers pris en charge
Formats de fichiers couramment pris en charge :
Chaque ligne représente une ligne de données. L'ordre des colonnes doit correspondre à la définition de la table.
Pour les formats comportant des en-têtes, les lignes d'en-tête sont ignorées. L'importation repose sur l'ordre des colonnes, et non sur les noms ou les types d'en-tête.
|
Format |
Exigences relatives au texte |
Exemple |
|
TabSeparated |
|
|
|
TabSeparatedWithNames |
Identique à TabSeparated, mais la première ligne contient les noms des colonnes (ignorés lors de l'analyse). |
|
|
TabSeparatedWithNamesAndTypes |
Identique à TabSeparated, mais la première ligne contient les noms des colonnes et la deuxième ligne les types de données. Les deux lignes sont ignorées lors de l'analyse. |
|
|
CSV |
|
|
|
CSVWithNames |
Identique à CSV, mais la première ligne contient les noms des colonnes (ignorés lors de l'analyse). |
|
Référence complète des formats : Formats pour les données d'entrée et de sortie.
Références
Autres méthodes de migration : Migration et synchronisation des données.