All Products
Search
Document Center

Hologres:Impor data dari tabel partisi MaxCompute

Last Updated:Mar 11, 2026

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

Prasyarat

  • Anda telah membeli dan mengaktifkan instans Hologres. Untuk informasi selengkapnya, lihat Purchase a Hologres instance.

  • Anda telah mengaktifkan MaxCompute dan membuat proyek MaxCompute. Untuk informasi selengkapnya, lihat Activate MaxCompute.

  • Anda telah mengaktifkan DataWorks dan membuat ruang kerja DataWorks. Untuk informasi selengkapnya, lihat Create a workspace.

Informasi latar belakang

Menggunakan tabel eksternal MaxCompute di Hologres merupakan metode umum untuk mengimpor data. Dalam operasional sehari-hari, Anda sering perlu mengimpor data secara berkala. Anda dapat menggunakan DataWorks untuk menjadwalkan dan mengatur pekerjaan sehingga memungkinkan impor periodik dalam satu pekerjaan yang mencakup kedua skenario tersebut. Untuk informasi selengkapnya, lihat Contoh pekerjaan DataWorks.

Jika pekerjaan tersebut kompleks, gunakan asisten migrasi DataWorks. Impor file pekerjaan contoh ke dalam proyek Anda, lalu sesuaikan parameter atau skrip sesuai kebutuhan bisnis Anda. Untuk informasi selengkapnya, lihat Impor pekerjaan DataWorks menggunakan tool migrasi.

Catatan penting

  • Gunakan tabel temporary untuk memastikan atomicity. Bind tabel temporary ke tabel partisi hanya setelah impor selesai agar menghindari pembersihan manual jika impor gagal.

  • Saat memperbarui data di partisi anak, hapus tabel anak yang ada dan attach tabel temporary baru dalam satu transaksi untuk menjamin konsistensi transaksional.

  • Untuk mengimpor pekerjaan DataWorks menggunakan tool migrasi, penuhi persyaratan berikut:

    • Edisi DataWorks Anda harus Edisi Standar atau yang lebih baru. Untuk informasi selengkapnya, lihat Feature Details by Version.

    • Ruang kerja DataWorks Anda harus dilampirkan ke sumber data MaxCompute dan Hologres. Untuk informasi selengkapnya, lihat Configure a workspace.

