全部产品
Search
文档中心

ApsaraDB for ClickHouse:Impor dari OSS

更新时间:Mar 10, 2026

Anda dapat mengimpor data dari Object Storage Service (OSS) ke ApsaraDB for ClickHouse menggunakan mesin tabel atau fungsi tabel, memungkinkan operasi seperti kueri log, analisis, dan pemrosesan. Topik ini menjelaskan cara mengimpor data dari OSS ke ApsaraDB for ClickHouse.

Prasyarat

  • Layanan OSS telah diaktifkan. Untuk informasi selengkapnya, lihat Aktifkan OSS.

  • Sebuah bucket telah dibuat. Bucket tersebut harus berada di wilayah yang sama dengan kluster ApsaraDB for ClickHouse. Untuk informasi selengkapnya, lihat Buat bucket.

  • Akun yang digunakan untuk mengakses OSS memiliki izin baca pada objek OSS. Untuk informasi selengkapnya, lihat Ikhtisar izin dan kontrol akses.

Persiapan data

Simpan data uji berikut sebagai file bernama test.csv dan unggah file tersebut ke OSS. ApsaraDB for ClickHouse menggunakan koma (,) sebagai pemisah kolom default untuk impor data. Untuk informasi selengkapnya tentang cara mengunggah file, lihat Unggah file.

1,yang,32,shanghai,http://example1.com
2,wang,22,beijing,http://example2.com
3,xiao,23,shenzhen,http://example3.com
4,jess,45,hangzhou,http://example4.com
5,jack,14,shanghai,http://example5.com
6,tomy,25,hangzhou,http://example6.com
7,lucy,45,shanghai,http://example7.com
8,tengyin,26,shanghai,http://example8.com
9,wangli,27,shenzhen,http://example9.com
10,xiaohua,37,shanghai,http://example10.com

