All Products
Search
Document Center

E-MapReduce:Impor dan ekspor data antara OSS dan ClickHouse

Last Updated:Aug 21, 2026

Anda dapat membaca dari dan menulis ke OSS pada kluster EMR ClickHouse menggunakan mesin tabel S3 atau fungsi tabel S3. Topik ini menjelaskan cara mengimpor data dari OSS ke kluster ClickHouse dan mengekspor data dari kluster tersebut ke OSS.

Prasyarat

Impor data dari OSS ke ClickHouse

Langkah 1: Buat tabel bisnis

  1. Login ke kluster ClickHouse menggunakan SSH. Untuk informasi selengkapnya, lihat Log on to a cluster.

  2. Jalankan perintah berikut untuk memulai client ClickHouse.

    clickhouse-client -h core-1-1 -m
    Catatan

    Contoh ini login ke node core-1-1. Jika kluster Anda memiliki beberapa node core, Anda dapat login ke salah satunya.

  3. Jalankan perintah berikut untuk membuat database product dan tabel bisnis orders dalam database 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());
    Catatan

    E-MapReduce secara otomatis menghasilkan makro {shard} dan {replica} untuk kluster ClickHouse, yang dapat Anda gunakan langsung.

Langkah 2: Impor data

Impor dengan mesin tabel S3

Mesin tabel S3 ClickHouse membaca data dalam format tertentu dari path OSS yang ditentukan. Sintaksnya adalah sebagai berikut:

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

Parameter

Deskripsi

db

Nama database.

table_name

Nama tabel.

name1/name2

Nama kolom.

type1/type2

Tipe data kolom.

path

Path OSS.

Untuk menemukan titik akhir internal guna mengakses OSS dari kluster ClickHouse Anda, lihat Mengakses sumber daya OSS dari instance ECS menggunakan titik akhir internal.

Parameter path mendukung dua gaya: virtual-hosted style dan path-style. Kami menyarankan Anda menggunakan gaya virtual-hosted.

Parameter path mendukung wildcard berikut:

  • *: Mewakili sejumlah karakter apa pun kecuali garis miring maju (/), termasuk string kosong.

  • ?: Mewakili satu karakter.

  • {str1,str2,...,strn} merepresentasikan str1/str2/.../strn, artinya salah satu dari string tersebut.

  • {N..M}: Mewakili angka apa pun dalam rentang dari N hingga M. N dan M dapat menyertakan nol di depan, seperti {001..099}.

    Penting

    Wildcard menentukan file mana yang digunakan selama operasi SELECT, bukan saat pembuatan tabel. Oleh karena itu, jangan gunakan wildcard saat menulis data ke OSS.

AccessKey ID

ID AccessKey Alibaba Cloud Anda.

AccessKey Secret

Secret AccessKey Alibaba Cloud Anda.

format

Format objek (file) yang ditentukan oleh parameter path. Contohnya termasuk CSV dan XML. Untuk informasi selengkapnya, lihat Formats for Input and Output Data.

compression

Jenis kompresi.

Parameter ini opsional. Secara default, ClickHouse secara otomatis mendeteksi jenis kompresi dari ekstensi file.

Tentukan jenis kompresi berdasarkan versi EMR kluster Anda:

  • Versi EMR-3.x mendukung none, gzip/gz, brotli/b, deflate, atau auto.

  • Seri EMR 5.x: mendukung none, gzip/gz, brotli/b, lzma(xz), auto, atau zstd/zst.

  1. Buat tabel untuk membaca data dari OSS.

    1. Unduh file data sampel orders.csv dan unggah ke direktori root bucket OSS bernama test.

    2. Jalankan perintah berikut untuk membuat tabel OSS yang menggunakan mesin tabel 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');
      Catatan

      Path data contoh http://test.oss-cn-beijing-internal.aliyuncs.com/orders.csv merepresentasikan file orders.csv dalam bucket bernama test di wilayah cn-beijing.

  2. Jalankan perintah berikut untuk mengimpor data ke tabel product.orders_all.

    INSERT INTO product.orders_all
    SELECT
      uid,
      date,
      skuId,
      order_revenue
    FROM
      oss.orders_oss;
  3. Jalankan perintah berikut untuk melihat data dalam tabel dan memverifikasi konsistensi data:

    • Lihat data dalam tabel orders_all.

      SELECT count(1) FROM product.orders_all;
    • Lihat data dalam tabel orders_oss.

      SELECT count(1) FROM oss.orders_oss;

