すべてのプロダクト
Search
ドキュメントセンター

E-MapReduce:OSS と ClickHouse 間でのデータのインポートおよびエクスポート

最終更新日:Aug 21, 2026

E-MapReduce (EMR) ClickHouse クラスターでは、S3 テーブルエンジンまたは S3 テーブル関数を使用して、OSS からのデータの読み取りと OSS への書き込みができます。このトピックでは、OSS から ClickHouse クラスターにデータをインポートする方法と、クラスターから OSS にデータをエクスポートする方法について説明します。

前提条件

  • OSS でバケットが作成済みであること。詳細については、「バケットの作成」をご参照ください。

  • ClickHouse クラスターが作成済みであること。詳細については、「ClickHouse クラスターの作成」をご参照ください。

OSS から ClickHouse へのデータのインポート

ステップ 1:ビジネス テーブルの作成

  1. SSH 経由で ClickHouse クラスターにログインします。詳細については、「クラスターへのログイン」をご参照ください。

  2. ClickHouse クライアントを起動します:

    clickhouse-client -h core-1-1 -m
    core-1-1 はログインしたコアノードの名前です。クラスターに複数のコアノードがある場合は、いずれか 1 つに接続してください。
  3. product という名前のデータベースと、ローカルのレプリケートされたテーブル product.orders および分散テーブル product.orders_all の 2 つのテーブルを作成します:

    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());
    {shard}{replica} は、EMR が ClickHouse クラスター用に自動生成するマクロです。

手順 2:データのインポート

S3 テーブルエンジンを使用したインポート

ClickHouse の S3 テーブルエンジンは、指定された OSS パスから特定の形式でデータを読み取ります。構文は次のとおりです:

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]);

パラメーター

説明

db

データベース名。

table_name

テーブル名。

name1/name2

カラム名。

type1/type2

カラムのデータ型。

path

OSS パス。

ClickHouse クラスターから OSS にアクセスするための内部エンドポイントを確認するには、「内部エンドポイントを使用して ECS インスタンスから OSS リソースにアクセスする」をご参照ください。

path パラメーターは、仮想ホスト形式とパス形式の 2 つの形式に対応しています。仮想ホスト形式の使用を推奨します。

path パラメーターでは、次のワイルドカードが使用できます:

  • *:スラッシュ (/) を除く任意の数の文字 (空文字列を含む) を表します。

  • ?:単一の文字を表します。

  • {str1,str2,...,strn}str1/str2/.../strn を表し、いずれかの文字列を意味します。

  • {N..M}:N から M までの範囲内の任意の数値を表します。N と M には、{001..099} などの先行ゼロを含めることができます。

    重要

    ワイルドカードは、テーブル作成時ではなく、SELECT 操作時に使用するファイルを決定します。そのため、OSS にデータを書き込む際にはワイルドカードを使用しないでください。

AccessKey ID

Alibaba Cloud の AccessKey ID。

AccessKey Secret

Alibaba Cloud の AccessKey Secret。

format

path パラメーターで指定されたオブジェクト (ファイル) の形式。CSV や XML などがあります。詳細については、「入出力データの形式」をご参照ください。

compression

圧縮タイプ。

このパラメーターは省略可能です。デフォルトでは、ClickHouse は拡張子から圧縮タイプを自動的に検出します。

クラスターの EMR のバージョンに応じて圧縮タイプを設定します。

  • EMR-3.x 系では、nonegzip/gzbrotli/bdeflate、または auto をサポートしています。

  • EMR-5.x 系では、nonegzip/gzbrotli/blzma(xz)auto、または zstd/zst をサポートしています。

  1. OSS からデータを読み取るテーブルを作成します。

    1. サンプルデータファイル orders.csv をダウンロードし、test という名前の OSS バケットのルートディレクトリにアップロードします。

    2. 次のコマンドを実行して、S3 テーブルエンジンを使用する OSS テーブルを作成します。

      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');
      説明

      サンプルデータパス http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv は、cn-beijing リージョンの test という名前のバケット内の orders.csv ファイルを表します。

  2. 次のコマンドを実行して、product.orders_all テーブルにデータをインポートします。

    INSERT INTO product.orders_all
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      oss.orders_oss;
  3. 次のコマンドを実行して、テーブル内のデータを表示し、データ整合性を検証します。

    • orders_all テーブルのデータを表示します。

      SELECT count(1) FROM product.orders_all;
    • orders_oss テーブルのデータを表示します。

      SELECT count(1) FROM oss.orders_oss;

S3 テーブル関数を使用したインポート

ClickHouse の S3 テーブル関数は、指定された OSS パスからデータを読み取り、定義された構造を持つテーブルを返します。構文は次のとおりです:

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

パラメーター

説明

path

OSS パス。

ClickHouse クラスターから OSS にアクセスするための内部エンドポイントを確認するには、「内部エンドポイントを使用して ECS インスタンスから OSS リソースにアクセスする」をご参照ください。

path パラメーターは、仮想ホスト形式とパス形式の 2 つの形式に対応しています。仮想ホスト形式の使用を推奨します。

path では、次のワイルドカードが使用できます:

  • *:スラッシュ (/) を除く任意の数の文字 (空文字列を含む) を表します。

  • ?:単一の文字を表します。

  • {str1,str2,...,strn} は、str1/str2/.../strn のいずれか 1 つの文字列を表します。

  • {N..M}:N から M までの範囲内の任意の数値を表します。N と M には、{001..099} などの先行ゼロを含めることができます。

    重要

    ワイルドカードは、テーブル作成時ではなく、SELECT 操作時に使用するファイルを決定します。そのため、OSS にデータを書き込む際にはワイルドカードを使用しないでください。

AccessKey ID

Alibaba Cloud の AccessKey ID。

