Vous pouvez utiliser ApsaraDB for ClickHouse pour interroger des données dans Alibaba Cloud Object Storage Service (OSS) et exporter des données ClickHouse vers OSS.
Prérequis
-
Exigences relatives à OSS :
OSS doit être activé. Pour plus de détails, consultez Activer OSS.
L'utilisateur RAM doit disposer des permissions en lecture et écriture sur les objets OSS. Pour plus de détails, consultez Vue d'ensemble des permissions et du contrôle d'accès.
-
Exigences relatives au cluster :
Vous devez posséder un compte de base de données. Pour plus de détails, consultez Gestion des comptes.
Prérequis
-
Créez un bucket OSS. Pour plus d'informations, consultez Créer des buckets dans la console.
ImportantLe bucket OSS doit se trouver dans la même région que votre cluster ApsaraDB for ClickHouse.
Cet exemple utilise un bucket nommé ck-test-oss.
-
Importez un objet dans OSS.
Cet exemple utilise l'objet test.csv. Importez cet objet dans OSS. Pour plus d'informations, consultez Importer des objets.
Si vous utilisez votre propre objet, assurez-vous que son format est pris en charge par ApsaraDB for ClickHouse. ApsaraDB for ClickHouse prend en charge tous les formats sauf Protobuf et CapnProto. Pour plus d'informations, consultez Formats de fichiers pris en charge par ClickHouse.
Interroger des données OSS
Méthode 1 : Table externe OSS
Enterprise ou Community-compatible (22,8 ou ultérieur)
-
Connectez-vous à la base de données.
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition ou Enterprise Edition Clusters, puis cliquez sur l'ID du cluster cible.
Sur la page Cluster Information, cliquez sur Log On to Database dans le coin supérieur droit.
Dans la boîte de dialogue Connect to Instance, saisissez le compte et le mot de passe de la base de données, puis cliquez sur Log On.
-
Créez une table externe OSS.
Une table externe OSS dans ApsaraDB for ClickHouse permet d'interroger directement les objets stockés dans OSS sans importer de données dans le stockage local, ce qui permet la séparation du stockage et du calcul.
La syntaxe est la suivante :
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');Le tableau suivant décrit les paramètres.
Paramètre
Description
Exemple
table_name
Nom de la table.
oss_test_tb
col_name1,col_name2
Noms des colonnes.
user_name
col_type1,col_type2
Types de données des colonnes.
ImportantLe schéma de la table externe OSS doit correspondre aux données présentes dans OSS.
String
bucket-name
Nom du bucket OSS.
ck-test-oss
oss-endpoint
Endpoint interne permettant d'accéder au bucket OSS depuis une instance ECS via un VPC. Pour plus d'informations, consultez Régions et endpoints.
ImportantAssurez-vous que le bucket OSS et votre cluster ApsaraDB for ClickHouse se trouvent dans la même région.
oss-cn-hangzhou-internal.aliyuncs.com
file-name
Nom de l'objet dans le bucket OSS.
test.csv
access-key-id
AccessKey ID de l'utilisateur RAM pour accéder aux données OSS.
yourAccessKeyID
access-key-secret
AccessKey secret de l'utilisateur RAM pour accéder aux données OSS.
Vous pouvez utiliser un AccessKey existant ou en créer un nouveau. Pour plus d'informations, consultez Créer un AccessKey.
ImportantPour réduire le risque de fuite d'un AccessKey, l'AccessKey secret n'est affiché qu'au moment de sa création et ne peut pas être récupéré ultérieurement. Veillez à conserver l'AccessKey secret de manière sécurisée.
yourAccessKeySecret
file-format-name
Format de l'objet.
ImportantLa valeur doit correspondre à un format de fichier pris en charge par ClickHouse, en respectant la casse. Pour plus d'informations, consultez formats de fichiers pris en charge par ClickHouse.
CSV
Exemple :
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV') -
Interrogez les données OSS.
SELECT * FROM oss_test_tb;Le résultat suivant est retourné :
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible (21,8 ou antérieur)
-
Connectez-vous à la base de données.
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.
Sur la page Cluster Information, cliquez sur Log On to Database dans le coin supérieur droit.
Dans la boîte de dialogue Connect to Instance, saisissez le compte et le mot de passe de la base de données, puis cliquez sur Log On.
-
Créez une table externe OSS.
La syntaxe est la suivante :
CREATE TABLE <table_name> [ON cluster default] ( 'col_name1' col_type1, 'col_name2' col_type2, ... ) ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');Le tableau suivant décrit les paramètres.
Paramètre
Description
Exemple
table_name
Nom de la table.
oss_test_tb
col_name1,col_name2
Noms des colonnes.
user_name
col_type1,col_type2
Types de données des colonnes.
ImportantLe schéma de la table externe OSS doit correspondre aux données présentes dans OSS.
String
oss-endpoint
Endpoint interne permettant d'accéder au bucket OSS depuis une instance ECS via un VPC. Pour plus d'informations, consultez Régions et endpoints.
ImportantAssurez-vous que le bucket OSS et votre cluster ApsaraDB for ClickHouse se trouvent dans la même région.
oss-cn-hangzhou-internal.aliyuncs.com
access-key-id
AccessKey ID de l'utilisateur RAM pour accéder aux données OSS.
yourAccessKeyID
access-key-secret
AccessKey secret de l'utilisateur RAM pour accéder aux données OSS.
Vous pouvez utiliser un AccessKey existant ou en créer un nouveau. Pour plus d'informations, consultez Créer un AccessKey.
ImportantPour réduire le risque de fuite d'un AccessKey, l'AccessKey secret n'est affiché qu'au moment de sa création et ne peut pas être récupéré ultérieurement. Veillez à conserver l'AccessKey secret de manière sécurisée.
yourAccessKeySecret
oss-file-path
Chemin de stockage de l'objet, généralement au format
oss://<bucket-name>/<path-to-file>.RemarqueLe paramètre
oss-file-pathprend en charge la correspondance floue avec des caractères génériques. Pour plus d'informations, consultez Utiliser des caractères génériques pour la correspondance floue des chemins de stockage dans OSS.oss://ck-test-oss/test.csv
file-format-name
Format de l'objet.
ImportantLa valeur doit correspondre à un format de fichier pris en charge par ClickHouse, en respectant la casse. Pour plus d'informations, consultez formats de fichiers pris en charge par ClickHouse.
CSV
Exemple :
CREATE TABLE oss_test_tb ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV'); -
Interrogez les données OSS.
SELECT * FROM oss_test_tb;Le résultat suivant est retourné :
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Méthode 2 : Fonction de table
Enterprise ou Community-compatible (22,8 ou ultérieur)
-
Connectez-vous à la base de données.
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition ou Enterprise Edition Clusters, puis cliquez sur l'ID du cluster cible.
Sur la page Cluster Information, cliquez sur Log On to Database dans le coin supérieur droit.
Dans la boîte de dialogue Connect to Instance, saisissez le compte et le mot de passe de la base de données, puis cliquez sur Log On.
-
Utilisez une fonction de table pour interroger les données.
La syntaxe est la suivante :
SELECT * FROM oss('https://<bucket-name>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');Les paramètres sont identiques à ceux utilisés pour la création d'une table externe OSS. Pour plus de détails, consultez Description des paramètres.
Exemple :
SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String')Le résultat suivant est retourné :
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Community-compatible (21,8 ou antérieur)
-
Connectez-vous à la base de données.
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition, puis cliquez sur l'ID du cluster cible.
Sur la page Cluster Information, cliquez sur Log On to Database dans le coin supérieur droit.
Dans la boîte de dialogue Connect to Instance, saisissez le compte et le mot de passe de la base de données, puis cliquez sur Log On.
-
Utilisez une fonction de table pour interroger les données.
La syntaxe est la suivante :
SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');Les paramètres sont identiques à ceux utilisés pour la création d'une table externe OSS. Pour plus de détails, consultez Description des paramètres.
Exemple :
SELECT * FROM oss('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');Le résultat suivant est retourné :
+--------------+---------------------+---------------+----------------+----------------------+ | id | user_name | age | city | access_url | +--------------+---------------------+---------------+----------------+----------------------+ | 1 | tick | 32 | shanghai | http://example.com | +--------------+---------------------+---------------+----------------+----------------------+ Returned rows: [1], Time elapsed: [183ms]
Exporter des données ClickHouse ou écrire des données dans OSS
Remarques d'utilisation
Enterprise Edition ou Community-compatible Edition 22,8 ou ultérieur
Lorsque vous exportez ou écrivez des données vers OSS, vous devez définir s3_truncate_on_insert=1 ou s3_create_new_file_on_insert=1. Si aucun de ces paramètres n'est défini ou si les deux sont définis sur 0, l'opération échoue lorsqu'un fichier existe déjà dans le chemin de destination.
-
s3_truncate_on_insert=1: ApsaraDB for ClickHouse vérifie si un fichier existe dans le chemin de destination.Si un fichier existe, ClickHouse écrase le fichier existant avec les nouvelles données.
Cette méthode convient aux exports ou écritures avec écrasement complet. Toutefois, faites preuve de prudence, car cette opération supprime les données d'origine.
-
s3_create_new_file_on_insert=1: ClickHouse vérifie si un fichier existe dans le chemin de destination.-
Si un fichier existe, ClickHouse crée un nouveau fichier dans le répertoire et y écrit les données. Le nouveau fichier est nommé selon le modèle suivant :
nom du fichier cible + numéro de séquence (commençant à 0 et incrémenté de 1) + nom du format de fichier.Par exemple, si le fichier cible est
test.csv, la première opération créetest0.csvet la seconde créetest1.csv. Cette approche est recommandée pour les exports ou écritures incrémentiels afin d'éviter d'écraser les données existantes.
-
Community-compatible Edition 21,8 ou antérieur
Lors de l'exportation ou de l'écriture de données, un seul fichier OSS est utilisé. Les nouvelles données écrasent le contenu du fichier original. Faites preuve de prudence.
Étape 1 : Se connecter à la base de données
Connectez-vous à la console ApsaraDB for ClickHouse.
Sur la page Clusters, cliquez sur l'onglet Clusters of Community-compatible Edition ou Enterprise Edition Clusters, puis cliquez sur l'ID du cluster cible.
Dans le coin supérieur droit de la page Cluster Information, cliquez sur Log On to Database.
Dans la boîte de dialogue Connect to Instance, saisissez le compte et le mot de passe de la base de données, puis cliquez sur Log On.
Étape 2 : (Facultatif) Préparer les données à exporter
Si vous devez préparer des exemples de données à exporter d'ApsaraDB for ClickHouse vers OSS, suivez ces étapes.
Si vous disposez déjà de données à exporter, ignorez cette étape.
-
Créez une table en fonction de l'édition de votre cluster.
Cet exemple crée une table dans un cluster Community-compatible Edition à réplica unique. Si votre cluster est un cluster à double réplica exécutant Enterprise Edition ou Community-compatible Edition, consultez Créer une table.
CREATE TABLE test_tb_local ON cluster default ( id UInt8, user_name String, age UInt16, city String, access_url String ) ENGINE = MergeTree() ORDER BY id; -
Insérez des exemples de données.
INSERT INTO test_tb_local VALUES (13, 'tick', 25, 'shanghai', 'http://example.com'); -
(Facultatif) Consultez les données.
Exécutez l'instruction suivante pour vérifier que les données ont bien été insérées.
SELECT * FROM test_tb_local;
Étape 3 : Créer une table externe OSS
Enterprise Edition ou Community-compatible Edition 22,8 ou ultérieur
La syntaxe est la suivante :
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('https://<bucket-name>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');
Le tableau suivant décrit les paramètres.
|
Paramètre |
Description |
Exemple |
|
table_name |
Nom de la table. |
oss_test_tb |
|
col_name1,col_name2 |
Noms des colonnes. |
user_name |
|
col_type1,col_type2 |
Types de données des colonnes. Important
Le schéma de la table externe OSS doit correspondre aux données présentes dans OSS. |
String |
|
bucket-name |
Nom du bucket OSS. |
ck-test-oss |
|
oss-endpoint |
Endpoint interne permettant d'accéder au bucket OSS depuis une instance ECS via un VPC. Pour plus d'informations, consultez Régions et endpoints. Important
Assurez-vous que le bucket OSS et votre cluster ApsaraDB for ClickHouse se trouvent dans la même région. |
oss-cn-hangzhou-internal.aliyuncs.com |
|
file-name |
Nom de l'objet dans le bucket OSS. |
test.csv |
|
access-key-id |
AccessKey ID de l'utilisateur RAM pour accéder aux données OSS. |
yourAccessKeyID |
|
access-key-secret |
AccessKey secret de l'utilisateur RAM pour accéder aux données OSS. Vous pouvez utiliser un AccessKey existant ou en créer un nouveau. Pour plus d'informations, consultez Créer un AccessKey. Important
Pour réduire le risque de fuite d'un AccessKey, l'AccessKey secret n'est affiché qu'au moment de sa création et ne peut pas être récupéré ultérieurement. Veillez à conserver l'AccessKey secret de manière sécurisée. |
yourAccessKeySecret |
|
file-format-name |
Format de l'objet. Important
La valeur doit correspondre à un format de fichier pris en charge par ClickHouse, en respectant la casse. Pour plus d'informations, consultez formats de fichiers pris en charge par ClickHouse. |
CSV |
Exemple :
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('http://ck-test-oss.oss-cn-hangzhou-internal.aliyuncs.com/test.csv', 'LTAI****************', 'yourAccessKeySecret','CSV')
Community-compatible Edition 21,8 ou antérieur
La syntaxe est la suivante :
CREATE TABLE <table_name> [ON cluster default]
(
'col_name1' col_type1,
'col_name2' col_type2,
...
)
ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');
Le tableau suivant décrit les paramètres.
|
Paramètre |
Description |
Exemple |
|
table_name |
Nom de la table. |
oss_test_tb |
|
col_name1,col_name2 |
Noms des colonnes. |
user_name |
|
col_type1,col_type2 |
Types de données des colonnes. Important
Le schéma de la table externe OSS doit correspondre aux données présentes dans OSS. |
String |
|
oss-endpoint |
Endpoint interne permettant d'accéder au bucket OSS depuis une instance ECS via un VPC. Pour plus d'informations, consultez Régions et endpoints. Important
Assurez-vous que le bucket OSS et votre cluster ApsaraDB for ClickHouse se trouvent dans la même région. |
oss-cn-hangzhou-internal.aliyuncs.com |
|
access-key-id |
AccessKey ID de l'utilisateur RAM pour accéder aux données OSS. |
yourAccessKeyID |
|
access-key-secret |
AccessKey secret de l'utilisateur RAM pour accéder aux données OSS. Vous pouvez utiliser un AccessKey existant ou en créer un nouveau. Pour plus d'informations, consultez Créer un AccessKey. Important
Pour réduire le risque de fuite d'un AccessKey, l'AccessKey secret n'est affiché qu'au moment de sa création et ne peut pas être récupéré ultérieurement. Veillez à conserver l'AccessKey secret de manière sécurisée. |
yourAccessKeySecret |
|
oss-file-path |
Chemin de stockage de l'objet, généralement au format Remarque
Le paramètre |
oss://ck-test-oss/test.csv |
|
file-format-name |
Format de l'objet. Important
La valeur doit correspondre à un format de fichier pris en charge par ClickHouse, en respectant la casse. Pour plus d'informations, consultez formats de fichiers pris en charge par ClickHouse. |
CSV |
Exemple :
CREATE TABLE oss_test_tb ON cluster default
(
id UInt8,
user_name String,
age UInt16,
city String,
access_url String
)
ENGINE = OSS('oss-cn-hangzhou-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://ck-test-oss/test.csv', 'CSV');
Étape 4 : Exporter ou écrire des données dans OSS
Utilisez une instruction INSERT INTO sur la table externe OSS pour exporter ou écrire des données dans OSS. Pour plus de détails sur la syntaxe, consultez INSERT INTO.
Exporter des données ClickHouse
Enterprise Edition ou Community-compatible Edition 22,8 ou ultérieur
-
Export avec écrasement complet (exporter des données vers OSS et écraser les données existantes).
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 SELECT * FROM test_tb_local; -
Export incrémentiel (exporter des données vers OSS sans écraser les données existantes).
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 SELECT * FROM test_tb_local;Cette opération crée un nouveau fichier dans le bucket OSS. Le nouveau fichier est nommé selon le modèle suivant :
nom du fichier cible + numéro de séquence (commençant à 0 et incrémenté de 1) + nom du format de fichier.Par exemple, si le nom du fichier cible spécifié lors de la création de la table externe OSS est
test.csv, le nouveau fichier sera nommétest0.csv. Si vous exécutez à nouveau l'opération, le nouveau fichier sera nommétest1.csv. Vous pouvez consulter le nouveau fichier via la console OSS.
Community-compatible Edition 21,8 ou antérieur
L'exportation de données ApsaraDB for ClickHouse vers OSS écrase les données existantes. Faites preuve de prudence.
INSERT INTO oss_test_tb SELECT * FROM test_tb_local;
Écrire des données
Enterprise Edition ou Community-compatible Edition 22,8 ou ultérieur
-
Écrire de nouvelles données dans OSS et écraser les données existantes.
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com'); -
Écrire de nouvelles données dans OSS sans écraser les données existantes.
INSERT INTO oss_test_tb SETTINGS s3_create_new_file_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');Cette opération crée un nouveau fichier dans le bucket OSS. Le nouveau fichier est nommé selon le modèle suivant :
nom du fichier cible + numéro de séquence (commençant à 0 et incrémenté de 1) + nom du format de fichier.Par exemple, si le nom du fichier cible spécifié lors de la création de la table externe OSS est
test.csv, le nouveau fichier sera nommétest0.csv. Si vous exécutez à nouveau l'opération, le nouveau fichier sera nommétest1.csv. Vous pouvez consulter le nouveau fichier via la console OSS.
Community-compatible Edition 21,8 ou antérieur
L'écriture de données depuis ApsaraDB for ClickHouse vers OSS écrase les données existantes. Faites preuve de prudence.
INSERT INTO oss_test_tb SETTINGS s3_truncate_on_insert = 1 VALUES (14, 'tick', 25, 'shanghai', 'http://example.com');
Opérations supplémentaires : Importer des données OSS dans ClickHouse
Si vous utilisez OSS comme stockage intermédiaire pour la migration de données, vous devez également importer les données d'OSS vers le cluster de destination. Pour plus d'informations, consultez Importer des données depuis OSS.