Impor dengan fungsi tabel S3

Fungsi tabel S3 ClickHouse membaca data dari path OSS yang ditentukan dan mengembalikan tabel dengan struktur yang telah didefinisikan. Sintaksnya adalah sebagai berikut:

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

Parameter

Deskripsi

path

Path OSS.

Untuk menemukan titik akhir internal untuk mengakses OSS dari kluster ClickHouse Anda, lihat Access OSS resources from an ECS instance by using an internal endpoint.

Parameter path mendukung dua gaya: virtual hosted style dan path style. Kami menyarankan Anda menggunakan gaya virtual hosted.

path mendukung wildcard berikut:

  • *: Mewakili sejumlah karakter apa pun kecuali garis miring maju (/), termasuk string kosong.

  • ?: Mewakili satu karakter.

  • {str1,str2,...,strn} merepresentasikan salah satu string dalam str1/str2/.../strn.

  • {N..M}: Mewakili angka apa pun dalam rentang dari N hingga M. N dan M dapat menyertakan nol di depan, seperti {001..099}.

    Penting

    Wildcard menentukan file mana yang digunakan selama operasi SELECT, bukan saat pembuatan tabel. Oleh karena itu, jangan gunakan wildcard saat menulis data ke OSS.

AccessKey ID

ID AccessKey Alibaba Cloud Anda.

AccessKey Secret

Secret AccessKey Alibaba Cloud Anda.

format

Format objek (file) yang ditentukan oleh parameter path, seperti CSV dan XML. Untuk informasi selengkapnya, lihat Formats for Input and Output Data.

structure

Struktur tabel, yang mendefinisikan nama kolom dan tipe datanya. Contoh: column1 UInt32, column2 String.

compression

Jenis kompresi.

Parameter ini opsional. Secara default, ClickHouse secara otomatis mendeteksi jenis kompresi dari ekstensi file.

Tentukan jenis kompresi berdasarkan versi EMR kluster Anda:

  • Versi EMR-3.x mendukung none, gzip/gz, brotli/b, deflate, atau auto.

  • Versi EMR 5.x: Mendukung none, gzip/gz, brotli/b, lzma(xz), auto, atau zstd/zst.

  1. Gunakan fungsi tabel S3 untuk mengimpor data ke kluster 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. Jalankan perintah berikut untuk melihat data dalam tabel dan memverifikasi konsistensi data:

    • Lihat data dalam tabel orders_all.

      SELECT count(1) FROM product.orders_all;
    • Lihat data dalam tabel orders_oss.

      SELECT count(1) FROM oss.orders_oss;

Ekspor data dari ClickHouse ke OSS

Langkah 1: Buat tabel bisnis

Tabel bisnis untuk mengekspor data menggunakan skema yang sama seperti saat mengimpor. Untuk membuat tabel, lihat Step 1: Create a business table.

Langkah 2: Siapkan data

  1. Untuk menyiapkan data ekspor, jalankan perintah berikut untuk memasukkannya ke tabel bisnis 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. (Opsional) Konfigurasikan mode ekspor. Untuk EMR-5.8.0 dan versi lebih baru atau EMR-3.45.0 dan versi lebih baru, Anda dapat mengonfigurasi mode penulisan untuk menangani kasus ketika file sudah ada di path yang ditentukan.

    Ekspor inkremental

    Jika file sudah ada, ClickHouse membuat file baru di direktori yang sama dan menulis data ke dalamnya.

    set s3_create_new_file_on_insert=1

    Ekspor timpa

    Jika file sudah ada, ClickHouse akan menimpa data yang ada. Gunakan pengaturan ini dengan hati-hati.

    set s3_truncate_on_insert=1

