All Products
Search
Document Center

Realtime Compute for Apache Flink:Pernyataan CREATE DATABASE AS (CDAS)

Last Updated:May 07, 2026

Pernyataan CREATE DATABASE AS (CDAS) menyinkronkan skema tabel dan data di seluruh database secara real time, termasuk perubahan skema. Gunakan pernyataan ini untuk mereplikasi beberapa atau semua tabel dari database sumber ke tujuan tanpa perlu membuat tabel sink secara manual terlebih dahulu.

Untuk pekerjaan baru, gunakan YAML untuk data ingestion sebagai gantinya. YAML mendukung semua kemampuan inti CDAS—sinkronisasi database dan tabel, evolusi skema, kolom terhitung kustom, sinkronisasi log biner mentah, filter klausa WHERE, dan pemangkasan kolom—dan memungkinkan Anda mengonversi draf SQL yang ada berisi pernyataan CTAS atau CDAS. Untuk detailnya, lihat Data ingestion dengan Flink CDC.

Cara kerja

CDAS merupakan syntactic sugar dari CREATE TABLE AS (CTAS). Saat menjalankan pernyataan CDAS, Realtime Compute for Apache Flink:

  1. Memeriksa apakah database tujuan dan tabel sink sudah ada.

    • Jika database tujuan belum ada, Flink membuatnya melalui katalog tujuan.

    • Jika sudah ada, Flink memeriksa tabel sink:

      • Jika tabel sink tidak ada, Flink membuatnya dengan nama dan skema yang mencerminkan tabel sumber.

      • Jika tabel sink sudah ada, Flink melewati pembuatan tabel.

  2. Memulai pekerjaan sinkronisasi data. Data dan perubahan skema direplikasi terus-menerus dari database sumber ke tujuan.

Mengapa menggunakan CDAS alih-alih beberapa pernyataan CTAS:

  • Sintaks yang disederhanakan: Flink secara otomatis mengembangkan satu pernyataan CDAS menjadi satu pernyataan CTAS per tabel.

  • Penggunaan resource yang dioptimalkan: Flink menggunakan satu vertex sumber untuk membaca dari semua tabel yang sesuai. Untuk sumber MySQL Change Data Capture (CDC), hal ini mengurangi koneksi database, mencegah pembacaan log biner yang redundan, dan menurunkan beban baca keseluruhan pada database MySQL.

Kemampuan inti

Sinkronisasi data

Fitur Deskripsi
Sinkronkan database Melakukan sinkronisasi data penuh dan inkremental dari beberapa tabel (atau semua tabel) dalam database ke masing-masing tabel sink terkait.
Konsolidasi dan sinkronkan shard database Mencocokkan nama tabel sumber di seluruh shard database menggunakan ekspresi reguler, mengonsolidasi tabel-tabel tersebut, dan menyinkronkannya ke sink yang sesuai.
Sinkronkan tabel baru Menyinkronkan tabel yang baru ditambahkan dengan merestart pekerjaan Anda dari titik simpan (savepoint).
Jalankan beberapa pernyataan CDAS dan CTAS sebagai satu pekerjaan Memungkinkan Anda menggunakan pernyataan STATEMENT SET untuk mengirimkan beberapa pernyataan CDAS dan CTAS sebagai satu pekerjaan. Anda juga dapat menggabungkan dan menggunakan kembali data operator tabel sumber untuk mengurangi beban baca pada sumber data.

Evolusi skema

Saat CDAS menyinkronkan database, perubahan skema—seperti penambahan kolom—secara otomatis disebarkan ke sink. Perilaku dan kebijakannya sama seperti pada CTAS. Lihat Evolusi skema.

Prasyarat

Sebelum memulai, pastikan Anda telah:

  • Mendaftarkan katalog tujuan di ruang kerja. Lihat Catalogs.

Batasan

