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 Beli instans Hologres.
-
Anda telah mengaktifkan MaxCompute dan membuat Proyek. Untuk informasi selengkapnya, lihat Aktifkan MaxCompute.
-
Anda telah mengaktifkan DataWorks dan membuat ruang kerja. Untuk informasi selengkapnya, lihat Buat ruang kerja.
Latar Belakang
Menggunakan tabel eksternal di Hologres untuk mengakses data MaxCompute merupakan pola ingesti data yang umum. Untuk impor berulang, Anda dapat memanfaatkan kemampuan penjadwalan dan orkestrasi Pekerjaan yang andal dari DataWorks untuk mengonfigurasi satu Pekerjaan periodik yang mengotomatiskan alur kerja impor. Untuk informasi selengkapnya, lihat Contoh Pekerjaan DataWorks.
Karena Pekerjaan tersebut kompleks, Anda dapat menggunakan asisten migrasi DataWorks untuk mengimpor file contoh Pekerjaan ke dalam Proyek Anda. Hal ini menyediakan alur kerja siap pakai yang dapat Anda sesuaikan dengan mengubah parameter atau skrip agar sesuai dengan kebutuhan bisnis spesifik Anda. Untuk informasi selengkapnya, lihat Impor Pekerjaan DataWorks menggunakan asisten migrasi.
Catatan Penggunaan
-
Tabel temporary digunakan untuk menjamin atomicity. Data hanya disambungkan ke tabel partisi setelah impor selesai, sehingga menghindari kebutuhan operasi pembersihan manual seperti penghapusan tabel jika tugas impor gagal.
-
Saat memperbarui data di partisi anak, Anda harus menghapus tabel anak lama dan menyambungkan tabel temporary baru dalam satu transaksi untuk menjamin konsistensi transaksional.
-
Kondisi berikut harus dipenuhi untuk mengimpor Pekerjaan DataWorks menggunakan asisten migrasi:
-
Edisi DataWorks Anda harus Edisi Standar atau yang lebih baru. Untuk informasi selengkapnya, lihat Edisi DataWorks.
-
Ruang kerja DataWorks harus di-bind ke sumber data MaxCompute dan Hologres. Untuk informasi selengkapnya, lihat Konfigurasi ruang kerja.
-
Prosedur
-
Siapkan data MaxCompute
-
Login ke Konsol DataWorks, beralih ke Wilayah tujuan, lalu pada panel navigasi kiri, pilih . Klik Go to Data Analysis. Di panel navigasi kiri, klik ikon
untuk membuka halaman SQL Query. -
Di halaman SQL Query, masukkan pernyataan SQL berikut untuk membuat tabel partisi, lalu 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 ) ; -
Di halaman SQL Query, masukkan pernyataan SQL berikut untuk mengimpor data ke tabel partisi, lalu klik Run.
-- Add the 20210815 partition to the source table. ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210815') ; -- Write data to 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 the 20210816 partition to the source table. ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210816') ; -- Write data to 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 the 20210817 partition to the source table. ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210817') ; -- Write data to 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 the 20210818 partition to the source table. ALTER TABLE odps_sale_detail ADD IF NOT EXISTS PARTITION(sale_date='20210818') ; -- Write data to 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) ;
-
-
Buat tabel di Hologres
-
Buat tabel eksternal
-
Login ke database.
-
Di halaman pengembangan HoloWeb, klik Metadata Management.
-
Di halaman Metadata Management, klik ganda nama database yang telah Anda buat di pohon direktori sebelah kiri, lalu klik OK.

-
-
Buat tabel eksternal
-
Di halaman SQL Editor, klik ikon
di pojok kiri atas untuk membuat kueri SQL baru. -
Di halaman Ad-hoc Query yang baru, pilih Instance Name dan Database Anda. Di editor SQL, masukkan pernyataan berikut lalu 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)
-
Login ke database.
-
Di halaman pengembangan HoloWeb, klik Metadata Management.
-
Di halaman Metadata Management, klik ganda nama database yang telah Anda buat di pohon direktori sebelah kiri, lalu klik OK.

