全部产品
Search
文档中心

Hologres:Impor data dari tabel MaxCompute yang dipartisi

更新时间:Jul 06, 2025

Topik ini menjelaskan cara mengimpor data dari tabel MaxCompute yang dipartisi ke tabel Hologres yang dipartisi.

Prasyarat

  • Instans Hologres telah dibeli. Untuk informasi lebih lanjut, lihat Beli Instans Hologres.

  • MaxCompute telah diaktifkan dan Proyek MaxCompute telah dibuat. Untuk informasi lebih lanjut tentang cara mengaktifkan MaxCompute, lihat Aktifkan MaxCompute dan DataWorks.

  • DataWorks telah diaktifkan dan Ruang Kerja DataWorks telah dibuat. Untuk informasi lebih lanjut tentang cara membuat ruang kerja DataWorks, lihat Buat Ruang Kerja.

Informasi latar belakang

Tabel asing di Hologres sering digunakan untuk mengimpor data dari MaxCompute ke Hologres. Pengimporan data sering diperlukan dalam pekerjaan sehari-hari. Anda dapat menggunakan kemampuan penjadwalan dan orkestrasi tugas yang kuat dari DataWorks untuk menerapkan penjadwalan periodik serta mengonfigurasi alur kerja yang dipicu otomatis untuk mengimpor data. Untuk informasi lebih lanjut, lihat Contoh Alur Kerja DataWorks.

Alur kerja ini kompleks. Oleh karena itu, Anda dapat menggunakan layanan Migration Assistant dari DataWorks untuk mengimpor paket contoh alur kerja DataWorks ke ruang kerja Anda untuk membuat alur kerja. Kemudian, Anda dapat memodifikasi beberapa parameter atau skrip berdasarkan kebutuhan bisnis Anda. Untuk informasi lebih lanjut, lihat Gunakan Layanan Migration Assistant untuk Mengimpor Alur Kerja DataWorks.

Perhatian

  • Tabel sementara digunakan untuk memastikan atomicitas operasi. Tabel sementara hanya dilampirkan ke tabel yang dipartisi setelah data tabel diimpor. Dalam hal ini, Anda tidak perlu menghapus tabel jika data gagal diimpor.

  • Dalam skenario di mana data dalam tabel partisi anak yang ada akan diperbarui, Anda harus menempatkan penghapusan tabel partisi anak dan lampiran tabel sementara dalam transaksi untuk memastikan properti ACID (atomicity, consistency, isolation, durability) dari transaksi.

  • Prasyarat untuk menggunakan layanan Migration Assistant untuk mengimpor alur kerja DataWorks:

    • Edition Standar DataWorks atau edisi yang lebih canggih telah diaktifkan. Untuk informasi lebih lanjut, lihat Perbedaan antara Edisi DataWorks.

    • Sumber data MaxCompute dan Hologres telah ditambahkan ke ruang kerja DataWorks. Untuk informasi lebih lanjut, lihat Kelola Ruang Kerja.