Batasan sintaks

  • Debugging draf SQL yang berisi pernyataan CDAS tidak didukung.

  • MiniBatch tidak didukung.

    Penting

    Hapus semua konfigurasi MiniBatch sebelum membuat draf SQL dengan pernyataan CTAS atau CDAS: 1. Buka O&M > Configurations. 2. Pilih tab Deployment Defaults. 3. Di bagian Other Configuration, pastikan konfigurasi MiniBatch telah dihapus. Jika Anda menemui error "Currently does not support merge StreamExecMiniBatchAssigner type ExecNode in CTAS/CDAS syntax" saat membuat atau memulai deployment, lihat Bagaimana cara memperbaiki error ini?

Konektor yang didukung

Konektor Sumber Sink Catatan
MySQL Ya Tidak View tidak dapat disinkronkan.
Kafka Ya Tidak
MongoDB Ya Tidak Konsolidasi shard tabel dan database tidak didukung. Metadata MongoDB tidak dapat disinkronkan. Untuk pengaturan, lihat Kelola katalog MongoDB.
Upsert Kafka Tidak Ya
Hologres Tidak Ya Flink membuat koneksi untuk setiap tabel berdasarkan opsi connectionSize. Konfigurasikan pool bersama dengan connectionPoolName. Jika tipe data sumber tidak didukung oleh fixed plans Hologres, gunakan INSERT INTO sebagai gantinya—jangan gunakan pernyataan CTAS, karena performa penulisan lebih rendah akibat fixed plans tidak dapat digunakan. Hanya untuk instans Hologres eksklusif—instans shared cluster tidak didukung.
StarRocks Tidak Ya Terbatas pada StarRocks di Alibaba Cloud EMR.
Paimon Tidak Ya

Menyinkronkan data ke tabel sink Paimon dari metastore DLF 2.5 didukung untuk VVR 11.1 atau versi lebih baru.

Catatan penggunaan

Sinkronisasi tabel baru

  • VVR 8.0.6 atau lebih baru: Restart pekerjaan dari titik simpan setelah tabel baru ditambahkan. Lihat Sinkronkan tabel baru.

  • VVR 8.0.5 atau lebih lama: Restart pekerjaan tidak menangkap tabel baru. Gunakan salah satu pendekatan berikut sebagai gantinya:

    Pendekatan Langkah-langkah
    Buat pekerjaan baru untuk tabel baru Biarkan pekerjaan yang ada tetap berjalan. Buat pekerjaan terpisah yang hanya menargetkan tabel baru. Contoh: CREATE TABLE IF NOT EXISTS new_table AS TABLE mysql.tpcds.new_table /*+ OPTIONS('server-id'='8008-8010') */;
    Bersihkan dan restart dari awal 1. Batalkan pekerjaan yang ada. 2. Bersihkan data yang telah disinkronkan di sink. 3. Restart pekerjaan tanpa state.

Akses lintas akun dan RAM

Berikan izin baca/tulis yang diperlukan ke akun Anda saat mengakses resource eksternal lintas akun atau sebagai RAM user atau RAM role.

Sintaks

CREATE DATABASE IF NOT EXISTS <target_database>
[COMMENT database_comment]
[WITH (key1=val1, key2=val2, ...)]
AS DATABASE <source_database>
INCLUDING { ALL TABLES | TABLE 'table_name' }
[EXCLUDING TABLE 'table_name']
[/*+ OPTIONS(key1=val1, key2=val2, ... ) */]

<target_database>:
  [catalog_name.]db_name

<source_database>:
  [catalog_name.]db_name
`IF NOT EXISTS` wajib digunakan. Ini memberi tahu Flink untuk memeriksa apakah tabel sink sudah ada di tujuan. Jika tidak ada, Flink membuatnya; jika sudah ada, Flink melewati pembuatan.
Tabel sink memiliki skema yang sama dengan tabel sumber—nama dan tipe field fisik serta kunci primer—tetapi tidak mencakup kolom terhitung, field metadata, dan konfigurasi watermark.
Flink melakukan pemetaan tipe data dari sumber ke sink. Untuk detailnya, lihat dokumentasi konektor terkait.

