全部产品
Search
文档中心

MaxCompute:Migrasi data dari RDS ke MaxCompute berdasarkan partisi dinamis

更新时间:Nov 10, 2025

Topik ini menjelaskan cara menggunakan fitur sinkronisasi data Data Integration di DataWorks untuk membuat partisi secara otomatis dan melakukan migrasi data secara dinamis dari RDS ke MaxCompute, layanan komputasi data besar.

Persiapan

Buat partisi secara otomatis

Setelah menyelesaikan prasyarat, Anda dapat menyinkronkan data dari RDS ke MaxCompute setiap hari dan membuat partisi harian secara otomatis. Untuk informasi selengkapnya mengenai operasi dan konfigurasi tugas sinkronisasi data, lihat Pengembangan data dan O&M di DataWorks.

Catatan

Contoh ini menggunakan mode dasar DataWorks. Saat membuat ruang kerja, opsi Join the Public Preview of DataStudio tidak dipilih secara default. Contoh ini tidak berlaku untuk ruang kerja dalam pratinjau publik.

  1. Login ke Konsol DataWorks.

  2. Buat tabel tujuan di MaxCompute.

    1. Di panel navigasi sebelah kiri, klik Workspaces.

    2. Di kolom Actions ruang kerja, klik Quick Access > Data Development.

    3. Klik kanan alur kerja dan pilih Create Table > MaxCompute > Table.

    4. Di halaman Create Table, pilih instance mesin, skema, dan jalur, masukkan Table Name, lalu klik Create.

    5. Di halaman pengeditan tabel, klik ikon image untuk beralih ke mode DDL.

    6. Di kotak dialog DDL, masukkan pernyataan berikut untuk membuat tabel dan klik Generate Table Schema. Di kotak dialog Confirm yang muncul, klik OK.

      CREATE TABLE IF NOT EXISTS ods_user_info_d (
      uid STRING COMMENT 'ID Pengguna',
      gender STRING COMMENT 'Jenis Kelamin',
      age_range STRING COMMENT 'Rentang Usia',
      zodiac STRING COMMENT 'Zodiak'
      )
      PARTITIONED BY (
      dt STRING
      );                           
    7. Klik Submit to Production Environment.

  3. Buat node sinkronisasi offline.

    1. Buka halaman analitik data. Klik kanan alur kerja tertentu dan pilih Create Node > Data Integration > Offline synchronization.

    2. Di kotak dialog create a node, masukkan node name, lalu klik submit.

    3. Pilih sumber data, kelompok sumber daya, dan tujuan, lalu uji konektivitasnya.

      • Data Source: Pilih sumber data MySQL yang telah Anda buat.

      • Resource Group: Pilih grup sumber daya eksklusif untuk Integrasi Data.

      • Destination: Pilih sumber data MaxCompute yang telah Anda buat.

    4. Klik Next untuk mengonfigurasi tugas.image

  4. Konfigurasi parameter partisi.

    1. Di panel navigasi sebelah kanan, klik Schedule.

    2. Di bagian Scheduling Parameters, atur parameter. Secara default, nilai parameter adalah parameter waktu sistem ${bizdate}. Nilainya dalam format yyyymmdd.

      Catatan

      Nilai parameter default sesuai dengan nilai Partition Information di bagian Destination. Saat tugas migrasi dijadwalkan dan dijalankan, nilai partisi tabel tujuan akan secara otomatis diganti dengan tanggal sehari sebelum tanggal eksekusi tugas. Secara default, tugas memproses data bisnis dari hari sebelumnya. Tanggal ini juga disebut Waktu data. Untuk menggunakan tanggal eksekusi tugas sebagai nilai partisi, Anda harus menggunakan parameter kustom.

      Pengaturan parameter kustom: Anda dapat menentukan tanggal dan mengonfigurasi formatnya. Contoh berikut menunjukkan cara melakukannya:

      • N tahun kemudian: $[add_months(yyyymmdd,12*N)]

      • N tahun sebelumnya: $[add_months(yyyymmdd,-12*N)]

      • N bulan sebelumnya: $[add_months(yyyymmdd,-N)]

      • N minggu kemudian: $[yyyymmdd+7*N]

      • N bulan kemudian: $[add_months(yyyymmdd,N)]

      • N minggu sebelumnya: $[yyyymmdd-7*N]

      • N hari kemudian: $[yyyymmdd+N]

      • N hari sebelumnya: $[yyyymmdd-N]

      • N jam kemudian: $[hh24miss+N/24]

      • N jam sebelumnya: $[hh24miss-N/24]

      • N menit kemudian: $[hh24miss+N/24/60]

      • N menit sebelumnya: $[hh24miss-N/24/60]

      Catatan
      • Gunakan tanda kurung ([]) untuk mengedit rumus yang menghitung nilai variabel kustom. Misalnya, key1=$[yyyy-mm-dd].

      • Secara default, satuan untuk variabel kustom adalah hari. Misalnya, $[hh24miss-N/24/60] menunjukkan hasil dari (yyyymmddhh24miss-(N/24/60 × 1 hari)). Hasilnya dalam format hh24miss.

      • Satuan untuk add_months adalah bulan. Misalnya, $[add_months(yyyymmdd,12*N)-M/24/60] menunjukkan hasil dari (yyyymmddhh24miss-(12 × N × 1 bulan))-(M/24/60 × 1 hari). Hasilnya dalam format yyyymmdd.

  5. Klik ikon ** untuk menjalankan kode.

  6. Anda dapat melihat hasilnya di operation Log.