Prosedur

  1. Siapkan Data MaxCompute.

    1. Masuk ke Konsol MaxCompute.

    2. Di panel navigasi kiri, pilih DataWorks > Data Analytics.

    3. Di halaman SQL Query, masukkan pernyataan SQL berikut dan klik ikon Run untuk membuat tabel yang dipartisi:

      DROP TABLE IF EXISTS odps_sale_detail;
      
      -- Buat tabel yang dipartisi bernama odps_sale_detail. 
      CREATE TABLE IF NOT EXISTS odps_sale_detail 
      (
          shop_name STRING
          ,customer_id STRING
          ,total_price DOUBLE
      )
      PARTITIONED BY 
      (
          sale_date STRING
      )
      ;
    4. Di halaman SQL Query, masukkan pernyataan SQL berikut dan klik ikon Run untuk mengimpor data ke tabel yang dipartisi:

      -- Buat partisi 20210815 di tabel yang dipartisi.
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815')
      ;
      
      -- Impor data ke partisi 20210815.
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210815') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Buat partisi 20210816 di tabel yang dipartisi.
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210816')
      ;
      
      -- Impor data ke partisi 20210815.
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210816') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Buat partisi 20210817 di tabel yang dipartisi.
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210817')
      ;
      
      -- Impor data ke partisi 20210815.
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210817') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Buat partisi 20210818 di tabel yang dipartisi.
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210818')
      ;
      
      -- Impor data ke partisi 20210815.
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210818') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
  2. Buat Tabel di Hologres.

    • Buat Tabel Asing.

      1. Masuk ke Database.

        1. Di Konsol HoloWeb, klik Metadata Management di bilah navigasi atas.

        2. Di tab Metadata Management, temukan database yang dibuat di panel navigasi kiri dan klik dua kali nama database. Di kotak dialog yang muncul, klik OK.登录数据库

      2. Buat Tabel Asing.

        1. Di pojok kiri atas tab SQL Editor, klik ikon image.

        2. Di tab Ad-hoc Query, pilih instans dari daftar drop-down Instance dan database dari daftar drop-down Database, masukkan pernyataan sampel berikut di editor SQL, lalu klik Run:

          DROP FOREIGN TABLE IF EXISTS odps_sale_detail;
          
          -- Buat tabel asing.
          IMPORT FOREIGN SCHEMA maxcompute_project LIMIT to
          (
              odps_sale_detail
          ) 
          FROM SERVER odps_server INTO public 
          OPTIONS(if_table_exist 'error',if_unsupported_type 'error');
    • Buat Tabel Internal yang Dipartisi.

      1. Masuk ke Database.

        1. Di Konsol HoloWeb, klik Metadata Management di bilah navigasi atas.

        2. Di tab Metadata Management, temukan database yang dibuat di panel navigasi kiri dan klik dua kali nama database. Di kotak dialog yang muncul, klik OK.登录数据库

      2. Buat Tabel yang Dipartisi.

        1. Di pojok kiri atas tab SQL Editor, klik ikon image.

        2. Di tab Ad-hoc Query, pilih instans dari daftar drop-down Instance dan database dari daftar drop-down Database, masukkan pernyataan sampel berikut di editor SQL, lalu klik Run:

          DROP TABLE IF EXISTS holo_sale_detail;
          
          -- Buat tabel internal yang dipartisi di Hologres.
          BEGIN ;
          CREATE TABLE IF NOT EXISTS holo_sale_detail
          (
              shop_name TEXT
              ,customer_id TEXT 
              ,total_price FLOAT8
              ,sale_date TEXT
          )
          PARTITION BY LIST(sale_date);
          COMMIT;
  3. Impor Data dari Partisi ke Tabel Sementara Hologres.

    Di tab Ad-hoc Query, masukkan pernyataan sampel berikut di editor SQL dan klik Run.

    Pernyataan SQL berikut digunakan untuk mengimpor data partisi 20210816 dari tabel yang dipartisi odps_sale_detail di proyek MaxCompute hologres_test ke partisi 20210816 dari tabel yang dipartisi holo_sale_detail di Hologres:

    Catatan

    Hologres V2.1.17 dan versi lebih baru mendukung fitur Serverless Computing. Fitur Serverless Computing cocok untuk skenario di mana Anda ingin mengimpor sejumlah besar data secara offline, menjalankan pekerjaan ETL berskala besar, atau menanyakan sejumlah besar data dari tabel asing. Anda dapat menggunakan fitur Serverless Computing untuk melakukan operasi tersebut berdasarkan sumber daya komputasi serverless tambahan. Ini dapat menghilangkan kebutuhan untuk memesan sumber daya komputasi tambahan untuk instans. Ini meningkatkan stabilitas instans dan mengurangi kejadian kesalahan out of memory (OOM). Anda hanya dikenakan biaya untuk sumber daya komputasi serverless tambahan yang digunakan oleh tugas. Untuk informasi lebih lanjut tentang fitur Serverless Computing, lihat Serverless Computing. Untuk informasi lebih lanjut tentang cara menggunakan fitur Serverless Computing, lihat Panduan Pengguna pada Serverless Computing.

    -- Hapus tabel sementara yang ada.
    BEGIN ;
    
    DROP TABLE IF EXISTS holo_sale_detail_tmp_20210816;
    
    COMMIT ;
    
    -- Buat tabel sementara.
    SET hg_experimental_enable_create_table_like_properties=on;
    
    BEGIN ;
    
    CALL HG_CREATE_TABLE_LIKE ('holo_sale_detail_tmp_20210816', 'select * from holo_sale_detail'); 
    
    COMMIT;
    
    -- Opsional. Kami sarankan Anda menggunakan fitur Serverless Computing untuk mengimpor sejumlah besar data secara offline dan menjalankan pekerjaan ETL.
    SET hg_computing_resource = 'serverless';
    
    -- Masukkan data ke tabel sementara.
    INSERT INTO holo_sale_detail_tmp_20210816
    SELECT *
    FROM public.odps_sale_detail
    WHERE sale_date='20210816';
    
    -- Reset konfigurasi. Ini memastikan bahwa sumber daya komputasi serverless tidak digunakan untuk pernyataan SQL berikutnya. 
    RESET hg_computing_resource;
  4. Lampirkan Tabel Sementara ke Tabel Hologres yang Dipartisi.

    Di tab Ad-hoc Query, masukkan pernyataan sampel berikut di editor SQL dan klik Run.

    • Jika tabel anak yang sesuai dengan partisi tertentu ada, hapus tabel anak yang ada sebelum melampirkan tabel sementara ke tabel Hologres yang dipartisi.

      Pernyataan SQL berikut digunakan untuk menghapus tabel anak yang dipartisi yang ada holo_sale_detail_20210816 dan melampirkan tabel sementara holo_sale_detail_tmp_20210816 ke partisi 20210816 dari tabel yang dipartisi holo_sale_detail:

      -- Jika tabel anak yang dipartisi yang sesuai dengan partisi tertentu ada, ganti tabel anak yang dipartisi.
      BEGIN ;
      
      -- Hapus tabel anak yang dipartisi yang ada.
      DROP TABLE IF EXISTS holo_sale_detail_20210816;
      
      -- Ubah nama tabel sementara.
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      
      -- Lampirkan tabel sementara ke tabel Hologres yang dipartisi.
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816')
      ;
      
      COMMIT ;
    • Jika tidak ada tabel anak yang dipartisi yang sesuai dengan partisi tertentu, lampirkan tabel sementara ke tabel Hologres yang dipartisi.

      Pernyataan SQL berikut digunakan untuk melampirkan tabel sementara holo_sale_detail_tmp_20210816 ke partisi 20210816 dari tabel yang dipartisi holo_sale_detail:

      BEGIN ;
      -- Ubah nama tabel sementara.
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      -- Lampirkan tabel sementara ke tabel Hologres yang dipartisi.
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816');
      COMMIT ;
  5. Kumpulkan Statistik pada Tabel Hologres yang Dipartisi.

    Pada tab Ad-hoc Query, masukkan pernyataan contoh berikut ke dalam editor SQL, lalu klik Run.

    Pernyataan SQL berikut digunakan untuk mengumpulkan statistik pada tabel yang dipartisi holo_sale_detail dan memverifikasi rencana eksekusi tabel yang dipartisi. Anda hanya perlu mengumpulkan statistik pada tabel induk yang dipartisi.

    -- Kumpulkan statistik pada tabel induk yang dipartisi setelah sejumlah besar data diimpor.
    ANALYZE holo_sale_detail;
  6. Opsional. Hapus Tabel Anak yang Dipartisi yang Sesuai dengan Partisi Kedaluwarsa.

    Dalam lingkungan produksi, data memiliki periode time-to-live (TTL). Anda harus menghapus tabel anak yang dipartisi yang sesuai dengan partisi kedaluwarsa.

    Di tab Ad-hoc Query, masukkan pernyataan sampel berikut di editor SQL dan klik Run.

    Pernyataan SQL berikut digunakan untuk menghapus tabel anak yang dipartisi yang sesuai dengan partisi 20210631:

    DROP TABLE IF EXISTS holo_sale_detail_20210631;

