Anda dapat menggunakan tugas penjadwalan DataWorks untuk mengimpor data secara berkala dari tabel partisi MaxCompute ke tabel partisi Hologres. Hal ini menjamin integritas dan akurasi data, menggabungkan keunggulan kedua platform, serta meningkatkan efisiensi dan keandalan pemrosesan data.
Prasyarat
Beli dan aktifkan instans Hologres. Untuk informasi selengkapnya, lihat Beli instans Hologres.
Aktifkan MaxCompute dan buat proyek. Untuk informasi selengkapnya, lihat Aktifkan MaxCompute.
Aktifkan DataWorks dan buat ruang kerja. Untuk informasi selengkapnya, lihat Buat ruang kerja.
Catatan penggunaan
Pastikan layanan skema tidak diaktifkan untuk penyewa atau proyek MaxCompute. Untuk informasi lebih lanjut tentang skema, lihat operasi skema.
Persiapan data
Topik ini menggunakan tabel partisi dwd_product_movie_basic_info dari dataset publik MaxCompute public_data sebagai contoh. Kode berikut menunjukkan skema tabel dwd_product_movie_basic_info.
-- DDL untuk tabel partisi MaxCompute
CREATE TABLE IF NOT EXISTS public_data.dwd_product_movie_basic_info(
movie_name STRING COMMENT 'Nama film.',
director STRING COMMENT 'Sutradara.',
scriptwriter STRING COMMENT 'Penulis naskah.',
area STRING COMMENT 'Wilayah atau negara produksi.',
actors STRING COMMENT 'Pemeran.',
`type` STRING COMMENT 'Genre.',
movie_length STRING COMMENT 'Durasi film.',
movie_date STRING COMMENT 'Tanggal rilis.',
movie_language STRING COMMENT 'Bahasa.',
imdb_url STRING COMMENT 'ID IMDB.'
)
PARTITIONED BY (ds STRING) STORED AS ALIORC;Prosedur
Persiapkan data MaxCompute.
Masuk ke Konsol DataWorks, alihkan ke wilayah tujuan, lalu di 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 melihat data pada partisi
20170112, lalu klik Run.SELECT * FROM public_data.dwd_product_movie_basic_info WHERE ds = '20170112';
Buat tabel eksternal di Hologres.
Urutan kolom dan tipe data tabel eksternal harus sesuai dengan tabel MaxCompute.
Masuk ke halaman HoloWeb SQL Editor.
Di bawah tab SQL Editor, klik ikon
untuk membuka jendela Ad-hoc Query. Di bilah alat jendela kueri, pilih Instance Name dan Database untuk instans Hologres Anda.Di editor Ad-hoc Query, masukkan pernyataan berikut lalu klik Run.
Pernyataan berikut menggunakan perintah
IMPORT FOREIGN SCHEMAuntuk membuat tabel eksternal Hologres bernamadwd_product_movie_basic_info.IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update');
Buat tabel internal di Hologres.
Buat tabel internal di Hologres untuk menerima dan menyimpan data.
Di halaman pengembangan HoloWeb, klik Ad-hoc Query.
Di jendela Ad-hoc Query yang baru, pilih Instance Name dan Database Anda. Lalu, masukkan pernyataan berikut di editor SQL dan klik Run.
Karena contoh ini mengimpor data dari tabel partisi MaxCompute, tabel internal tujuan di Hologres juga harus berupa tabel partisi.
CatatanPernyataan DDL berikut hanya merupakan contoh sederhana. Untuk kinerja kueri optimal, buat tabel dan atur indeks yang sesuai berdasarkan kebutuhan bisnis aktual Anda.
BEGIN; CREATE TABLE "public"."holo_dwd_product_movie_basic_info" ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ) PARTITION BY LIST (ds); CALL SET_TABLE_PROPERTY('"public"."holo_dwd_product_movie_basic_info"', 'orientation', 'column'); COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_name" IS 'Nama film.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."director" IS 'Sutradara.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."scriptwriter" IS 'Penulis naskah.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."area" IS 'Wilayah atau negara produksi.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."actors" IS 'Pemeran.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."type" IS 'Genre.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_length" IS 'Durasi film.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_date" IS 'Tanggal rilis.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."movie_language" IS 'Bahasa.'; COMMENT ON COLUMN "public"."holo_dwd_product_movie_basic_info"."imdb_url" IS 'ID IMDB.'; COMMIT;
Kembangkan tugas impor data.
Pada langkah ini, Anda membuat node SQL Hologres untuk menjalankan pekerjaan terjadwal pada tabel partisi.
Masuk ke Konsol DataWorks, buka halaman Pengembangan Data, lalu buat node SQL Hologres. Untuk informasi selengkapnya, lihat Node SQL Hologres.
Di editor node, masukkan pernyataan berikut.
Anda tidak dapat langsung menulis data partisi ke tabel partisi induk di Hologres. Anda harus terlebih dahulu membuat tabel partisi anak di Hologres yang sesuai dengan nilai kunci partisi dari tabel partisi sumber MaxCompute. Setelah itu, Anda dapat mengimpor data partisi ke tabel partisi anak yang sesuai. Nilai kunci partisi dikendalikan oleh parameter
${bizdate}, yang secara otomatis diberi nilai oleh sistem penjadwalan untuk memungkinkan penjadwalan berkala. Untuk informasi selengkapnya tentang parameter penjadwalan, lihat Format yang didukung untuk parameter penjadwalan.CatatanData partisi yang diimpor harus sesuai dengan nilai kunci partisi (dalam contoh ini,
ds). Jika tidak, akan terjadi error.Dua skenario berikut menunjukkan pendekatan berbeda. Pilih salah satu berdasarkan logika bisnis Anda.
Skenario 1: Impor data partisi baru.
-- Buat tabel partisi anak sementara. BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- Perbarui skema tabel eksternal. IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Tunggu 30 detik sebelum mengimpor data ke Hologres untuk mencegah kegagalan sinkronisasi akibat pembaruan cache metadata yang lambat di Hologres. SELECT pg_sleep(30); -- Impor data dari MaxCompute ke tabel partisi anak sementara. INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- Impor data partisi baru. BEGIN; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- Lampirkan tabel partisi anak baru ke tabel partisi induk. ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT;Skenario 2: Segarkan ulang data partisi historis.
-- Buat tabel partisi anak sementara. BEGIN; CREATE TABLE IF NOT EXISTS "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} ( "movie_name" TEXT, "director" TEXT, "scriptwriter" TEXT, "area" TEXT, "actors" TEXT, "type" TEXT, "movie_length" TEXT, "movie_date" TEXT, "movie_language" TEXT, "imdb_url" TEXT, "ds" TEXT ); COMMIT; -- Perbarui skema tabel eksternal. IMPORT FOREIGN SCHEMA public_data LIMIT TO (dwd_product_movie_basic_info) FROM SERVER odps_server INTO public OPTIONS(if_table_exist 'update'); -- Tunggu 30 detik sebelum mengimpor data ke Hologres untuk mencegah kegagalan sinkronisasi akibat pembaruan cache metadata yang lambat di Hologres. SELECT pg_sleep(30); -- Impor data dari MaxCompute ke tabel partisi anak sementara. INSERT INTO "public".tmp_holo_dwd_product_movie_basic_info_${bizdate} SELECT "movie_name", "director", "scriptwriter", "area", "actors", "type", "movie_length", "movie_date", "movie_language", "imdb_url", "ds" FROM "public".dwd_product_movie_basic_info WHERE ds='${bizdate}'; -- Segarkan ulang data partisi historis. BEGIN; ALTER TABLE IF EXISTS holo_dwd_product_movie_basic_info DETACH PARTITION holo_dwd_product_movie_basic_info_${bizdate}; DROP TABLE IF EXISTS holo_dwd_product_movie_basic_info_${bizdate}; ALTER TABLE tmp_holo_dwd_product_movie_basic_info_${bizdate} RENAME TO holo_dwd_product_movie_basic_info_${bizdate}; -- Lampirkan tabel partisi anak ke tabel partisi induk. ALTER TABLE holo_dwd_product_movie_basic_info ATTACH PARTITION holo_dwd_product_movie_basic_info_${bizdate} FOR VALUES IN ('${bizdate}'); COMMIT;
Konfigurasikan properti penjadwalan.
Di halaman editor node Hologres SQL, klik Configure Scheduling di panel kanan untuk mengonfigurasi properti penjadwalan node.
CatatanUbah parameter berikut dan biarkan sisanya tetap pada nilai default.
Properti dasar
Parameter
Nilai
Parameters
bizdate=${yyyymmdd}
Properti waktu: Di bagian Time Properties, atur Scheduling Type ke Normal Scheduling, pertahankan Validity Period default (1970-01-01 hingga 9999-01-01), atur Scheduling Cycle ke Day, atur Timeout ke System Default, dan jangan centang Depends on Previous Cycle.
Parameter
Nilai
Instance generation mode
Immediately After Deployment
Rerun
Allow upon Failure Only
Scheduled time
00:05
Dependensi penjadwalan
Anda dapat mengatur dependensi ke node root atau node induk yang sudah ada berdasarkan logika bisnis Anda. Pertama, atur Automatic Parsing ke On, lalu klik Parse Lineage. Sistem akan secara otomatis mengurai node root. Kemudian, atur Automatic Parsing ke Off.
Publikasikan node penjadwalan.
Di halaman editor node Hologres SQL, klik ikon
di bilah alat untuk menyimpan node.Klik ikon
di bilah alat untuk mengirimkan node.Di kotak dialog Submit New Version, masukkan Change description.
Klik OK.
Jalankan node di Operation Center.
Di halaman editor node Hologres SQL, klik O&M di pojok kanan atas.
Di panel navigasi kiri halaman Operation Center, pilih Auto Triggered Nodes Maintenance > Recurring Job.
Di halaman Recurring Job, klik kanan node tersebut lalu pilih Backfill Data > Current Node.
Di panel navigasi kiri, pilih Assistant > Data Backfill untuk melihat tugas yang sedang berjalan beserta statusnya.
Lihat data.
Setelah tugas berhasil dijalankan, Hologres secara otomatis membuat tabel partisi anak untuk data partisi tersebut.
Buat node SQL Hologres di halaman Pengembangan Data. Untuk informasi selengkapnya, lihat Node SQL Hologres.
Di halaman editor node, masukkan pernyataan berikut untuk mengkueri data.
Lihat data di tabel partisi anak.
SELECT * FROM holo_dwd_product_movie_basic_info_20170112;Lihat jumlah total baris di tabel partisi induk.
SELECT COUNT (*) FROM holo_dwd_product_movie_basic_info;