Eksperimen pengisian ulang data

Jika Anda memiliki sejumlah besar data historis yang dihasilkan sebelum tanggal eksekusi saat ini, Anda perlu melakukan sinkronisasi otomatis dan partisi. Untuk melakukannya, buka Operation Center di DataWorks, pilih node sinkronisasi data saat ini, lalu gunakan fitur Data Backfill.

  1. Filter data historis di RDS berdasarkan tanggal.

    Anda dapat mengatur kondisi Data Filtering di bagian Data Source pada node sinkronisasi. Misalnya, atur kondisinya menjadi ${bizdate}.

  2. Lakukan pengisian ulang data. Untuk informasi selengkapnya, lihat Lakukan operasi pengisian ulang data dan lihat instans pengisian ulang data (versi baru).

  3. Lihat hasil ekstraksi data dari RDS di log eksekusi.

    Log eksekusi menunjukkan bahwa MaxCompute secara otomatis membuat partisi.

  4. Verifikasi hasilnya. Jalankan perintah berikut pada klien MaxCompute untuk melihat status penulisan data.

    SELECT count(*) from ods_user_info_d where dt = 20180913;

Gunakan hash untuk menerapkan partisi berdasarkan bidang non-tanggal

Jika Anda memiliki sejumlah besar data, atau ingin mempartisi dataset lengkap awal berdasarkan bidang non-tanggal, seperti provinsi, alih-alih bidang tanggal, Integrasi Data tidak dapat membuat partisi tersebut secara otomatis. Dalam kasus ini, Anda dapat menerapkan fungsi hash pada suatu bidang di RDS untuk menyimpan catatan yang memiliki nilai bidang yang sama secara otomatis ke partisi MaxCompute yang sesuai.

  1. Sinkronkan semua data ke tabel sementara di MaxCompute dan buat node skrip SQL. Jalankan perintah berikut.

    drop table if exists ods_user_t;
    CREATE TABLE ods_user_t ( 
            dt STRING,
            uid STRING,
            gender STRING,
            age_range STRING,
            zodiac STRING);
    --Simpan data dari tabel MaxCompute ke tabel sementara.
    insert overwrite table ods_user_t select dt,uid,gender,age_range,zodiac from ods_user_info_d;         
  2. Buat node tugas sinkronisasi sederhana bernama mysql_to_odps. Tugas ini menyinkronkan semua data dari RDS ke MaxCompute tanpa mengatur partisi.

  3. Gunakan pernyataan SQL untuk mempartisi data secara dinamis ke tabel tujuan. Perintah berikut adalah contohnya.

    drop table if exists ods_user_d;
    //Buat tabel terpartisi ODPS (tabel tujuan).
        CREATE TABLE ods_user_d (
        uid STRING,
            gender STRING,
            age_range STRING,
            zodiac STRING
    )
    PARTITIONED BY (
        dt STRING
    );
    //Jalankan pernyataan SQL partisi dinamis. Sistem secara otomatis membuat partisi berdasarkan bidang dt dari tabel sementara. Untuk setiap nilai unik di bidang dt, partisi dibuat dengan nilai tersebut.
    //Misalnya, jika beberapa data di bidang dt adalah 20181025, partisi dt=20181025 secara otomatis dibuat di tabel terpartisi ODPS.
    //Pernyataan SQL partisi dinamis adalah sebagai berikut.
    //Perhatikan bahwa bidang dt ditambahkan ke pernyataan SELECT untuk menentukan bahwa partisi dibuat secara otomatis berdasarkan bidang ini.
    insert overwrite table ods_user_d partition(dt)select dt,uid,gender,age_range,zodiac from ods_user_t;
    //Setelah impor selesai, Anda dapat menghapus tabel sementara untuk menghemat biaya penyimpanan.
    drop table if exists ods_user_t;

    Di MaxCompute, Anda dapat menggunakan pernyataan SQL untuk menyelesaikan sinkronisasi data.

  4. Konfigurasikan ketiga node untuk dijalankan secara berurutan dalam alur kerja.

  5. Lihat progres eksekusi. Perhatikan khusus proses partisi dinamis pada node terakhir.

    **

  6. Verifikasi hasilnya. Jalankan perintah berikut pada klien MaxCompute untuk melihat status penulisan data.

    SELECT count(*) from ods_user_d where dt = 20180913;