Prosedur

  1. Sambungkan ke kluster ApsaraDB for ClickHouse. Untuk informasi selengkapnya, lihat Sambungkan ke kluster.

  2. Buat tabel lokal bernama oss_test_tbl_local.

    Penting
    • Skema tabel ApsaraDB for ClickHouse harus sesuai dengan skema tabel eksternal OSS dan kompatibel dengan format data di OSS. Perhatikan khusus bidang yang dapat bernilai null untuk mencegah pengecualian kluster akibat kegagalan penguraian data.

    • Pilih pernyataan CREATE TABLE yang sesuai berdasarkan konfigurasi replika kluster Anda. Anda dapat melihat konfigurasi replika di bagian Cluster Properties pada halaman Cluster Information di Konsol.

    • Pilih mesin tabel berdasarkan kebutuhan Anda. Untuk informasi selengkapnya tentang mesin tabel, lihat Mesin tabel.

    Kluster single-replica

    CREATE TABLE oss_test_tbl_local ON CLUSTER default
    (
    id UInt8,
    user_name String,
    age UInt16,
    city String,
    access_url String
    )
    ENGINE = MergeTree()
    ORDER BY id;

    Kluster dual-replica

    CREATE TABLE oss_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;
  3. (Opsional) Buat tabel terdistribusi bernama oss_test_tbl_distributed.

    Catatan

    Buat tabel terdistribusi jika Anda ingin mendistribusikan data ke semua tabel lokal dalam koleksi secara bersamaan.

    CREATE TABLE oss_test_tbl_distributed ON CLUSTER default
    (
    id UInt8,
    user_name String,
    age UInt16,
    city String,
    access_url String
    )
    ENGINE = Distributed(default, default, oss_test_tbl_local, rand());
  4. Impor data dari OSS ke ApsaraDB for ClickHouse.

    Anda dapat mengimpor data dari OSS ke ApsaraDB for ClickHouse menggunakan mesin tabel atau fungsi tabel.

    Penting

    Pilih pernyataan CREATE TABLE yang sesuai berdasarkan versi kluster Anda. Anda dapat melihat versi tersebut di bagian Cluster Properties pada halaman Cluster Information di Konsol.

    Metode 1: Impor data menggunakan mesin tabel

    1. Buat tabel eksternal OSS bernama oss_test_tbl.

      Sintaksis untuk versi sebelum 22.8

      CREATE TABLE <table_name> [ON CLUSTER cluster]
      (
      'col_name1' col_type1,
      'col_name2' col_type2,
      ...
      )
      ENGINE = OSS('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>');

      Sintaksis untuk versi 22.8 dan seterusnya

      CREATE TABLE <table_name> [ON CLUSTER cluster]
      (
      'col_name1' col_type1,
      'col_name2' col_type2,
      ...
      )
      ENGINE = OSS('https://<BucketName>.<oss-endpoint>/<file-name>', '<access-key-id>', '<access-key-secret>', '<file-format-name>');

      Parameter dijelaskan sebagai berikut.

      Nama Parameter

      Deskripsi

      table_name

      Nama tabel.

      ON CLUSTER cluster

      Membuat tabel lokal di setiap node. Nilainya tetap ON CLUSTER default.

      col_name1, col_name2

      Nama kolom.

      col_type1, col_type2

      Tipe data kolom.

      Penting

      Skema dan tipe data tabel eksternal OSS harus sesuai dengan data di OSS.

      BucketName

      Nama bucket.

      oss-endpoint

      Titik akhir yang digunakan untuk mengakses OSS. Untuk informasi selengkapnya tentang cara memperoleh titik akhir, lihat Wilayah dan titik akhir.

      Penting

      Pastikan bucket dan kluster ApsaraDB for ClickHouse berada di wilayah yang sama. Gunakan VPC Alibaba Cloud untuk mengakses OSS.

      file-name

      Nama file.

      access-key-id

      ID AccessKey yang digunakan untuk mengakses data di OSS. Untuk informasi selengkapnya tentang cara memperoleh pasangan AccessKey, lihat Peroleh pasangan AccessKey.

      access-key-secret

      Rahasia AccessKey yang digunakan untuk mengakses data di OSS. Untuk informasi selengkapnya tentang cara memperoleh pasangan AccessKey, lihat Peroleh pasangan AccessKey.

      oss-file-path

      Jalur penyimpanan file. Jalur ini biasanya dalam format `oss://<bucket-name>/<path-to-file>`.

      Catatan

      Parameter oss-file-path mendukung pencocokan kabur menggunakan karakter wildcard. Untuk informasi selengkapnya, lihat Pencocokan kabur jalur penyimpanan OSS menggunakan wildcard.

      file-format-name

      Format file. Pada topik ini, formatnya adalah CSV.

      Contoh:

      Contoh untuk versi sebelum 22.8

      CREATE TABLE oss_test_tbl on cluster default
      (
      id UInt8,
      user_name String,
      age UInt16,
      city String,
      access_url String
      )
      ENGINE = OSS('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://testBucketName/test.csv', 'CSV');

      Contoh untuk versi 22.8 dan seterusnya

      CREATE TABLE oss_test_tbl on cluster default
      (
      id UInt8,
      user_name String,
      age UInt16,
      city String,
      access_url String
      )
      ENGINE = OSS('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'STS.****************', 'STS.****************','CSV')
    2. Impor data dari tabel eksternal OSS oss_test_tbl ke tabel terdistribusi oss_test_tbl_distributed.

      Catatan

      Jika Anda hanya perlu mengimpor data dari OSS ke tabel lokal, ganti nama tabel terdistribusi dengan nama tabel lokal dalam pernyataan impor.

      INSERT INTO oss_test_tbl_distributed SELECT * FROM oss_test_tbl;

      Jika file CSV yang diimpor menggunakan pemisah kolom selain koma (,), Anda harus menentukan pemisah tersebut menggunakan format_csv_delimiter dalam pernyataan impor. Misalnya, jika kolom dalam file CSV dipisahkan oleh tanda pipa (|), jalankan perintah berikut:

      INSERT INTO oss_test_tbl_distributed SELECT * FROM oss_test_tbl settings format_csv_delimiter='|';

    Metode 2: Impor data menggunakan fungsi tabel

    Sintaksis untuk versi sebelum 22.8

    INSERT INTO <table_name> SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>', '<col_name> <col_type>(,...)');

    Sintaksis untuk versi 22.8 dan seterusnya

    INSERT INTO <table_name> SELECT * FROM oss('https://<BucketName>.<oss-endpoint>/<file-name>','<access-key-id>', '<access-key-secret>', '<file-format-name>', '<col_name> <col_type>(,...)');

    Untuk informasi selengkapnya tentang parameter, lihat deskripsi parameter.

    Contoh:

    Contoh untuk versi sebelum 22.8

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('oss-cn-shanghai-internal.aliyuncs.com', 'LTAI****************', 'yourAccessKeySecret', 'oss://testBucketName/test.csv', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');

    Contoh untuk versi 22.8 dan seterusnya

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('http://testBucketName.oss-cn-shanghai-internal.aliyuncs.com/test.csv', 'STS.****************', 'STS.****************', 'CSV', 'id UInt8, user_name String, age UInt16, city String, access_url String');

    Jika file CSV yang diimpor menggunakan pemisah kolom selain koma (,), Anda harus menentukan pemisah tersebut menggunakan format_csv_delimiter dalam pernyataan impor. Misalnya, jika kolom dalam file CSV dipisahkan oleh tanda pipa (|), gunakan pernyataan berikut.

    INSERT INTO oss_test_tbl_distributed SELECT * FROM oss('<oss-endpoint>', '<access-key-id>', '<access-key-secret>', '<oss-file-path>', '<file-format-name>',  '<col_name> <col_type>(,...)') settings format_csv_delimiter='|';
  5. Kueri data di tabel terdistribusi oss_test_tbl_distributed untuk memverifikasi bahwa data dari OSS telah diimpor ke ApsaraDB for ClickHouse.

    SELECT * FROM oss_test_tbl_distributed; 

    Hasil berikut dikembalikan:

    ┌─id─┬─user_name─┬──age──┬───city─────┬─────access_url────────┐
    │  1 │  yang     │   32  │  shanghai  │  http://example1.com  │
    │  2 │  wang     │   22  │  beijing   │  http://example2.com  │
    │  3 │  xiao     │   23  │  shenzhen  │  http://example3.com  │
    │  4 │  jess     │   45  │  hangzhou  │  http://example4.com  │
    │  5 │  jack     │   14  │  shanghai  │  http://example5.com  │
    │  6 │  tomy     │   25  │  hangzhou  │  http://example6.com  │
    │  7 │  lucy     │   45  │  shanghai  │  http://example7.com  │
    │  8 │  tengyin  │   26  │  shanghai  │  http://example8.com  │
    │  9 │  wangli   │   27  │  shenzhen  │  http://example9.com  │
    │ 10 │  xiaohua  │   37  │  shanghai  │  http://example10.com │
    └────┴───────────┴───────┴────────────┴───────────────────────┘

Pencocokan kabur jalur penyimpanan OSS menggunakan wildcard

OSS sering menyimpan beberapa file kecil yang mengikuti konvensi penamaan yang sama. Untuk menyederhanakan analisis file-file tersebut, parameter oss-file-path mendukung pencocokan kabur dengan karakter wildcard berikut.

  • *: Mencocokkan nama file atau nama folder apa pun. Misalnya, /dir/* mencocokkan semua file di folder /dir.

  • {x, y, z}: Mencocokkan salah satu nilai dalam tanda kurung kurawal. Misalnya, file_{x,y,z} mencocokkan file_x, file_y, atau file_z.

  • {num1..num2}: Mencocokkan nilai apa pun dalam rentang yang diperluas dari num1 hingga num2. Misalnya, file_{1..3} mencocokkan file_1, file_2, atau file_3.

  • ?: Mencocokkan satu karakter apa pun. Misalnya, file_? mencocokkan file_a, file_b, dan file_c.

Contoh

Struktur folder untuk unggahan adalah sebagai berikut.

oss://testBucketName/
               doc-data/
                    oss-import/
                        small_files/
                            access_log_csv_1.txt
                            access_log_csv_2.txt
                            access_log_csv_3.txt

Daftar berikut menyediakan beberapa contoh nilai untuk parameter oss-file-path.

  • oss://testBucketName/doc-data/oss-import/small_files/*

  • oss://testBucketName/doc-data/oss-import/small_files/access*

  • oss://testBucketName/doc-data/oss-import/small_files/access_log_csv_{1,2,3}.txt

  • oss://testBucketName/doc-data/oss-import/*/access_log_csv_{1,2,3}.txt

  • oss://testBucketName/doc-data/oss-import/*/*

  • oss://testBucketName/doc-data/oss-import/*/access_log_csv_{1..3}.txt

  • oss://testBucketName/doc-data/oss-import/*/access_log_csv_?.txt