Prosedur detail

  1. Siapkan data MaxCompute

    1. Login ke Konsol DataWorks. Di wilayah tujuan, pilih Data Analytics & Services > Data Analysis di panel navigasi sebelah kiri. Klik Go to Data Analytics. Lalu, di panel navigasi sebelah kiri, klik ikon image untuk membuka halaman SQL Query.

    2. Di halaman SQL Query, masukkan pernyataan SQL berikut untuk membuat tabel partisi. Klik Run.

      DROP TABLE IF EXISTS odps_sale_detail;
      
      -- Create a partitioned table named sale_detail.
      CREATE TABLE IF NOT EXISTS odps_sale_detail 
      (
          shop_name STRING
          ,customer_id STRING
          ,total_price DOUBLE
      )
      PARTITIONED BY 
      (
          sale_date STRING
      )
      ;
    3. Di halaman SQL Query, masukkan pernyataan SQL berikut untuk mengimpor data ke tabel partisi. Klik Run.

      -- Add partition 20210815 to the source table
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815')
      ;
      
      -- Insert data into the partition
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210815') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Add partition 20210816 to the source table
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210816')
      ;
      
      -- Insert data into the partition
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210816') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Add partition 20210817 to the source table
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210817')
      ;
      
      -- Insert data into the partition
      INSERT OVERWRITE TABLE odps_sale_detail PARTITION(sale_date='20210817') VALUES 
      ('s1','c1',100.1),
      ('s2','c2',100.2),
      ('s3','c3',100.3)
      ;
      
      -- Add partition 20210818 to the source table
      ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210818')
      ;
      
      -- Insert data into the partition
      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 eksternal

      1. Login ke database.

        1. Di halaman pengembangan HoloWeb, klik Metadata Management.

        2. Di halaman Metadata Management, klik ganda nama database yang Anda buat di pohon direktori sebelah kiri, lalu klik OK.Log in to the database

      2. Buat tabel eksternal

        1. Di halaman SQL Editor, klik ikon image di pojok kiri atas untuk membuat kueri SQL baru.

        2. Di halaman Ad-hoc Query yang baru, pilih Instance Name dan Database yang sudah ada. Di editor SQL, masukkan pernyataan berikut. Klik Run.

          DROP FOREIGN TABLE IF EXISTS odps_sale_detail;
          
          -- Create a foreign table
          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 partisi (tabel internal)

      1. Login ke database.

        1. Di halaman pengembangan HoloWeb, klik Metadata Management.

        2. Di halaman Metadata Management, klik ganda nama database yang Anda buat di pohon direktori sebelah kiri, lalu klik OK.Log in to the database

      2. Buat tabel partisi

        1. Di halaman SQL Editor, klik ikon image di pojok kiri atas untuk membuat kueri SQL baru.

        2. Di halaman Ad-hoc Query yang baru, pilih Instance Name dan Database yang sudah ada. Di editor SQL, masukkan pernyataan berikut. Klik Run.

          DROP TABLE IF EXISTS holo_sale_detail;
          
          -- Create a Hologres partitioned table (internal table)
          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 partisi ke tabel temporary Hologres

    Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL. Klik Run.

    Pernyataan SQL ini mengimpor partisi 20210816 dari tabel partisi odps_sale_detail di proyek hologres_test ke partisi 20210816 dari tabel partisi holo_sale_detail di Hologres.

    Catatan

    Mulai versi 2.1.17, Hologres mendukung Serverless Computing. Untuk impor offline skala besar, pekerjaan ETL besar, dan kueri tabel eksternal ber-volume tinggi, Serverless Computing menggunakan sumber daya serverless tambahan alih-alih sumber daya instans Anda. Hal ini meningkatkan stabilitas dan mengurangi error kehabisan memori (OOM). Anda hanya membayar untuk tugas yang dijalankan. Untuk informasi selengkapnya, lihat Serverless Computing. Untuk petunjuk penggunaan, lihat Serverless Computing User Guide.

    -- Clean up potential temporary tables
    BEGIN ;
    
    DROP TABLE IF EXISTS holo_sale_detail_tmp_20210816;
    
    COMMIT ;
    
    -- Create a temporary table
    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;
    
    -- (Optional) Use Serverless Computing for large offline imports and ETL jobs
    SET hg_computing_resource = 'serverless';
    
    -- Insert data into the temporary table
    INSERT INTO holo_sale_detail_tmp_20210816
    SELECT *
    FROM public.odps_sale_detail
    WHERE sale_date='20210816';
    
    -- Reset the setting so non-essential SQL statements do not use serverless resources.
    RESET hg_computing_resource;
  4. Attach tabel temporary ke tabel partisi Hologres

    Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL. Klik Run.

    • Jika tabel anak lama ada, hapus terlebih dahulu, lalu attach tabel temporary ke tabel partisi Hologres.

      Pernyataan SQL ini menghapus tabel anak holo_sale_detail_20210816 dan mengattach tabel temporary holo_sale_detail_tmp_20210816 ke partisi 20210816 dari tabel partisi holo_sale_detail.

      -- Replace an existing child table
      BEGIN ;
      
      -- Drop the old child table
      DROP TABLE IF EXISTS holo_sale_detail_20210816;
      
      -- Rename the temporary table
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      
      -- Attach the temporary table to the specified partitioned table
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816')
      ;
      
      COMMIT ;
    • Jika tidak ada tabel anak lama, attach langsung tabel temporary ke tabel partisi Hologres.

      Pernyataan SQL ini mengattach tabel temporary holo_sale_detail_tmp_20210816 ke partisi 20210816 dari tabel partisi holo_sale_detail.

      BEGIN ;
      -- Rename the temporary table
      ALTER TABLE holo_sale_detail_tmp_20210816 RENAME TO holo_sale_detail_20210816;
      -- Attach the temporary table to the specified partitioned table
      ALTER TABLE holo_sale_detail ATTACH PARTITION holo_sale_detail_20210816
      FOR VALUES IN ('20210816');
      COMMIT ;
  5. ANALYZE tabel partisi Hologres

    Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL. Klik Run.

    Pernyataan SQL ini menjalankan ANALYZE pada tabel partisi holo_sale_detail untuk memverifikasi rencana eksekusinya. Saat Anda menjalankan ANALYZE pada tabel partisi, cukup analisis tabel induknya saja.

    -- Run ANALYZE on the parent table after importing large amounts of data
    ANALYZE holo_sale_detail;
  6. Bersihkan partisi anak yang kedaluwarsa (opsional)

    Di lingkungan produksi, data memiliki siklus hidup. Bersihkan partisi yang kedaluwarsa sesuai kebutuhan.

    Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL. Klik Run.

    Pernyataan SQL ini membersihkan partisi 20210631.

    DROP TABLE IF EXISTS holo_sale_detail_20210631;