Contoh alur kerja DataWorks

Dalam pekerjaan sehari-hari, Anda perlu mengeksekusi pernyataan SQL di atas secara berkala. Dalam hal ini, Anda dapat menggunakan kemampuan penjadwalan dan orkestrasi tugas yang kuat dari DataWorks untuk menerapkan penjadwalan berkala dan mengonfigurasi alur kerja yang dipicu otomatis untuk mengimpor data. Konten berikut dapat membantu Anda memodifikasi beberapa parameter atau skrip berdasarkan kebutuhan bisnis Anda ketika Anda gunakan layanan Migration Assistant untuk mengimpor alur kerja DataWorks.

Node dalam Alur Kerja

  • Parameter Dasar

    Parameter dasar digunakan untuk mengelola semua parameter yang digunakan di seluruh alur kerja. Tabel berikut menjelaskan parameter dasar.

    No.

    Parameter

    Tipe

    Nilai valid

    Deskripsi

    1

    datepre31

    Variabel

    ${yyyymmdd-31}

    Kondisi untuk menghapus tabel anak yang dipartisi yang sesuai dengan partisi kedaluwarsa. ${yyyymmdd-31} menunjukkan untuk menghapus tabel anak yang dipartisi yang sesuai dengan partisi yang dihasilkan 31 hari sebelum tanggal yang ditentukan.

    2

    datetime1

    Variabel

    $bizdate

    Partisi yang dibuat untuk dikelola.

    3

    holo_table_name

    Konstan

    holo_sale_detail

    Nama tabel Hologres yang dipartisi.

    4

    odps_project

    Konstan

    hologres_test

    Nama proyek MaxCompute.

    5

    odps_table_name

    Konstan

    odps_sale_detail

    Nama tabel MaxCompute yang dipartisi.

    6

    partition_key

    Konstan

    sale_date

    Bidang partisi di tabel MaxCompute.

    Gambar berikut menunjukkan konfigurasi sistem parameter dasar.基础参数

  • Impor Data Partisi Tertentu ke Tabel Sementara.

    Ini adalah node SQL Hologres, yang berisi pernyataan SQL berikut:

    Catatan

    Hologres V2.1.17 dan versi lebih baru mendukung fitur Serverless Computing. Fitur Serverless Computing cocok untuk skenario di mana Anda ingin mengimpor sejumlah besar data secara offline, menjalankan pekerjaan ETL berskala besar, atau menanyakan sejumlah besar data dari tabel asing. Anda dapat menggunakan fitur Serverless Computing untuk melakukan operasi tersebut berdasarkan sumber daya komputasi serverless tambahan. Ini dapat menghilangkan kebutuhan untuk memesan sumber daya komputasi tambahan untuk instans. Ini meningkatkan stabilitas instans dan mengurangi kejadian kesalahan out of memory (OOM). Anda hanya dikenakan biaya untuk sumber daya komputasi serverless tambahan yang digunakan oleh tugas. Untuk informasi lebih lanjut tentang fitur Serverless Computing, lihat Serverless Computing. Untuk informasi lebih lanjut tentang cara menggunakan fitur Serverless Computing, lihat Panduan Pengguna pada Serverless Computing.

    -- Hapus tabel sementara yang ada.
    BEGIN ;
    
    DROP TABLE IF EXISTS ${holo_table_name}_tmp_${datetime1};
    
    COMMIT ;
    
    -- Buat tabel sementara.
    SET hg_experimental_enable_create_table_like_properties=on;
    
    BEGIN ;
    
    CALL HG_CREATE_TABLE_LIKE ('${holo_table_name}_tmp_${datetime1}', 'select * from ${holo_table_name}'); 
    
    COMMIT;
    
    -- Masukkan data ke tabel sementara.
    
    -- Opsional. Kami sarankan Anda menggunakan fitur Serverless Computing untuk mengimpor sejumlah besar data secara offline dan menjalankan pekerjaan ETL.
    SET hg_computing_resource = 'serverless';
    
    INSERT INTO ${holo_table_name}_tmp_${datetime1}
    SELECT *
    FROM public.${odps_table_name}
    WHERE ${partition_key}='${datetime1}';
    
    -- Reset konfigurasi. Ini memastikan bahwa sumber daya komputasi serverless tidak digunakan untuk pernyataan SQL berikutnya.
    RESET hg_computing_resource;

    Hubungkan parameter dasar dengan node leluhur dari node ini untuk mengontrol variabel dalam parameter dasar. Gambar berikut menunjukkan konfigurasi sistem.写入分区数据至临时表

  • Ganti Tabel Anak yang Dipartisi yang Sesuai dengan Partisi Tertentu.

    Ini adalah node SQL Hologres yang digunakan untuk memperbarui data jika tabel anak yang dipartisi yang sesuai dengan partisi ada. Tempatkan penggantian tabel anak yang dipartisi dalam transaksi untuk memastikan properti ACID dari transaksi. Node ini berisi pernyataan SQL berikut:

    -- Jika tabel anak yang dipartisi yang sesuai dengan partisi tertentu ada, ganti tabel anak yang dipartisi.
    BEGIN ;
    
    -- Hapus tabel anak yang dipartisi yang ada.
    DROP TABLE IF EXISTS ${holo_table_name}_${datetime1};
    
    -- Ubah nama tabel sementara.
    ALTER TABLE ${holo_table_name}_tmp_${datetime1} RENAME TO ${holo_table_name}_${datetime1};
    
    -- Lampirkan tabel sementara ke tabel Hologres yang dipartisi.
    ALTER TABLE ${holo_table_name} ATTACH PARTITION ${holo_table_name}_${datetime1}
    FOR VALUES IN ('${datetime1}');
    
    COMMIT ;

    Hubungkan parameter dasar dengan node leluhur dari node ini untuk mengontrol variabel dalam parameter dasar. Gambar berikut menunjukkan konfigurasi sistem.替换子表

  • Kumpulkan Statistik pada Tabel yang Dipartisi.

    Ini adalah node SQL Hologres yang digunakan untuk mengumpulkan statistik pada tabel induk yang dipartisi. Node ini berisi pernyataan SQL berikut:

    -- Kumpulkan statistik pada tabel induk yang dipartisi setelah sejumlah besar data diimpor.
    ANALYZE ${holo_table_name};

    Hubungkan parameter dasar dengan node leluhur dari node ini untuk mengontrol variabel dalam parameter dasar. Gambar berikut menunjukkan konfigurasi sistem.收集分区表的统计信息

  • Hapus Tabel Anak yang Dipartisi yang Sesuai dengan Partisi Kedaluwarsa.

    Dalam lingkungan produksi, data memiliki periode TTL. Anda harus menghapus tabel anak yang dipartisi yang sesuai dengan partisi kedaluwarsa.

    Sebagai contoh, Anda ingin menyimpan tabel anak yang dipartisi yang sesuai dengan partisi yang dihasilkan hanya dalam 31 hari terakhir di Hologres, dan parameter datepre31 disetel ke ${yyyymmdd-31}. Dalam hal ini, node yang digunakan untuk menghapus tabel anak yang dipartisi yang sesuai dengan partisi kedaluwarsa berisi pernyataan SQL berikut:

    -- Hapus tabel anak yang dipartisi yang sesuai dengan partisi kedaluwarsa.
    
    BEGIN ;
    
    DROP TABLE IF EXISTS ${holo_table_name}_${datepre31};
    
    COMMIT ;

    Saat alur kerja sedang berjalan, jika nilai parameter bizdate adalah 20200309, nilai parameter datepre31 adalah 20200207. Dalam hal ini, tabel anak yang dipartisi yang sesuai dengan partisi yang dihasilkan sebelum 7 Februari 2020 dihapus.

    Hubungkan parameter dasar dengan node leluhur dari node ini untuk mengontrol variabel dalam parameter dasar. Gambar berikut menunjukkan konfigurasi sistem.清理过期子表