Parameter

Parameter Deskripsi
target_database Nama database tujuan, opsional dengan awalan nama katalog: [catalog_name.]db_name.
COMMENT Deskripsi untuk database tujuan. Nilai default mengikuti deskripsi database sumber.
WITH Opsi untuk database tujuan. Kunci dan nilai harus berupa string, contohnya 'sink.parallelism' = '4'. Lihat Catalogs untuk opsi spesifik konektor.
source_database Nama database sumber, opsional dengan awalan nama katalog: [catalog_name.]db_name.
INCLUDING ALL TABLES Menyinkronkan semua tabel di database sumber.
INCLUDING TABLE Menentukan tabel yang akan disinkronkan. Pisahkan beberapa tabel dengan |. Mendukung ekspresi reguler—misalnya, INCLUDING TABLE 'web.*' mencocokkan semua tabel dengan nama yang dimulai dengan web.
EXCLUDING TABLE Menentukan tabel yang dikecualikan dari sinkronisasi. Pisahkan beberapa tabel dengan |. Mendukung ekspresi reguler—misalnya, EXCLUDING TABLE 'tmp.*' mengecualikan semua tabel dengan nama yang dimulai dengan tmp.
OPTIONS Opsi konektor untuk tabel sumber. Kunci dan nilai harus berupa string, contohnya 'server-id' = '65500'. Lihat Konektor yang didukung.

Contoh

Sinkronkan database

Menyinkronkan semua tabel dari database MySQL tpcds ke Hologres.

Prasyarat:

  • Katalog Hologres bernama holo telah dibuat di ruang kerja.

  • Katalog MySQL bernama mysql telah dibuat di ruang kerja.

USE CATALOG holo;

CREATE DATABASE IF NOT EXISTS holo_tpcds          -- Buat holo_tpcds di Hologres.
WITH ('sink.parallelism' = '4')                   -- Atur parallelisme sink (default: 4 untuk Hologres).
AS DATABASE mysql.tpcds INCLUDING ALL TABLES      -- Sinkronkan semua tabel dari mysql.tpcds.
/*+ OPTIONS('server-id'='8001-8004') */;          -- Konfigurasi opsi sumber MySQL CDC.
Opsi yang ditetapkan dalam klausa WITH hanya berlaku untuk pekerjaan saat ini dan mengontrol perilaku penulisan. Opsi tersebut tidak dipertahankan di katalog Hologres. Untuk opsi yang didukung, lihat Hologres.

Konsolidasi dan sinkronkan shard database

Gabungkan semua tabel dengan nama identik di beberapa shard database MySQL menjadi tabel Hologres tunggal.

Skenario: Instans MySQL memiliki shard bernama order_db01 hingga order_db99. Setiap shard berisi tabel seperti order dan order_detail. Semua data shard—termasuk perubahan skema—harus masuk ke Hologres.

Solusi: Gunakan ekspresi reguler pada nama database untuk mencocokkan semua shard. Nama database dan tabel ditambahkan ke setiap tabel sink sebagai dua field tambahan. Kunci primer Hologres mencakup nama database, nama tabel, dan kolom kunci primer tabel sumber untuk memastikan keunikan. Tidak perlu membuat tabel target terlebih dahulu.

USE CATALOG holo;

CREATE DATABASE IF NOT EXISTS holo_order              -- Buat holo_order di Hologres.
WITH('sink.parallelism'='4')                          -- Atur parallelisme sink (opsional).
AS DATABASE mysql.`order_db[0-9]+` INCLUDING ALL TABLES  -- Cocokkan semua shard order_db.
/*+ OPTIONS('server-id'='8001-8004') */;              -- Konfigurasi opsi sumber MySQL CDC (opsional).

Tabel dengan nama identik di seluruh shard digabung menjadi satu tabel Hologres.

Sinkronkan tabel baru