Contoh pekerjaan DataWorks

Anda sering perlu menjalankan pernyataan SQL di atas secara terjadwal. Gunakan DataWorks untuk menjadwalkan dan mengatur pekerjaan. Satu pekerjaan terjadwal dapat mencakup kedua skenario tersebut. Baca konten berikut dengan cermat. Konten ini membantu Anda menyesuaikan parameter atau skrip saat Anda mengimpor pekerjaan DataWorks menggunakan tool migrasi. Alur kerja keseluruhan ditunjukkan di bawah ini.

Detail modul alur bisnis

  • Parameter dasar

    Parameter dasar mengelola semua parameter yang digunakan dalam alur kerja. Parameter utama meliputi:

    ID

    Nama parameter

    Tipe

    Nilai

    Deskripsi

    1

    datepre31

    Variable

    ${yyyymmdd-31}

    Mengontrol pembersihan partisi kedaluwarsa. Membersihkan partisi dari 31 hari lalu.

    2

    datetime1

    Variable

    $bizdate

    Mengontrol pembuatan partisi.

    3

    holo_table_name

    Constant

    holo_sale_detail

    Nama tabel partisi Hologres.

    4

    odps_project

    Constant

    hologres_test

    Nama proyek MaxCompute.

    5

    odps_table_name

    Constant

    odps_sale_detail

    Nama tabel partisi MaxCompute.

    6

    partition_key

    Constant

    sale_date

    Bidang partisi di MaxCompute.

    Konfigurasi sistem ditunjukkan di bawah ini.基础参数

  • Tulis data partisi ke tabel temporary

    Langkah ini merupakan modul SQL Hologres. Kodenya sebagai berikut.

    Catatan

    Mulai versi 2.1.17, Hologres mendukung Serverless Computing. Untuk impor offline skala besar, pekerjaan ETL besar, dan kueri tabel eksternal ber-volume tinggi, Serverless Computing menggunakan sumber daya serverless tambahan alih-alih sumber daya instans Anda. Hal ini meningkatkan stabilitas dan mengurangi error kehabisan memori (OOM). Anda hanya membayar untuk tugas yang dijalankan. Untuk informasi selengkapnya, lihat Serverless Computing. Untuk petunjuk penggunaan, lihat Serverless Computing User Guide.

    -- Clean up potential temporary tables
    BEGIN ;
    
    DROP TABLE IF EXISTS ${holo_table_name}_tmp_${datetime1};
    
    COMMIT ;
    
    -- Create a temporary table
    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;
    
    -- Insert data into the temporary table
    
    -- (Optional) Use Serverless Computing for large offline imports and ETL jobs
    SET hg_computing_resource = 'serverless';
    
    INSERT INTO ${holo_table_name}_tmp_${datetime1}
    SELECT *
    FROM public.${odps_table_name}
    WHERE ${partition_key}='${datetime1}';
    
    -- Reset the setting so non-essential SQL statements do not use serverless resources
    RESET hg_computing_resource;

    Bind parameter dasar ke modul ini di hulu untuk mengontrol variabel parameter. Konfigurasi sistem ditunjukkan di bawah ini.写入分区数据至临时表

  • Ganti tabel anak

    Langkah ini merupakan modul SQL Hologres yang mengganti tabel anak yang ada. Proses penggantian dibungkus dalam transaksi untuk memastikan konsistensi. Kodenya sebagai berikut.

    -- Replace an existing child table
    BEGIN ;
    
    -- Drop the existing child table
    DROP TABLE IF EXISTS ${holo_table_name}_${datetime1};
    
    -- Rename the temporary table
    ALTER TABLE ${holo_table_name}_tmp_${datetime1} RENAME TO ${holo_table_name}_${datetime1};
    
    -- Attach the temporary table to the specified partitioned table
    ALTER TABLE ${holo_table_name} ATTACH PARTITION ${holo_table_name}_${datetime1}
    FOR VALUES IN ('${datetime1}');
    
    COMMIT ;

    Bind parameter dasar ke modul ini di hulu untuk mengontrol variabel parameter. Konfigurasi sistem ditunjukkan di bawah ini.替换子表

  • Kumpulkan statistik untuk tabel partisi

    Langkah ini merupakan modul SQL Hologres yang mengumpulkan statistik untuk tabel induk. Kodenya sebagai berikut.

    -- Run ANALYZE on the parent table after importing large amounts of data
    ANALYZE ${holo_table_name};

    Bind parameter dasar ke modul ini di hulu untuk mengontrol variabel parameter. Konfigurasi sistem ditunjukkan di bawah ini.收集分区表的统计信息

  • Bersihkan tabel anak yang kedaluwarsa

    Di lingkungan produksi, data memiliki siklus hidup. Bersihkan partisi yang kedaluwarsa sesuai kebutuhan.

    Sebagai contoh, simpan hanya partisi 31 hari terakhir di Hologres. Karena parameter datepre31=${yyyymmdd-31} telah ditetapkan sebelumnya, kode SQL untuk membersihkan tabel anak kedaluwarsa adalah sebagai berikut. Sebelum menghapus tabel anak partisi fisik, detach terlebih dahulu dari tabel induk (DETACH PARTITION). Jika tidak, tabel anak tetap terlampir ke tabel induk.

    -- Clean up expired child tables: detach first, then drop
    
    BEGIN ;
    
    ALTER TABLE ${holo_table_name} DETACH PARTITION ${holo_table_name}_${datepre31};
    
    DROP TABLE IF EXISTS ${holo_table_name}_${datepre31};
    
    COMMIT ;

    Jadi jika $bizdate adalah 20200309, maka datepre31 adalah 20200207. Hal ini mencapai tujuan pembersihan partisi.

    Bind juga parameter dasar ke modul ini di hulu untuk mengontrol variabel parameter. Konfigurasi sistem ditunjukkan di bawah ini.清理过期子表