Gunakan layanan Migration Assistant untuk mengimpor alur kerja DataWorks

  • Alur kerja DataWorks di atas kompleks. Oleh karena itu, Anda dapat menggunakan layanan Migration Assistant dari DataWorks untuk mengimpor paket contoh alur kerja DataWorks ke proyek Anda untuk mendapatkan contoh alur kerja DataWorks. Kemudian, Anda dapat memodifikasi beberapa parameter atau skrip berdasarkan kebutuhan bisnis Anda.

  • Sebelum Anda melakukan langkah-langkah berikut, unduh paket contoh alur kerja DataWorks.

  1. Pergi ke Halaman Utama Migration Assistant di DataWorks. Untuk informasi lebih lanjut, lihat Pergi ke Halaman Migration Assistant.

  2. Di panel navigasi kiri halaman Migration Assistant, pilih Migration Within DataWorks > DataWorks import.

  3. Di pojok kanan atas halaman DataWorks import, klik Create Import Task.

  4. Di kotak dialog Create Import Task, konfigurasikan parameter.

    新建导入任务

    Parameter

    Deskripsi

    Name

    Tentukan nama kustom. Nama dapat berisi huruf, angka, garis bawah (_), dan titik (.).

    Upload From

    Sumber paket yang ingin Anda unggah.

    • Local: Unggah paket dari komputer Anda ke ruang kerja DataWorks jika ukuran paket kurang dari atau sama dengan 30 MB.

    • OSS: Unggah paket ke Object Storage Service (OSS) dan tentukan URL OSS paket jika ukuran paket melebihi 30 MB. Anda dapat menyalin URL OSS di panel Detail Lihat paket di konsol OSS dan tentukan URL OSS yang diperoleh untuk mengunggah paket ke ruang kerja DataWorks. Untuk informasi lebih lanjut tentang cara mengunggah objek ke OSS, lihat Unggah objek. Untuk informasi lebih lanjut tentang cara mendapatkan URL OSS objek, lihat Bagikan objek.下载链接

    Remarks

    Deskripsi tugas impor.

  5. Klik OK. Di halaman Import Task Settings, konfigurasikan pemetaan.

  6. Klik Import di pojok kanan atas. Di pesan Confirm, klik OK.

    1. Setelah paket diimpor, alur kerja yang dipicu otomatis muncul di DataStudio.

    2. Pernyataan DDL yang relevan muncul di alur kerja yang dipicu manual.