Langkah 3: Ekspor data

Ekspor dengan mesin tabel S3

  1. Jalankan perintah berikut untuk membuat tabel 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. Jalankan perintah berikut untuk menulis data ke tabel.

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

    Ketika ClickHouse mengekspor data, file dibuat di path yang ditentukan dan data ditulis ke dalamnya. Secara default, ekspor gagal jika file sudah ada. Pada EMR-5.8.0, EMR-3.45.0, dan versi lebih baru, Anda dapat mengonfigurasi parameter untuk mengubah perilaku ini.

  3. Lihat data di OSS console.

Ekspor dengan fungsi tabel S3

  1. Jalankan perintah berikut untuk mengekspor data.

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

    Ketika ClickHouse mengekspor data, file dibuat di path yang ditentukan dan data ditulis ke dalamnya. Secara default, ekspor gagal jika file sudah ada. Pada EMR-5.8.0, EMR-3.45.0, dan versi lebih baru, Anda dapat mengonfigurasi parameter untuk mengubah perilaku ini.

  2. Lihat data di OSS console.

Konfigurasi terkait OSS

Profil

  1. Profil yang didukung

    Saat menggunakan unggah multi-bagian ke OSS, parameter s3_min_upload_part_size menetapkan ukuran minimum untuk setiap bagian, dengan nilai default 512 MB. Nilainya harus berupa bilangan bulat UInt64.

  2. Metode konfigurasi

    • Untuk satu pernyataan SQL, konfigurasikan parameter sebagai berikut:

      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • Untuk satu sesi, konfigurasikan parameter sebagai berikut:

      SET s3_min_upload_part_size=1073741824;
      INSERT INTO OSS_TABLE
      SELECT
        ...
      FROM
        ...
      ;
    • Untuk tabel tertentu, konfigurasikan parameter sebagai berikut:

      CREATE TABLE OSS_TABLE
      (
        ...
      ) ENGINE = s3(...)
      SETTINGS
        s3_min_upload_part_size=1073741824;
    • Untuk pengguna tertentu, konfigurasikan parameter sebagai berikut:

      Pada halaman Configure layanan ClickHouse di Konsol EMR, klik tab server-users. Tambahkan parameter users.<YourUserName>.s3_min_upload_part_size dan atur nilainya menjadi 1073741824.

Konfigurasi

ClickHouse pada EMR mendukung parameter konfigurasi OSS berikut. Contohnya:

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Deskripsi

endpoint-name

Nama titik akhir.

endpoint

Nama domain yang digunakan untuk mengakses OSS. Untuk informasi selengkapnya, lihat OSS domain names.

access_key_id

ID AccessKey Alibaba Cloud Anda.

secret_access_key

Secret AccessKey Alibaba Cloud Anda.

Pada halaman Configure layanan ClickHouse di Konsol EMR, Anda juga dapat mengklik tab server-config untuk menambahkan konfigurasi kustom dengan dua cara berikut.

Metode

Tindakan

Metode 1

Tambahkan parameter oss.<endpoint-name>.endpoint, oss.<endpoint-name>.access_key_id, dan oss.<endpoint-name>.secret_access_key beserta nilai-nilainya.

Catatan

Ganti <endpoint-name> dengan nama titik akhir.

Metode 2

Tambahkan parameter bernama oss dan atur nilainya ke konfigurasi berikut.

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

Ganti nilai placeholder dengan milik Anda sendiri.

Setelah menyelesaikan konfigurasi, Anda dapat membuat tabel OSS atau menggunakan fungsi tabel S3 dengan sintaks yang disederhanakan berikut:

  • Tabel OSS

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

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