Impor pekerjaan DataWorks menggunakan tool migrasi

  • Jika pekerjaan tersebut kompleks, gunakan asisten migrasi DataWorks. Impor file berikut ke dalam proyek Anda. Anda akan mendapatkan pekerjaan DataWorks seperti yang dijelaskan di atas, lalu sesuaikan parameter atau skrip sesuai kebutuhan bisnis Anda.

  • Unduh paket pekerjaan: Paket pekerjaan DataWorks.

  1. Buka asisten migrasi DataWorks. Untuk informasi selengkapnya, lihat Open the migration assistant.

  2. Di panel navigasi sebelah kiri asisten migrasi, klik DataWorks Migration > DataWorks Import.

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

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

    新建导入任务

    Parameter

    Deskripsi

    Import Name

    Nama kustom. Nama impor hanya boleh berisi huruf, angka, garis bawah (_), dan titik (.).

    Upload Method

    Cara mengunggah file.

    • Local Upload: Gunakan metode ini jika ukuran file paket yang diekspor ≤ 30 MB.

    • OSS URL: Jika ukuran file paket yang diekspor > 30 MB, unggah ke OSS. Salin URL dari halaman detail file di konsol OSS. Tempel URL OSS ke ruang kerja DataWorks. Untuk langkah pengunggahan OSS, lihat Upload files in the console. Untuk cara mendapatkan URL unduh OSS, lihat Share files.下载链接

    Remarks

    Deskripsi singkat tentang tugas impor.

  5. Klik OK. Buka halaman Import Task Settings. Konfigurasikan pemetaan.

  6. Klik Start Import di pojok kiri bawah. Di kotak dialog Confirm, klik OK.

    1. Setelah impor berhasil, pekerjaan periodik muncul di modul Pengembangan Data Anda.

    2. Pernyataan DDL terkait juga muncul di alur kerja manual Anda.