-
-
Buat tabel partisi
-
Di halaman SQL Editor, klik ikon
di pojok kiri atas untuk membuat kueri SQL baru. -
Di halaman Ad-hoc Query yang baru, pilih Instance Name dan Database Anda. Di editor SQL, masukkan pernyataan berikut lalu 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;
-
-
-
-
Impor data partisi ke tabel temporary Hologres
Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL lalu klik Run.
Pernyataan SQL ini mengimpor partisi 20210816 dari tabel partisi odps_sale_detail di Proyek MaxCompute hologres_test ke partisi 20210816 dari tabel partisi holo_sale_detail di Hologres.
CatatanHologres V2.1.17 dan versi lebih baru mendukung Serverless Computing. Untuk skenario seperti impor data offline skala besar, Pekerjaan ETL besar, dan kueri volume tinggi pada tabel eksternal, Anda dapat menggunakan Serverless Computing untuk menjalankan tugas-tugas tersebut. Fitur ini menggunakan sumber daya serverless tambahan alih-alih sumber daya instans Anda, sehingga meningkatkan stabilitas instans dan mengurangi kemungkinan error kehabisan memori (OOM). Anda tidak perlu menyediakan sumber daya komputasi tambahan untuk instans Anda, dan hanya dikenai biaya untuk tugas yang dijalankan. Untuk informasi selengkapnya tentang Serverless Computing, lihat Serverless Computing. Untuk petunjuk penggunaan Serverless Computing, lihat Use Serverless Computing.
-- Clean up any 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) We recommend that you use Serverless Computing to run large-scale offline data 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 configuration to ensure that non-essential SQL queries do not use serverless resources. RESET hg_computing_resource; -
Sambungkan tabel temporary ke tabel partisi Hologres
Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL lalu klik Run.
-
Jika tabel anak lama ada, Anda harus menghapusnya terlebih dahulu, lalu menyambungkan tabel temporary ke tabel partisi Hologres.
Pernyataan SQL ini menghapus tabel anak holo_sale_detail_20210816 dan meng-bind tabel temporary holo_sale_detail_tmp_20210816 ke partisi 20210816 dari tabel partisi holo_sale_detail.
-- Replace the child table if it exists. BEGIN ; -- Delete 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, sambungkan langsung tabel temporary ke tabel partisi Hologres.
Pernyataan SQL ini meng-bind 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 ;
-
-
Jalankan ANALYZE pada tabel partisi Hologres
Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL lalu klik Run.
Pernyataan SQL ini menjalankan
ANALYZEpada tabel partisiholo_sale_detailuntuk mengumpulkan statistik, yang membantu planner kueri menghasilkan rencana eksekusi yang efisien. Saat menjalankanANALYZEpada tabel partisi, Anda hanya perlu menjalankannya pada tabel induk.-- Run ANALYZE on the parent table of the partitioned table after a large data import. ANALYZE holo_sale_detail; -
Bersihkan partisi anak yang kedaluwarsa (opsional)
Di lingkungan produksi, data memiliki siklus hidup, dan Anda harus membersihkan partisi yang melewati periode retensi.
Di halaman Ad-hoc Query, masukkan pernyataan berikut di editor SQL lalu klik Run.
Pernyataan SQL ini membersihkan partisi 20210630.
DROP TABLE IF EXISTS holo_sale_detail_20210630;
Contoh Pekerjaan DataWorks
Dalam operasional harian, Anda sering perlu menjadwalkan pernyataan SQL di atas secara berkala. Anda dapat menggunakan DataWorks untuk penjadwalan dan orkestrasi, serta menggunakan satu Pekerjaan terjadwal untuk mencakup kedua skenario tersebut. Baca bagian berikut dengan cermat agar Anda dapat memperbarui parameter atau skrip agar sesuai dengan kebutuhan bisnis saat Anda mengimpor Pekerjaan DataWorks menggunakan asisten migrasi. Gambar berikut menunjukkan alur kerja keseluruhan.
Modul alur kerja
-
Parameter dasar
Parameter dasar mengelola semua parameter yang digunakan dalam alur kerja. Parameter utama adalah sebagai berikut.
Id
Parameter
Type
Value
Description
1
datepre31
variable
${yyyymmdd-31}
Parameter yang mengontrol pembersihan partisi kedaluwarsa. Nilai ini menentukan bahwa partisi dari 31 hari lalu akan dibersihkan.
2
datetime1
variable
$bizdate
Parameter yang 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
Kunci partisi tabel MaxCompute.
-
Tulis data partisi ke tabel temporary
Langkah ini merupakan modul SQL Hologres. Kode SQL-nya adalah sebagai berikut.
CatatanHologres V2.1.17 dan versi lebih baru mendukung Serverless Computing. Untuk skenario seperti impor data offline skala besar, Pekerjaan ETL besar, dan kueri volume tinggi pada tabel eksternal, Anda dapat menggunakan Serverless Computing untuk menjalankan tugas-tugas tersebut. Fitur ini menggunakan sumber daya serverless tambahan alih-alih sumber daya instans Anda, sehingga meningkatkan stabilitas instans dan mengurangi kemungkinan error kehabisan memori (OOM). Anda tidak perlu menyediakan sumber daya komputasi tambahan untuk instans Anda, dan hanya dikenai biaya untuk tugas yang dijalankan. Untuk informasi selengkapnya tentang Serverless Computing, lihat Serverless Computing. Untuk petunjuk penggunaan Serverless Computing, lihat Use Serverless Computing.
-- Clean up any 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; -- (Optional) We recommend that you use Serverless Computing to run large-scale offline data imports and ETL jobs. SET hg_computing_resource = 'serverless'; -- Insert data into the temporary table. INSERT INTO ${holo_table_name}_tmp_${datetime1} SELECT * FROM public.${odps_table_name} WHERE ${partition_key}='${datetime1}'; -- Reset the configuration to ensure that non-essential SQL queries do not use serverless resources. RESET hg_computing_resource;Anda harus meng-bind parameter dasar sebagai input hulu untuk modul ini. Dalam konfigurasi Node Context untuk node ini, bagian Input Parameters of This Node berisi lima parameter:
datetime1,holo_table_name,odps_project,odps_table_name, danpartition_key. Sumber nilai untuk semua parameter adalah node huluholo_doc_test.501890067_out. Tambahkan secara manual. Bagian Output Parameters of This Node kosong. -
Ganti tabel anak
Langkah ini merupakan modul SQL Hologres yang mengganti tabel anak yang sudah ada. Operasi dilakukan dalam satu transaksi untuk menjamin atomicity. Kode SQL-nya adalah sebagai berikut.
-- Replace the child table if it exists. BEGIN ; -- Delete 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 ;Anda harus meng-bind parameter dasar sebagai input hulu untuk modul ini. Di Node Context, di bawah Input Parameters of This Node, tambahkan secara manual parameter
datetime1danholo_table_name. Atur sumber nilainya ke output node huluhologres_doc_test.502282431_out:datetime1danhologres_doc_test.502282431_out:holo_table_name, masing-masing. -
Kumpulkan statistik untuk tabel partisi
Langkah ini merupakan modul SQL Hologres yang mengumpulkan statistik untuk tabel induk. Kode SQL-nya adalah sebagai berikut.
-- Run ANALYZE on the parent table of the partitioned table after a large data import. ANALYZE ${holo_table_name};Anda harus meng-bind parameter dasar sebagai input hulu untuk modul ini. Di panel Node Context, di bagian Input Parameters of This Node, klik Add dan tambahkan secara manual parameter
holo_table_name. Atur sumber nilainya keholo_doc_test.501890067_out:holo_table_name. -
Bersihkan tabel anak yang kedaluwarsa
Di lingkungan produksi, data memiliki siklus hidup, dan Anda harus membersihkan partisi yang melewati periode retensi.
Contoh ini menunjukkan cara menyimpan hanya partisi 31 hari terakhir di Hologres. Karena parameter diatur ke datepre31=${yyyymmdd-31}, kode SQL untuk menghapus tabel anak kedaluwarsa adalah sebagai berikut. Sebelum menghapus tabel anak dari tabel partisi fisik, Anda harus terlebih dahulu melepaskannya dari tabel induk (DETACH PARTITION), lalu menjalankan DROP TABLE. Jika tidak, tabel anak tetap terikat ke tabel induk.
-- Clean up expired child tables: Detach the child partition first, and then drop the table. BEGIN ; ALTER TABLE ${holo_table_name} DETACH PARTITION ${holo_table_name}_${datepre31}; DROP TABLE IF EXISTS ${holo_table_name}_${datepre31}; COMMIT ;Sebagai contoh, jika
bizdateadalah 20200309, makadatepre31adalah 20200207. Hal ini mengatur tanggal pembersihan partisi dengan benar.Anda juga harus meng-bind parameter dasar sebagai input hulu untuk modul ini. Di panel Node Context, di bagian Input Parameters of This Node, klik Add dan tambahkan secara manual dua parameter: nama parameter
datepre31dengan sumber nilai diatur ke output node huluholo_doc_test.501890067_out:datepre31; dan nama parameterholo_table_namedengan sumber nilai diatur ke output node huluholo_doc_test.501890067_out:holo_table_name.
Impor Pekerjaan DataWorks dengan asisten migrasi
-
Karena Pekerjaan tersebut kompleks, Anda dapat menggunakan asisten migrasi DataWorks untuk mengimpor paket Pekerjaan yang disediakan ke dalam Proyek Anda. Hal ini memberikan Pekerjaan DataWorks yang telah dikonfigurasi sebelumnya seperti yang dijelaskan dalam topik ini, yang dapat Anda sesuaikan dengan mengubah parameter atau skrip agar sesuai dengan kebutuhan bisnis spesifik Anda.
-
Unduh paket Pekerjaan berikut: Paket Pekerjaan DataWorks.
-
Buka asisten migrasi DataWorks. Untuk informasi selengkapnya, lihat Open the migration assistant.
-
Di panel navigasi kiri asisten migrasi, klik .
-
Di halaman DataWorks import, klik Create Import Task di pojok kanan atas.
-
Di kotak dialog Create Import Task, konfigurasi parameter.
Parameter
Description
Import Package Name
Nama kustom. Nama impor dapat berisi huruf kapital, huruf kecil, karakter Tionghoa, angka, garis bawah (_), dan titik (.).
Upload Method
Metode untuk mengunggah file.
-
Upload Local File: Gunakan metode ini untuk mengunggah file paket ekspor berukuran 30 MB atau kurang ke ruang kerja DataWorks.
-
OSS Endpoint: Jika file paket ekspor berukuran lebih dari 30 MB, unggah file tersebut ke OSS lalu masukkan URL file di ruang kerja DataWorks Anda. Untuk mendapatkan URL file, buka halaman detail file di Konsol OSS, temukan bagian File Url, lalu salin URL-nya. Untuk informasi selengkapnya tentang cara mengunggah file, lihat Upload files. Untuk informasi selengkapnya tentang cara mendapatkan tautan unduh OSS, lihat Share files.
Remarks
Deskripsi singkat tentang tugas impor.
-
-
Klik OK untuk membuka halaman Import Task Settings, lalu konfigurasi pemetaan.
-
Klik Start Import di pojok kiri bawah, lalu di kotak dialog Confirm, klik OK.
-
Setelah impor berhasil, Pekerjaan terjadwal yang dijelaskan di atas muncul di modul Data Development Anda.
-
Pernyataan DDL terkait juga muncul di alur kerja manual Anda.
-