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
Siapkan Data MaxCompute.
Masuk ke Konsol MaxCompute.
Di panel navigasi kiri, pilih .
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 ) ;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) ;
Buat Tabel di Hologres.
Buat Tabel Asing.
Masuk ke Database.
Di Konsol HoloWeb, klik Metadata Management di bilah navigasi atas.
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.

Buat Tabel Asing.
Di pojok kiri atas tab SQL Editor, klik ikon
.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.
Masuk ke Database.
Di Konsol HoloWeb, klik Metadata Management di bilah navigasi atas.
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.

Buat Tabel yang Dipartisi.
Di pojok kiri atas tab SQL Editor, klik ikon
.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;
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:
CatatanHologres 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;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 ;
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;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:
CatatanHologres 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.
Pergi ke Halaman Utama Migration Assistant di DataWorks. Untuk informasi lebih lanjut, lihat Pergi ke Halaman Migration Assistant.
Di panel navigasi kiri halaman Migration Assistant, pilih .
Di pojok kanan atas halaman DataWorks import, klik Create Import Task.
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.
Klik OK. Di halaman Import Task Settings, konfigurasikan pemetaan.
Klik Import di pojok kanan atas. Di pesan Confirm, klik OK.
Setelah paket diimpor, alur kerja yang dipicu otomatis muncul di DataStudio.
Pernyataan DDL yang relevan muncul di alur kerja yang dipicu manual.