Tous les produits
Search
Centre de documentation

E-MapReduce:Importer et exporter des données entre OSS et ClickHouse

Dernière mise à jour :Aug 20, 2026

Vous pouvez lire et écrire des données dans OSS sur un cluster EMR ClickHouse en utilisant le moteur de table S3 ou une fonction de table S3. Cette rubrique explique comment importer des données depuis OSS vers un cluster ClickHouse et exporter des données du cluster vers OSS.

Prérequis

Importer des données depuis OSS vers ClickHouse

Étape 1 : Créer une table métier

  1. Connectez-vous au cluster ClickHouse via SSH. Pour plus d'informations, consultez la page Se connecter à un cluster.

  2. Exécutez la commande suivante pour démarrer le client ClickHouse.

    clickhouse-client -h core-1-1 -m
    Remarque

    Cet exemple se connecte au nœud core-1-1. Si votre cluster comporte plusieurs nœuds core, vous pouvez vous connecter à l'un d'entre eux.

  3. Exécutez les commandes suivantes pour créer la base de données product et la table métier orders dans la base de données product.

    CREATE DATABASE IF NOT EXISTS product ON CLUSTER cluster_emr;
    CREATE TABLE IF NOT EXISTS product.orders ON CLUSTER cluster_emr
    (
        `uid` UInt32,
        `date` DateTime,
        `skuId` UInt32,
        `order_revenue` UInt32
    )
    Engine = ReplicatedMergeTree('/cluster_emr/product/orders/{shard}', '{replica}')
    PARTITION BY toYYYYMMDD(date)
    ORDER BY toYYYYMMDD(date);
    CREATE TABLE IF NOT EXISTS product.orders_all ON CLUSTER cluster_emr
    (
        `uid` UInt32,
        `date` DateTime,
        `skuId` UInt32,
        `order_revenue` UInt32
    )
    Engine = Distributed(cluster_emr, product, orders, rand());
    Remarque

    E-MapReduce génère automatiquement les macros {shard} et {replica} pour le cluster ClickHouse, que vous pouvez utiliser directement.

Étape 2 : Importer les données

Importation avec le moteur de table S3

Le moteur de table S3 de ClickHouse lit les données dans un format spécifique à partir d'un chemin OSS donné. La syntaxe est la suivante :

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
  name1 [type1] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|ALIAS expr1] [compression_codec] [TTL expr1],
  name2 [type2] [NULL|NOT NULL] [DEFAULT|MATERIALIZED|ALIAS expr2] [compression_codec] [TTL expr2],
  ...
)
ENGINE = S3(path, [access_key_id, access_key_secret,] format, [compression]);

Paramètre

Description

db

Nom de la base de données.

table_name

Nom de la table.

name1/name2

Nom de la colonne.

type1/type2

Type de données de la colonne.

path

Chemin OSS.

Pour trouver le point de terminaison interne permettant d'accéder à OSS depuis votre cluster ClickHouse, consultez la page Accéder aux ressources OSS depuis une instance ECS à l'aide d'un point de terminaison interne.

Le paramètre path prend en charge deux styles : le style virtual-hosted et le style path-style. Nous vous recommandons d'utiliser le style virtual-hosted.

Le paramètre path prend en charge les caractères génériques suivants :

  • * : représente n'importe quel nombre de caractères, à l'exception de la barre oblique (/), y compris une chaîne vide.

  • ? : représente un seul caractère.

  • {str1,str2,...,strn} représente str1/str2/.../strn, c'est-à-dire l'une des chaînes.

  • {N..M} : représente n'importe quel nombre dans la plage allant de N à M. N et M peuvent inclure des zéros non significatifs, par exemple {001..099}.

    Important

    Les caractères génériques déterminent quels fichiers sont utilisés lors d'une opération SELECT, et non lors de la création de la table. Par conséquent, n'utilisez pas de caractères génériques lors de l'écriture de données dans OSS.

AccessKey ID

Votre AccessKey ID Alibaba Cloud.

AccessKey Secret

Votre AccessKey Secret Alibaba Cloud.

format

Format de l'objet (fichier) spécifié par le paramètre path. Les exemples incluent CSV et XML. Pour plus d'informations, consultez la page Formats for Input and Output Data.

compression

Type de compression.

Ce paramètre est facultatif. Par défaut, ClickHouse détecte automatiquement le type de compression à partir de l'extension du fichier.