AccessKey Secret

Alibaba Cloud の AccessKey Secret。

format

path パラメーターで指定されたオブジェクト (ファイル) の形式。CSV や XML などがあります。詳細については、「入出力データの形式」をご参照ください。

structure

テーブル構造。カラム名とデータ型を定義します。例: column1 UInt32, column2 String

compression

圧縮タイプ。

このパラメーターは省略可能です。デフォルトでは、ClickHouse は拡張子から圧縮タイプを自動的に検出します。

クラスターの EMR のバージョンに応じて圧縮タイプを設定します。

  • EMR-3.x 系では、nonegzip/gzbrotli/bdeflate、または auto をサポートしています。

  • EMR-5.x 系では、nonegzip/gzbrotli/blzma(xz)auto、または zstd/zst をサポートしています。

  1. S3 テーブル関数を使用して、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. 次のコマンドを実行して、テーブル内のデータを表示し、データ整合性を検証します。

    • orders_all テーブルのデータを表示します。

      SELECT count(1) FROM product.orders_all;
    • orders_oss テーブルのデータを表示します。

      SELECT count(1) FROM oss.orders_oss;

ClickHouse から OSS へのデータのエクスポート

手順 1:ビジネス テーブルの作成

データをエクスポートするためのビジネス テーブルは、インポート用のテーブルと同じスキーマを使用します。テーブルを作成するには、「手順 1:ビジネス テーブルの作成」をご参照ください。

手順 2:データの準備

  1. エクスポート用のデータを準備するには、次のコマンドを実行してデータを 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. (オプション) エクスポートモードを設定します。EMR-5.8.0 以降、または EMR-3.45.0 以降では、指定されたパスにファイルが既に存在する場合の処理方法として、書き込みモードを設定できます。

    増分エクスポート

    ファイルが既に存在する場合、ClickHouse は同じディレクトリに新しいファイルを作成し、そのファイルにデータを書き込みます。

    set s3_create_new_file_on_insert=1

    上書きエクスポート

    ファイルが既に存在する場合、ClickHouse は既存のデータを上書きします。この設定は慎重に使用してください。

    set s3_truncate_on_insert=1

手順 3:データのエクスポート

S3 テーブルエンジンを使用したエクスポート

  1. 次のコマンドを実行して、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. 次のコマンドを実行して、テーブルにデータを書き込みます。

    -- ビジネス テーブルが product.orders_all であると仮定します
    INSERT INTO oss.orders_oss
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      product.orders_all;
    説明

    ClickHouse がデータをエクスポートする際、指定されたパスにファイルを作成し、そのファイルにデータを書き込みます。デフォルトでは、ファイルが既に存在する場合、エクスポートに失敗します。EMR-5.8.0 以降、または EMR-3.45.0 以降では、パラメーターを設定してこの動作を変更できます。

  3. OSS コンソールでデータを表示します。

S3 テーブル関数を使用したエクスポート

  1. 次のコマンドを実行して、データをエクスポートします。

    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;
    説明

    ClickHouse がデータをエクスポートする際、指定されたパスにファイルを作成し、そのファイルにデータを書き込みます。デフォルトでは、ファイルが既に存在する場合、エクスポートに失敗します。EMR-5.8.0 以降、または EMR-3.45.0 以降では、パラメーターを設定してこの動作を変更できます。

  2. OSS コンソールでデータを表示します。

OSS 関連の設定

プロファイル

  1. サポートされるプロファイル

    OSS へのマルチパートアップロードを使用する場合、s3_min_upload_part_size パラメーターで各パートの最小サイズを設定します。デフォルトは 512 MB です。値は UInt64 整数である必要があります。

  2. 設定方法

    • 単一の SQL ステートメントの場合は、次のようにパラメーターを設定します:

      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • 単一のセッションの場合は、次のようにパラメーターを設定します:

      SET s3_min_upload_part_size=1073741824;
      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      ;
    • 特定のテーブルの場合は、次のようにパラメーターを設定します:

      CREATE TABLE OSS_TABLE
      (
        ...
      ) ENGINE = s3(...)
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • 特定のユーザーの場合は、次のようにパラメーターを設定します:

      EMR コンソールの ClickHouse サービスの Configure ページで [server-users] タブをクリックし、[users.<YourUserName>.s3_min_upload_part_size] パラメーターを追加して、その値を 1073741824 に設定します。

設定

EMR の ClickHouse は、次の OSS 設定パラメーターに対応しています。例:

<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>

次の表で各パラメーターについて説明します。

パラメーター

説明

endpoint-name

エンドポイントの名前。

endpoint

OSS へのアクセスに使用するドメイン名。詳細については、「OSS ドメイン名」をご参照ください。

access_key_id

Alibaba Cloud の AccessKey ID。

secret_access_key

Alibaba Cloud の AccessKey Secret。

EMR コンソールの ClickHouse サービスのConfigureページで、[server-config] タブをクリックして、次の 2 つの方法でカスタム設定を追加することもできます。

方法

操作

方法 1

パラメーター oss.<endpoint-name>.endpointoss.<endpoint-name>.access_key_id、および oss.<endpoint-name>.secret_access_key とそれぞれに対応する値を追加します。

説明

<endpoint-name> をエンドポイントの名前に置き換えてください。

方法 2

[oss] という名前のパラメーターを追加し、その値を次の設定に設定します。

<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>
説明

プレースホルダーをご自身の値に置き換えてください。

設定が完了したら、次の簡略化された構文で OSS テーブルを作成するか、S3 テーブル関数を使用できます:

  • OSS テーブル

    CREATE TABLE OSS_TABLE
    (
      column1 UInt32,
      column2 String
      ...
    )
    ENGINE = S3(path, format, [compression]);
  • S3 テーブル関数

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