Setelah pekerjaan CDAS yang sedang berjalan dimulai, aktifkan deteksi tabel baru dan restart dari titik simpan untuk menangkap tabel yang baru ditambahkan.

Deteksi tabel baru memerlukan VVR 8.0.6 atau lebih baru. Mode startup tabel sumber harus initial.
  1. Di halaman Deployments, temukan deployment target dan klik Cancel di kolom Actions.

  2. Di dialog, perluas More Strategies, pilih Stop With Savepoint, lalu klik OK.

  3. Di draf SQL, tambahkan pernyataan berikut:

    SET 'table.cdas.scan.newly-added-table.enabled' = 'true';
  4. Klik Deploy.

  5. Pulihkan pekerjaan dari titik simpan:

    1. Di halaman Deployments, klik nama deployment.

    2. Di halaman detail deployment, klik tab State, lalu subtab History.

    3. Di daftar Savepoints, temukan titik simpan yang dibuat saat Anda menghentikan pekerjaan.

    4. Pilih More > Start job from this savepoint pada kolom Actions. Lihat Memulai pekerjaan.

Jalankan beberapa pernyataan CDAS dan CTAS sebagai satu pekerjaan

Menyinkronkan beberapa database dalam satu pekerjaan untuk memaksimalkan penggunaan ulang sumber.

Skenario: Sinkronkan tpcds, tpch, dan shard user_db01user_db99 ke Hologres dalam satu pekerjaan.

Solusi: Bungkus semua pernyataan dalam blok STATEMENT SET. Flink menggunakan ulang satu vertex sumber di semua pernyataan, mengurangi jumlah server ID, koneksi database, dan beban baca keseluruhan—terutama untuk sumber MySQL CDC.

Penting
USE CATALOG holo;

BEGIN STATEMENT SET;

-- Sinkronkan tabel user dari semua shard user_db.
CREATE TABLE IF NOT EXISTS user
AS TABLE mysql.`user_db[0-9]+`.`user[0-9]+`
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sinkronkan database tpcds.
CREATE DATABASE IF NOT EXISTS holo_tpcds
AS DATABASE mysql.tpcds INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sinkronkan database tpch.
CREATE DATABASE IF NOT EXISTS holo_tpch
AS DATABASE mysql.tpch INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

END;

Sinkronkan beberapa database MySQL ke Kafka

Menyinkronkan tabel dari beberapa database MySQL ke Kafka sambil menghindari konflik nama topik.

Skenario: Tabel dengan nama yang sama ada di tpcds dan tpch. Mengirim keduanya ke topik Kafka yang sama akan menimpa data.

Solusi: Gunakan opsi cdas.topic.pattern untuk menghasilkan nama topik unik per database. Placeholder {table-name} diganti saat runtime dengan nama tabel aktual. Misalnya, 'cdas.topic.pattern'='tpcds-{table-name}' mengarahkan table1 dari tpcds ke topik tpcds-table1.

USE CATALOG kafkaCatalog;

BEGIN STATEMENT SET;

-- Sinkronkan database tpcds. Nama topik mengikuti pola "tpcds-<table_name>".
CREATE DATABASE IF NOT EXISTS kafka
WITH ('cdas.topic.pattern' = 'tpcds-{table-name}')
AS DATABASE mysql.tpcds INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

-- Sinkronkan database tpch. Nama topik mengikuti pola "tpch-<table_name>".
CREATE DATABASE IF NOT EXISTS kafka
WITH ('cdas.topic.pattern' = 'tpch-{table-name}')
AS DATABASE mysql.tpch INCLUDING ALL TABLES
/*+ OPTIONS('server-id'='8001-8004') */;

END;

Menggunakan Kafka sebagai lapisan perantara antara MySQL dan Flink juga mengurangi beban pada MySQL. Lihat Sinkronkan database MySQL ke Kafka dengan Flink CDC.

FAQ

Error runtime

Performa pekerjaan

Sinkronisasi data

Langkah selanjutnya