Définissez le type de compression en fonction de la version EMR de votre cluster :

  • Les versions EMR-3.x prennent en charge none, gzip/gz, brotli/b, deflate ou auto.

  • Série EMR 5.x : prend en charge none, gzip/gz, brotli/b, lzma(xz), auto ou zstd/zst.

  1. Créez une table pour lire les données depuis OSS.

    1. Téléchargez le fichier de données d'exemple orders.csv et téléversez-le dans le répertoire racine d'un compartiment OSS nommé test.

    2. Exécutez la commande suivante pour créer une table OSS utilisant le moteur de table S3.

      CREATE DATABASE IF NOT EXISTS oss ON CLUSTER cluster_emr;
      CREATE TABLE oss.orders_oss
      (
        uid UInt32,
        date DateTime,
        skuId UInt32,
        order_revenue UInt32
      ) ENGINE = S3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<access_key_id>', '<access_key_secret>', 'CSV');
      Remarque

      Le chemin de données d'exemple http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv représente le fichier orders.csv dans un compartiment nommé test dans la région cn-beijing.

  2. Exécutez la commande suivante pour importer les données dans la table product.orders_all.

    INSERT INTO product.orders_all
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      oss.orders_oss;
  3. Exécutez les commandes suivantes pour afficher les données dans les tables et vérifier la cohérence des données :

    • Affichez les données de la table orders_all.

      SELECT count(1) FROM product.orders_all;
    • Affichez les données de la table orders_oss.

      SELECT count(1) FROM oss.orders_oss;

Importation avec une fonction de table S3

La fonction de table S3 de ClickHouse lit les données à partir d'un chemin OSS spécifié et renvoie une table avec une structure définie. La syntaxe est la suivante :

s3(path, [access_key_id, access_key_secret,] format, structure, [compression])

Paramètre

Description

path

Chemin OSS.

Pour trouver le point de terminaison interne permettant d'accéder à OSS depuis votre cluster ClickHouse, consultez la page Accéder aux ressources OSS depuis une instance ECS à l'aide d'un point de terminaison interne.

Le paramètre path prend en charge deux styles : le style virtual hosted et le style path. Nous vous recommandons d'utiliser le style virtual hosted.

Le paramètre path prend en charge les caractères génériques suivants :

  • * : représente n'importe quel nombre de caractères, à l'exception de la barre oblique (/), y compris une chaîne vide.

  • ? : représente un seul caractère.

  • {str1,str2,...,strn} représente l'une des chaînes dans str1/str2/.../strn.

  • {N..M} : représente n'importe quel nombre dans la plage allant de N à M. N et M peuvent inclure des zéros non significatifs, par exemple {001..099}.

    Important

    Les caractères génériques déterminent quels fichiers sont utilisés lors d'une opération SELECT, et non lors de la création de la table. Par conséquent, n'utilisez pas de caractères génériques lors de l'écriture de données dans OSS.

AccessKey ID

Votre AccessKey ID Alibaba Cloud.

AccessKey Secret

Votre AccessKey Secret Alibaba Cloud.

format

Format de l'objet (fichier) spécifié par le paramètre path, tel que CSV et XML. Pour plus d'informations, consultez la page Formats for Input and Output Data.

structure

Structure de la table, qui définit les noms des colonnes et les types de données. Exemple : column1 UInt32, column2 String.

compression

Type de compression.

Ce paramètre est facultatif. Par défaut, ClickHouse détecte automatiquement le type de compression à partir de l'extension du fichier.

Définissez le type de compression en fonction de la version EMR de votre cluster :

  • Les versions EMR-3.x prennent en charge none, gzip/gz, brotli/b, deflate ou auto.

  • Versions EMR 5.x : prennent en charge none, gzip/gz, brotli/b, lzma(xz), auto ou zstd/zst.

  1. Utilisez la fonction de table S3 pour importer des données dans le cluster ClickHouse.

    INSERT INTO product.orders_all
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      s3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv',
          '<your-access-key>',
          '<your-access-secret>',
          'CSV',
          'uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32');
  2. Exécutez les commandes suivantes pour afficher les données dans les tables et vérifier la cohérence des données :

    • Affichez les données de la table orders_all.

      SELECT count(1) FROM product.orders_all;
    • Affichez les données de la table orders_oss.

      SELECT count(1) FROM oss.orders_oss;

Exporter des données depuis ClickHouse vers OSS

Étape 1 : Créer une table métier

La table métier destinée à l'exportation des données utilise le même schéma que celle utilisée pour l'importation. Pour créer la table, consultez l'étape Étape 1 : Créer une table métier.

Étape 2 : Préparer les données

  1. Pour préparer les données à exporter, exécutez la commande suivante afin de les insérer dans la table métier product.orders_all.

    INSERT INTO product.orders_all VALUES 
      (60333391,'2021-08-04 11:26:01',49358700,89) 
      (38826285,'2021-08-03 10:47:29',25166907,27) 
      (10793515,'2021-07-31 02:10:31',95584454,68) 
      (70246093,'2021-08-01 00:00:08',82355887,97) 
      (70149691,'2021-08-02 12:35:45',68748652,1)  
      (87307646,'2021-08-03 19:45:23',16898681,71) 
      (61694574,'2021-08-04 23:23:32',79494853,35) 
      (61337789,'2021-08-02 07:10:42',23792355,55) 
      (66879038,'2021-08-01 16:13:19',95820038,89);
  2. (Facultatif) Configurez le mode d'exportation. Pour les versions EMR-5.8.0 et ultérieures ou EMR-3.45.0 et ultérieures, vous pouvez configurer le mode d'écriture pour gérer les cas où un fichier existe déjà au chemin spécifié.

    Exportation incrémentielle

    Si le fichier existe déjà, ClickHouse crée un nouveau fichier dans le même répertoire et y écrit les données.

    set s3_create_new_file_on_insert=1

    Exportation par écrasement

    Si le fichier existe déjà, ClickHouse écrase les données existantes. Utilisez ce paramètre avec précaution.

    set s3_truncate_on_insert=1

Étape 3 : Exporter les données

Exportation avec le moteur de table S3

  1. Exécutez la commande suivante pour créer une table S3.

    CREATE TABLE oss.orders_oss
    (
      uid UInt32,
      date DateTime,
      skuId UInt32,
      order_revenue UInt32
    ) ENGINE = S3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv', '<access_key_id>', '<access_key_secret>', 'CSV');
  2. Exécutez la commande suivante pour écrire les données dans la table.

    -- Assume the business table is product.orders_all
    INSERT INTO oss.orders_oss
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      product.orders_all;
    Remarque

    Lorsque ClickHouse exporte des données, il crée un fichier au chemin spécifié et y écrit les données. Par défaut, l'exportation échoue si le fichier existe déjà. Sur les versions EMR-5.8.0, EMR-3.45.0 et ultérieures, vous pouvez configurer les paramètres pour modifier ce comportement.

  3. Consultez les données dans la console OSS.

Exportation avec une fonction de table S3

  1. Exécutez la commande suivante pour exporter les données.

    INSERT INTO FUNCTION
    s3('http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv',
          '<your-access-key>',
          '<your-access-secret>',
          'CSV',
          'uid UInt32, date DateTime, skuId UInt32, order_revenue UInt32')
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      product.orders_all;
    Remarque

    Lorsque ClickHouse exporte des données, il crée un fichier au chemin spécifié et y écrit les données. Par défaut, l'exportation échoue si le fichier existe déjà. Sur les versions EMR-5.8.0, EMR-3.45.0 et ultérieures, vous pouvez configurer les paramètres pour modifier ce comportement.

  2. Consultez les données dans la console OSS.

Configurations liées à OSS

Profil

  1. Profils pris en charge

    Lors de l'utilisation du téléversement multipartie vers OSS, le paramètre s3_min_upload_part_size définit la taille minimale de chaque partie, avec une valeur par défaut de 512 Mo. La valeur doit être un entier UInt64.

  2. Méthodes de configuration

    • Pour une seule instruction SQL, configurez le paramètre comme suit :

      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • Pour une seule session, configurez le paramètre comme suit :

      SET s3_min_upload_part_size=1073741824;
      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      ;
    • Pour une table spécifique, configurez le paramètre comme suit :

      CREATE TABLE OSS_TABLE
      (
        ...
      ) ENGINE = s3(...)
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • Pour un utilisateur spécifique, configurez le paramètre comme suit :

      Sur la page Configure du service ClickHouse dans la console EMR, cliquez sur l'onglet server-users. Ajoutez le paramètre users.<YourUserName>.s3_min_upload_part_size et définissez sa valeur sur 1073741824.

Configuration

ClickHouse sur EMR prend en charge les paramètres de configuration OSS suivants. Par exemple :

<s3>
    <endpoint-name>
        <endpoint>https://oss-cn-beijing-internal.aliyuncs.com/bucket</endpoint>
        <access_key_id>ACCESS_KEY_ID</access_key_id>
        <secret_access_key>ACCESS_KEY_SECRET</secret_access_key>
    </endpoint-name>
</s3>

Le tableau suivant décrit les paramètres.

Paramètre

Description

endpoint-name

Nom du point de terminaison.

endpoint

Nom de domaine utilisé pour accéder à OSS. Pour plus d'informations, consultez la page Noms de domaine OSS.

access_key_id

Votre AccessKey ID Alibaba Cloud.

secret_access_key

Votre AccessKey Secret Alibaba Cloud.

Sur la page Configure du service ClickHouse dans la console EMR, vous pouvez également cliquer sur l'onglet server-config pour ajouter des configurations personnalisées de deux manières.

Méthode

Actions

Méthode 1

Ajoutez les paramètres oss.<endpoint-name>.endpoint, oss.<endpoint-name>.access_key_id et oss.<endpoint-name>.secret_access_key ainsi que leurs valeurs correspondantes.

Remarque

Remplacez <endpoint-name> par le nom du point de terminaison.

Méthode 2

Ajoutez un paramètre nommé oss et définissez sa valeur sur la configuration suivante.

<endpoint-name>
  <endpoint>https://oss-cn-beijing-internal.aliyuncs.com/bucket</endpoint>
  <access_key_id>ACCESS_KEY_ID</access_key_id>
  <secret_access_key>ACCESS_KEY_SECRET</secret_access_key>
</endpoint-name>
Remarque

Remplacez les valeurs d'espace réservé par les vôtres.

Une fois la configuration terminée, vous pouvez créer une table OSS ou utiliser une fonction de table S3 avec la syntaxe simplifiée suivante :

  • Table OSS

    CREATE TABLE OSS_TABLE
    (
      column1 UInt32,
      column2 String
      ...
    )
    ENGINE = S3(path, format, [compression]);
  • Fonction de table S3

    s3(path, format, structure, [compression]);