All Products
Search
Document Center

Hologres:Bangun gudang data real-time dengan Flink dan Hologres

Last Updated:Jun 21, 2026

Bangun gudang data real-time yang efisien dan skalabel dengan menggabungkan kemampuan pemrosesan real-time dari Realtime Compute for Apache Flink dan fitur-fitur canggih Hologres, termasuk Binlog, penyimpanan hibrida baris-kolom, serta isolasi sumber daya yang kuat. Solusi ini membantu Anda mengelola volume data yang terus bertambah dan memenuhi kebutuhan bisnis real-time.

Latar Belakang

Seiring semakin digitalnya bisnis, permintaan akan kesegaran data terus meningkat. Banyak skenario bisnis memerlukan pemrosesan, penyimpanan, dan analisis data secara real-time, melampaui pemrosesan batch offline tradisional. Meskipun gudang data offline memiliki metodologi yang mapan dengan pelapisan data (ODS > DWD > DWS > ADS) melalui pekerjaan terjadwal, kerangka kerja yang jelas dan mapan untuk membangun gudang data real-time masih dalam tahap berkembang. Solusi ini menerapkan konsep Streaming Warehouse untuk menciptakan alur data real-time yang efisien antar lapisan dan mengatasi tantangan pelapisan data real-time.

Skenario

Dokumen ini menggunakan platform e-commerce sebagai contoh untuk menunjukkan cara membangun gudang data real-time dengan integrasi mendalam antara Flink dan Hologres. Konfigurasi ini memungkinkan pemrosesan dan pembersihan data secara real-time, mendukung kueri data dari aplikasi hulu, serta membangun pelapisan dan penggunaan ulang data. Konfigurasi ini mendukung berbagai skenario bisnis, seperti kueri laporan untuk dasbor transaksi, analisis data perilaku, profil pengguna, dan rekomendasi personalisasi.

Arsitektur

  1. Bangun lapisan ODS: Ingesti data dari database bisnis secara real-time.

    MySQL berisi tiga tabel bisnis: orders (tabel pesanan), orders_pay (tabel pembayaran pesanan), dan product_catalog (tabel kamus kategori produk). Flink menyinkronkan ketiga tabel ini ke Hologres secara real-time untuk membentuk lapisan ODS.

  2. Bangun lapisan DWD: Buat tabel lebar real-time.

    Flink melakukan join antara tabel orders, product_catalog, dan orders_pay secara real-time untuk membuat tabel lebar pada lapisan DWD.

  3. Bangun lapisan DWS: Hitung metrik real-time.

    Flink mengonsumsi Binlog dari tabel lebar dalam proses berbasis event, melakukan agregasi data untuk membuat tabel metrik pengguna dan toko pada lapisan DWS.

  4. Layani kueri aplikasi melalui Hologres.

    • Aplikasi dapat melakukan kueri terhadap tabel metrik agregat di lapisan DWS, mendukung jutaan permintaan per detik (RPS).

    • Aplikasi dapat melakukan analisis OLAP pada tabel lebar DWD atau menampilkan laporan real-time berdasarkan datanya, dengan respons dalam hitungan detik.

Manfaat dan kemampuan inti

Solusi ini memberikan manfaat berikut:

  • Pembaruan efisien dan kueri langsung: Hologres mendukung pembaruan, koreksi, dan konsistensi read-after-write yang efisien untuk data di setiap lapisan. Hal ini mengatasi keterbatasan utama gudang data real-time tradisional, di mana data pada lapisan antara sulit dikueri, diperbarui, dan dikoreksi.

  • Pelapisan dan penggunaan ulang data: Semua lapisan data di Hologres dapat diekspos ke layanan eksternal secara independen, memungkinkan pelapisan dan penggunaan ulang data yang efisien.

  • Arsitektur yang disederhanakan dan efisiensi yang ditingkatkan: Membangun pipeline ETL real-time dengan Flink SQL dan menyimpan data dari lapisan ODS, DWD, dan DWS di Hologres menyederhanakan arsitektur dan meningkatkan efisiensi pemrosesan data.

Solusi ini bergantung pada tiga kemampuan inti Hologres. Tabel berikut memberikan detail lebih lanjut.

Kemampuan inti

Deskripsi

Binlog

Hologres menyediakan kemampuan Binlog, yang mendorong Flink untuk melakukan komputasi real-time dan berfungsi sebagai sumber hulu untuk pemrosesan aliran.

Penyimpanan hibrida baris-kolom

Hologres mendukung format penyimpanan hibrida baris-kolom. Satu tabel menyimpan data dalam format berorientasi baris dan berorientasi kolom sekaligus dengan konsistensi kuat di antara keduanya. Fitur ini memastikan bahwa tabel antara dapat berfungsi sebagai tabel sumber Flink, sebagai tabel dimensi untuk kueri titik dan join tabel dimensi, serta dapat dikueri oleh aplikasi lain (seperti OLAP dan layanan online).

Isolasi sumber daya yang kuat

Beban tinggi pada instans Hologres dapat memengaruhi kinerja kueri titik pada lapisan antara. Hologres mendukung isolasi sumber daya yang kuat melalui penerapan pemisahan baca/tulis untuk instans primer dan sekunder (penyimpanan bersama) atau arsitektur instans virtual warehouse. Hal ini memastikan bahwa pekerjaan Flink yang menarik data Binlog dari Hologres tidak memengaruhi layanan online.

Prasyarat

  • Hanya instans eksklusif Hologres yang mendukung solusi gudang data real-time ini.

  • Instans Realtime Compute for Apache Flink, RDS MySQL, dan Hologres harus berada dalam VPC yang sama. Jika tidak, Anda harus terlebih dahulu menghubungkan VPC tersebut atau menggunakan titik akhir publik untuk akses. Untuk informasi selengkapnya, lihat Bagaimana cara mengakses layanan lain lintas VPC? dan Bagaimana cara mengakses Internet?.

  • Pastikan bahwa Pengguna RAM atau Peran RAM yang digunakan untuk akses memiliki izin yang diperlukan untuk resource Realtime Compute for Apache Flink, Hologres, dan RDS MySQL.

Langkah 1: Siapkan resource

Buat instans RDS MySQL dan siapkan sumber data

  1. Buat instans RDS MySQL. Untuk informasi selengkapnya, lihat Buat instans ApsaraDB RDS untuk MySQL.

    Instans RDS MySQL harus berada dalam VPC yang sama dengan ruang kerja Flink dan instans Hologres.

  2. Buat database dan akun.

    Pada instans target, buat database bernama order_dw dan akun standar dengan izin baca dan tulis untuk database tersebut. Untuk detailnya, lihat Buat database dan Buat akun.

  3. Siapkan sumber data CDC MySQL.

    1. Pada halaman detail instans, klik Log On to Database.

    2. Pada kotak dialog Connect to Instance, masukkan username dan password untuk akun yang telah Anda buat, lalu klik Sign in.

    3. Setelah login, klik dua kali database order_dw pada halaman instansiasi basis data untuk beralih ke database tersebut.

    4. Pada area SQL Console, tulis pernyataan DDL untuk membuat tiga tabel bisnis dan pernyataan untuk memasukkan data.

      CREATE TABLE `orders` (
        order_id bigint not null primary key,
        user_id varchar(50) not null,
        shop_id bigint not null,
        product_id bigint not null,
        buy_fee numeric(20,2) not null,   
        create_time timestamp not null,
        update_time timestamp not null default now(),
        state int not null 
      );
      CREATE TABLE `orders_pay` (
        pay_id bigint not null primary key,
        order_id bigint not null,
        pay_platform int not null,
        create_time timestamp not null
      );
      CREATE TABLE `product_catalog` (
        product_id bigint not null primary key,
        catalog_name varchar(50) not null
      );
      -- Prepare data
      INSERT INTO product_catalog VALUES(1, 'phone_aaa'),(2, 'phone_bbb'),(3, 'phone_ccc'),(4, 'phone_ddd'),(5, 'phone_eee');
      INSERT INTO orders VALUES
      (100001, 'user_001', 12345, 1, 5000.05, '2023-02-15 16:40:56', '2023-02-15 18:42:56', 1),
      (100002, 'user_002', 12346, 2, 4000.04, '2023-02-15 15:40:56', '2023-02-15 18:42:56', 1),
      (100003, 'user_003', 12347, 3, 3000.03, '2023-02-15 14:40:56', '2023-02-15 18:42:56', 1),
      (100004, 'user_001', 12347, 4, 2000.02, '2023-02-15 13:40:56', '2023-02-15 18:42:56', 1),
      (100005, 'user_002', 12348, 5, 1000.01, '2023-02-15 12:40:56', '2023-02-15 18:42:56', 1),
      (100006, 'user_001', 12348, 1, 1000.01, '2023-02-15 11:40:56', '2023-02-15 18:42:56', 1),
      (100007, 'user_003', 12347, 4, 2000.02, '2023-02-15 10:40:56', '2023-02-15 18:42:56', 1);
      INSERT INTO orders_pay VALUES
      (2001, 100001, 1, '2023-02-15 17:40:56'),
      (2002, 100002, 1, '2023-02-15 17:40:56'),
      (2003, 100003, 0, '2023-02-15 17:40:56'),
      (2004, 100004, 0, '2023-02-15 17:40:56'),
      (2005, 100005, 0, '2023-02-15 18:40:56'),
      (2006, 100006, 0, '2023-02-15 18:40:56'),
      (2007, 100007, 0, '2023-02-15 18:40:56');
  4. Klik Upload, lalu klik Execute.

Buat instans Hologres dan virtual warehouse

  1. Buat instans Hologres eksklusif. Untuk informasi selengkapnya, lihat Beli instans Hologres.

    Instans Hologres harus berada dalam VPC yang sama dengan instans RDS MySQL. Untuk mengalami kemampuan isolasi sumber daya kuat Hologres melalui pemisahan baca/tulis, pilih Virtual Warehouse sebagai tipe instans dan atur Reserved Computing Resources of Virtual Warehouse menjadi 64. Hal ini memungkinkan Anda membuat virtual warehouse baru.

  2. Setelah Anda login ke instans, buat database dan berikan izin.

    Buat database bernama order_dw (Simple Permission Model harus diaktifkan) dan berikan izin admin kepada pengguna. Untuk informasi selengkapnya tentang membuat database dan memberikan izin, lihat Manajemen DB.

    Catatan
    • Jika akun tidak muncul dalam daftar drop-down User Account, artinya akun tersebut belum ditambahkan ke instans. Buka halaman Users untuk menambahkan pengguna sebagai SuperUser.

    • Di Hologres V2.0 dan versi selanjutnya, ekstensi Binlog diaktifkan secara default dan tidak memerlukan eksekusi manual.

  3. Buat virtual warehouse baru.

    Anda dapat menggunakan virtual warehouse berbeda untuk mencapai isolasi sumber daya. Gunakan virtual warehouse awal init_warehouse untuk menulis data, dan gunakan virtual warehouse read_warehouse_1 untuk melayani kueri.

    Sumber daya komputasi yang dipesan dialokasikan sepenuhnya ke virtual warehouse awal init_warehouse. Anda harus terlebih dahulu mengurangi sumber dayanya sebelum membuat yang baru. Untuk informasi selengkapnya, lihat Buat instans virtual warehouse baru.

    1. Klik Security Center > Virtual Warehouse Management, dan pastikan nama instans sudah benar.

    2. Pada baris virtual warehouse yang ada init_warehouse, klik Modify Configuration di kolom Actions. Kurangi sumber daya dan klik OK.

    3. Klik Create Virtual Warehouse, buat virtual warehouse baru bernama read_warehouse_1, lalu klik OK.

Buat ruang kerja Flink dan katalog

  1. Buat ruang kerja Flink. Untuk informasi selengkapnya, lihat Aktifkan Realtime Compute for Apache Flink.

    Ruang kerja Flink harus berada dalam VPC yang sama dengan instans RDS MySQL dan Hologres.

  2. Login ke Konsol Realtime Compute for Apache Flink, lalu pada baris ruang kerja target, klik Console di kolom Actions.

  3. Buat kluster sesi untuk menyediakan lingkungan eksekusi bagi pembuatan katalog dan skrip kueri. Untuk informasi selengkapnya, lihat Langkah 1: Buat kluster sesi.

  4. Buat katalog Hologres.

    Pada tab Script halaman Development > Scripts, salin kode berikut ke editor skrip. Modifikasi nilai parameter target, pilih cuplikan target, lalu klik Run. Di pojok kanan bawah, pastikan kluster sesi yang Anda buat dipilih sebagai lingkungan eksekusi.

    CREATE CATALOG dw WITH (
      'type' = 'hologres',
      'endpoint' = '<ENDPOINT>', 
      'username' = 'BASIC$flinktest',
      'password' = '${secret_values.holosecret}',
      'dbname' = 'order_dw@init_warehouse', -- Tentukan nama database dan hubungkan ke virtual warehouse init_warehouse.
      'binlog' = 'true', -- Saat membuat katalog, Anda dapat mengatur parameter WITH untuk tabel sumber, dimensi, dan hasil. Parameter default ini ditambahkan secara otomatis saat Anda menggunakan tabel di bawah katalog ini.
      'sdkMode' = 'jdbc', -- Mode jdbc direkomendasikan.
      'cdcmode' = 'true',
      'connectionpoolname' = 'the_conn_pool',
      'ignoredelete' = 'true',  -- Ini harus diaktifkan untuk penggabungan tabel lebar agar mencegah retraksi.
      'partial-insert.enabled' = 'true', -- Parameter ini harus diaktifkan untuk penggabungan tabel lebar agar memungkinkan pembaruan kolom parsial.
      'mutateType' = 'insertOrUpdate', -- Parameter ini harus diaktifkan untuk penggabungan tabel lebar agar memungkinkan pembaruan kolom parsial.
      'table_property.binlog.level' = 'replica', -- Anda juga dapat meneruskan properti tabel Hologres persisten saat membuat katalog. Binlog kemudian diaktifkan secara default saat Anda membuat tabel.
      'table_property.binlog.ttl' = '259200'
    );

    Anda perlu memodifikasi nilai parameter berikut dengan informasi layanan Hologres aktual Anda.

    Parameter

    Deskripsi

    Catatan

    endpoint

    Titik akhir instans Hologres.

    Dapatkan nama domain untuk jenis jaringan VPC yang ditentukan pada halaman detail instans Hologres. Untuk informasi selengkapnya tentang nama domain, lihat Endpoints.

    username

    Pilih salah satu dari berikut:

    • Username untuk akun kustom dalam format BASIC$<user_name>.

    • ID AccessKey Akun Alibaba Cloud Anda atau Pengguna RAM.

    • Pengguna yang dikonfigurasi di sini memerlukan akses ke database Hologres yang sesuai. Untuk informasi selengkapnya tentang izin database Hologres dan manajemen pengguna, lihat model izin Hologres dan Manajemen pengguna.

    • Contoh ini menggunakan akun kustom bernama BASIC$flinktest dan mengatur password-nya menggunakan variabel proyek bernama holosecrect untuk menghindari risiko keamanan yang terkait dengan penyimpanan teks biasa. Untuk informasi selengkapnya, lihat Variabel proyek.

    password

    • Password akun kustom.

    • Rahasia AccessKey Akun Alibaba Cloud Anda atau Pengguna RAM.

    Catatan

    Saat membuat katalog, Anda dapat mengatur parameter WITH default untuk tabel sumber, dimensi, dan hasil. Anda juga dapat mengatur properti default untuk membuat tabel fisik Hologres, seperti parameter yang diawali dengan table_property. Untuk informasi selengkapnya, lihat Kelola katalog Hologres dan Parameter WITH konektor Hologres.

  5. Buat katalog MySQL.

    Salin kode berikut ke editor Script. Modifikasi nilai parameter target, pilih cuplikan target, lalu klik Run di sisi kiri baris kode. Di pojok kanan bawah, pastikan kluster sesi yang Anda buat dipilih sebagai lingkungan eksekusi.

    CREATE CATALOG mysqlcatalog WITH(
      'type' = 'mysql',
      'hostname' = '<hostname>',
      'port' = '<port>',
      'username' = '<username>',
      'password' = '${secret_values.mysql_pw}',
      'default-database' = 'order_dw'
    );

    Anda perlu memodifikasi nilai parameter berikut dengan informasi layanan MySQL aktual Anda.

    Parameter

    Deskripsi

    hostname

    Alamat IP atau hostname database MySQL. Anda dapat memperoleh alamat internal dengan mengklik View Details di area Network Type pada halaman informasi dasar database.

    port

    Nomor port untuk layanan database MySQL. Nilai default adalah 3306.

    username

    Username untuk layanan database MySQL.

    password

    Password untuk layanan database MySQL.

    Contoh ini menggunakan variabel bernama mysql_pw untuk nilai password guna menghindari risiko seperti penyimpanan teks biasa. Untuk informasi selengkapnya, lihat Kelola variabel.

Langkah 2: Bangun gudang data real-time

Bangun lapisan ODS: Ingesti data real-time

Anda dapat membangun lapisan ODS dalam satu langkah menggunakan pernyataan CREATE DATABASE AS (CDAS) katalog. Lapisan ODS biasanya tidak digunakan secara langsung untuk OLAP atau melayani kueri titik key-value. Sebaliknya, lapisan ini berfungsi sebagai pemicu event untuk pekerjaan streaming, sehingga mengaktifkan Binlog sudah cukup. Binlog merupakan kemampuan inti Hologres, dan konektor Hologres mendukung mode penuh dan inkremental yang pertama kali membaca semua data yang ada lalu secara inkremental mengonsumsi Binlog.

  1. Buat pekerjaan sinkronisasi CDAS bernama ODS.

    1. Pada halaman Data Development>ETL, buat pekerjaan streaming SQL baru bernama ODS, lalu salin kode berikut ke editor SQL.

      CREATE DATABASE IF NOT EXISTS dw.order_dw   -- Parameter table_property.binlog.level telah diatur saat katalog dibuat, sehingga Binlog diaktifkan untuk semua tabel yang dibuat melalui CDAS.
      AS DATABASE mysqlcatalog.order_dw INCLUDING all tables -- Anda dapat memilih tabel mana dari database hulu yang akan diingesti.
      /*+ OPTIONS('server-id'='8001-8004') */ ;   -- Tentukan rentang server-id untuk instans mysql-cdc.
      Catatan
      • Secara default, contoh ini menyinkronkan data ke Skema Publik database order_dw. Anda juga dapat menyinkronkan data ke skema tertentu dalam database Hologres target. Untuk informasi selengkapnya, lihat Gunakan sebagai katalog sisi target untuk CDAS. Setelah menentukan skema, format nama tabel untuk menggunakan katalog juga akan berubah. Untuk informasi selengkapnya, lihat Gunakan katalog Hologres.

      • Perubahan skema pada tabel sumber hanya diteruskan ke tabel hasil setelah operasi DML berikutnya (INSERT, UPDATE, atau DELETE) terjadi pada tabel sumber.

    2. Di pojok kanan atas, klik Deploy untuk menerapkan pekerjaan.

    3. Di panel navigasi kiri, klik O&M > Deployments. Pada baris pekerjaan ODS yang baru saja diterapkan, klik Start di kolom Actions. Pilih Start Without State lalu klik Start.

  2. Muat data ke virtual warehouse.

    Kelompok tabel merupakan pembawa data di Hologres. Saat Anda menggunakan virtual warehouse read_warehouse_1 untuk mengkueri data dari kelompok tabel dalam database order_dw, seperti order_dw_tg_default (untuk langkah pembuatan, lihat Manajemen Kelompok Tabel), Anda memuat order_dw_tg_default untuk read_warehouse_1. Hal ini memungkinkan Anda menggunakan virtual warehouse init_warehouse untuk menulis data dan menggunakan virtual warehouse read_warehouse_1 untuk melakukan kueri layanan.

    Pada halaman pengembangan HoloWeb, klik SQL Editor, pastikan nama instans dan nama database, lalu jalankan perintah berikut. Untuk informasi selengkapnya, lihat Buat instans virtual warehouse baru. Setelah dimuat, Anda dapat melihat bahwa read_warehouse_1 telah memuat data dari Kelompok Tabel order_dw_tg_default.

    -- Lihat Kelompok Tabel dalam database saat ini.
    SELECT tablegroup_name FROM hologres.hg_table_group_properties GROUP BY tablegroup_name;
    -- Muat Kelompok Tabel ke virtual warehouse.
    CALL hg_table_group_load_to_warehouse ('order_dw.order_dw_tg_default', 'read_warehouse_1', 1);
    -- Lihat status pemuatan Kelompok Tabel untuk virtual warehouse.
    select * from hologres.hg_warehouse_table_groups;
  3. Di pojok kanan atas, alihkan virtual warehouse ke read_warehouse_1. Kueri dan analisis selanjutnya akan menggunakan virtual warehouse read_warehouse_1.

    Daftar drop-down virtual warehouse di pojok kanan atas menampilkan read_warehouse_1. Editor menampilkan pernyataan pemuatan kelompok tabel yang dieksekusi CALL hg_table_group_load_to_warehouse ('order_dw.order_dw_tg_default', 'read_warehouse_1', 1); dan pernyataan kueri select * from hologres.hg_warehouse_table_groups;.

  4. Pada halaman SQL Editor, jalankan perintah berikut untuk melihat data yang disinkronkan dari MySQL ke tiga tabel Hologres.

    --- Kueri data dalam tabel orders.
    SELECT * FROM orders;
    --- Kueri data dalam tabel orders_pay.
    SELECT * FROM orders_pay;
    --- Kueri data dalam tabel product_catalog.
    SELECT * FROM product_catalog;

    Setelah menjalankan kueri ketiga, tab Result[3] menampilkan lima baris dalam tabel product_catalog, termasuk dua kolom: product_id (dengan nilai dari 1 hingga 5) dan catalog_name (dengan nilai phone_aaa, phone_bbb, phone_ccc, phone_ddd, dan phone_eee).

Bangun lapisan DWD: Buat tabel lebar real-time

Membangun lapisan DWD memanfaatkan kemampuan unik konektor Hologres untuk pembaruan kolom parsial. Anda dapat menggunakan pernyataan DML INSERT untuk mengekspresikan semantik pembaruan kolom parsial. Proses ini bergantung pada kueri titik berkinerja-tinggi terhadap tabel dimensi, yang disediakan oleh penyimpanan baris dan penyimpanan hibrida baris-kolom Hologres. Pada saat yang sama, arsitektur isolasi sumber daya kuat Hologres memastikan bahwa pekerjaan tulis, baca, dan analisis tidak saling mengganggu.

  1. Gunakan fitur katalog Flink untuk membuat tabel lebar lapisan DWD dwd_orders di Hologres.

    Pada tab Script halaman Development > Scripts, salin kode berikut ke editor skrip, pilih cuplikan, lalu klik Run di sisi kiri baris kode.

    -- Kolom tabel lebar harus nullable karena saat aliran berbeda menulis ke tabel hasil yang sama, kolom apa pun berpotensi memiliki nilai null.
    CREATE TABLE dw.order_dw.dwd_orders (
      order_id bigint not null,
      order_user_id string,
      order_shop_id bigint,
      order_product_id bigint,
      order_product_catalog_name string,
      order_fee numeric(20,2),
      order_create_time timestamp,
      order_update_time timestamp,
      order_state int,
      pay_id bigint,
      pay_platform int comment 'platform 0: phone, 1: pc', 
      pay_create_time timestamp,
      PRIMARY KEY(order_id) NOT ENFORCED
    );
    -- Anda dapat memodifikasi properti tabel fisik Hologres melalui katalog.
    ALTER TABLE dw.order_dw.dwd_orders SET (
      'table_property.binlog.ttl' = '604800' -- Ubah timeout Binlog menjadi satu minggu.
    );
  2. Konsumsi Binlog tabel lapisan ODS orders dan orders_pay secara real-time.

    Pada halaman Data Development>ETL, buat pekerjaan streaming SQL bernama DWD, salin kode berikut ke editor SQL, lalu Deploy dan Start pekerjaan. Pekerjaan SQL ini melakukan join tabel orders dengan tabel dimensi product_catalog, menulis hasil akhir ke tabel dwd_orders, dan melakukan pengayaan data real-time.

    BEGIN STATEMENT SET;
    INSERT INTO dw.order_dw.dwd_orders 
     (
       order_id,
       order_user_id,
       order_shop_id,
       order_product_id,
       order_fee,
       order_create_time,
       order_update_time,
       order_state,
       order_product_catalog_name
     ) SELECT o.*, dim.catalog_name 
       FROM dw.order_dw.orders as o
       LEFT JOIN dw.order_dw.product_catalog FOR SYSTEM_TIME AS OF proctime() AS dim
       ON o.product_id = dim.product_id;
    INSERT INTO dw.order_dw.dwd_orders 
      (pay_id, order_id, pay_platform, pay_create_time)
       SELECT * FROM dw.order_dw.orders_pay;
    END;
  3. Lihat data dalam tabel lebar dwd_orders.

    Pada halaman pengembangan HoloWeb, hubungkan ke instans Hologres dan login ke database target. Lalu, jalankan perintah berikut di editor SQL.

    SELECT * FROM dwd_orders;

    Tabel lebar dwd_orders mencakup kolom berikut: order_id, order_user_id, order_shop_id, order_product_id, order_product_catalog_name, order_fee, order_create_time, order_update_time, order_state, pay_id, pay_platform, dan pay_create_time. Kueri mengembalikan 7 catatan pesanan.

Bangun lapisan DWS: Hitung metrik real-time

  1. Gunakan fitur katalog Flink untuk membuat tabel agregasi lapisan DWS dws_users dan dws_shops di Hologres.

    Pada tab Script halaman Development > Scripts, salin kode berikut ke editor skrip, pilih cuplikan, lalu klik Run di sisi kiri baris kode.

    -- Tabel metrik agregat berdimensi pengguna.
    CREATE TABLE dw.order_dw.dws_users (
      user_id string not null,
      ds string not null,
      paied_buy_fee_sum numeric(20,2) not null comment 'Total jumlah yang dibayar pada hari ini',
      primary key(user_id,ds) NOT ENFORCED
    );
    -- Tabel metrik agregat berdimensi toko.
    CREATE TABLE dw.order_dw.dws_shops (
      shop_id bigint not null,
      ds string not null,
      paied_buy_fee_sum numeric(20,2) not null comment 'Total jumlah yang dibayar pada hari ini',
      primary key(shop_id,ds) NOT ENFORCED
    );
  2. Konsumsi data dari tabel lebar DWD dw.order_dw.dwd_orders secara real-time, lakukan agregasi di Flink, dan tulis hasil akhir ke tabel DWS di Hologres.

    Pada halaman Data Development>ETL, buat pekerjaan streaming SQL baru bernama DWS, salin kode berikut ke editor SQL, lalu Deploy dan Start pekerjaan.

    BEGIN STATEMENT SET;
    INSERT INTO dw.order_dw.dws_users
      SELECT 
        order_user_id,
        DATE_FORMAT (pay_create_time, 'yyyyMMdd') as ds,
        SUM (order_fee)
        FROM dw.order_dw.dwd_orders c
        WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL -- Data dari aliran pesanan dan pembayaran telah ditulis ke tabel lebar.
        GROUP BY order_user_id, DATE_FORMAT (pay_create_time, 'yyyyMMdd');
    INSERT INTO dw.order_dw.dws_shops
      SELECT 
        order_shop_id,
        DATE_FORMAT (pay_create_time, 'yyyyMMdd') as ds,
        SUM (order_fee)
       FROM dw.order_dw.dwd_orders c
       WHERE pay_id IS NOT NULL AND order_fee IS NOT NULL -- Data dari aliran pesanan dan pembayaran telah ditulis ke tabel lebar.
       GROUP BY order_shop_id, DATE_FORMAT (pay_create_time, 'yyyyMMdd');
    END;
  3. Lihat hasil agregasi di lapisan DWS. Hasil diperbarui secara real-time seiring perubahan data hulu.

    1. Di konsol Hologres, lihat data sebelum perubahan.

      dws_users

      SELECT * FROM dws_users;

      Hasil kueri berisi tiga kolom: user_id (misalnya, user_001, user_002, user_003), ds (misalnya, 20230215), dan paied_buy_fee_sum (misalnya, 8000.08, 5000.05). Kolom user_id merupakan kolom kunci asosiasi.

      dws_shops

      SELECT * FROM dws_shops;

      Kueri mengembalikan 4 catatan dengan tiga kolom: shop_id, ds, dan paied_buy_fee_sum. Dalam data sampel, shop_id bernilai 12345 hingga 12348, semua nilai ds adalah 20230215, dan nilai paied_buy_fee_sum masing-masing adalah 5000.05, 4000.04, 7000.07, dan 2000.02.

    2. Di konsol RDS, masukkan catatan data baru ke masing-masing tabel orders dan orders_pay dalam database order_dw.

      INSERT INTO orders VALUES
      (100008, 'user_003', 12345, 5, 6000.02, '2023-02-15 09:40:56', '2023-02-15 18:42:56', 1);
      INSERT INTO orders_pay VALUES
      (2008, 100008, 1, '2023-02-15 19:40:56');
    3. Di konsol Hologres, lihat data setelah perubahan.

      dwd_orders

      SELECT * FROM dwd_orders;

      Hasil eksekusi menunjukkan total 8 catatan pesanan dalam tabel dwd_orders (order_id 100001–100008). Kolom mencakup order_user_id, order_shop_id, order_product_id, order_product_catalog_name, order_fee, order_create_time, dan order_update_time. Catatan baru untuk order_id=100008 memiliki order_fee sebesar 6000.02.

      dws_users

      SELECT * FROM dws_users;

      Kueri mengembalikan 3 catatan dari tabel dws_users dengan kolom user_id, ds, dan paied_buy_fee_sum. Datanya: user_001 / 20230215 / 8000.08, user_002 / 20230215 / 5000.05, dan user_003 / 20230215 / 11000.07. Jumlah agregat untuk user_003 tertinggi yaitu 11000.07.

      dws_shops

      SELECT * FROM dws_shops;

      Kueri mengembalikan empat baris dengan tiga kolom: shop_id, ds, dan paied_buy_fee_sum. Nilai shop_id adalah 12345, 12346, 12347, dan 12348; semua nilai ds adalah 20230215; dan nilai paied_buy_fee_sum masing-masing adalah 11000.07, 4000.04, 7000.07, dan 2000.02.

Profil data

Karena Binlog diaktifkan, Anda dapat langsung memeriksa perubahan data. Solusi ini menyimpan data di setiap lapisan, yang menyederhanakan profil data ad hoc dan verifikasi hasil akhir.

Profil mode aliran

Anda dapat menggunakan konektor Print untuk membantu memastikan apakah pesan yang dioutput ke tabel hasil lain sesuai harapan.

  1. Buat dan mulai pekerjaan profil aliran.

    Pada halaman Data Development>ETL, buat pekerjaan streaming SQL bernama Data-exploration, salin kode berikut ke editor SQL, lalu Deploy dan Start pekerjaan.

    -- Dalam profil mode aliran, Anda dapat mencetak untuk melihat perubahan data.
    CREATE TEMPORARY TABLE print_sink(
      order_id bigint not null,
      order_user_id string,
      order_shop_id bigint,
      order_product_id bigint,
      order_product_catalog_name string,
      order_fee numeric(20,2),
      order_create_time timestamp,
      order_update_time timestamp,
      order_state int,
      pay_id bigint,
      pay_platform int,
      pay_create_time timestamp,
      PRIMARY KEY(order_id) NOT ENFORCED
    ) WITH (
      'connector' = 'print'
    );
    INSERT INTO print_sink SELECT *
    FROM dw.order_dw.dwd_orders /*+ OPTIONS('startTime'='2023-02-15 12:00:00') */ -- Di sini, startTime adalah waktu pembuatan binlog.
    WHERE order_user_id = 'user_001';
  2. Lihat hasil profil data.

    Pada halaman detail O&M > Deployments, klik nama pekerjaan target. Pada tab Logs, klik tab Operational Logs di kiri. Lalu, klik tab Running Task Managers dan klik Path, ID. Pada halaman Stdout, cari informasi log terkait user_001.

    NWoJuf*****]. secret: [CrxBZYHuTD*****], token: [CAISjgRxxx]
    end new OSSLogClient endTimeInMs:[1744628993550], costInMxxx
    [1744628993551], costInMs:[10 ms][OSSLogAppender:main] doSend cost time(ms):[59], current log queue size:[1], total received/discarded:[401/0],exceptionReceived/exceptionDiscarded:[0/0], total send:[400]
    [OSSLogAppender:main] doSend cost time(ms):[57], current log queue size:[2], total received/discarded:[502/0], exceptionReceived/exceptionDiscarded:[0/0], total send:[500]
    +I[100001, user_001, 12345, 1, phone_aaa, 5000.05, 2023-02-15T16:40:56, 2023-02-15T18:42:56, 1, null, null, null]
    -U[100001, user_001, 12345, 1, phone_aaa, 5000.05, 2023-02-15T16:40:56, 2023-02-15T18:42:56, 1, null, null, null]
    +U[100001, user_001, 12345, 1, phone_aaa, 5000.05, 2023-02-15T16:40:56, 2023-02-15T18:42:56, 1, 2001, 1, 2023-02-15T17:40:56]
    +U[100004, user_001, 12347, 4, phone_ddd, 2000.02, 2023-02-15T13:40:56, 2023-02-15T18:42:56, 1, 2004, 0, 2023-02-15T17:40:56]
    +U[100006, user_001, 12348, 1, phone_aaa, 1000.01, 2023-02-15T11:40:56, 2023-02-15T18:42:56, 1, 2006, 0, 2023-02-15T18:40:56]

Profil mode batch

Profil mode batch tidak menulis data ke tabel hasil. Sebaliknya, profil ini mengambil status data saat ini dan memungkinkan Anda melihat hasilnya langsung melalui debugging.

Pada halaman Data Development>ETL, buat Pekerjaan Aliran SQL, salin kode berikut ke editor SQL, lalu klik Debug. Untuk informasi selengkapnya, lihat Debugging Pekerjaan.

Hasil debug pada antarmuka pengembangan pekerjaan Flink ditampilkan di bawah.

SELECT *
FROM dw.order_dw.dwd_orders /*+ OPTIONS('binlog'='false') */ 
WHERE order_user_id = 'user_001' and order_create_time > '2023-02-15 12:00:00'; -- Mode batch mendukung filter pushdown untuk meningkatkan efisiensi eksekusi pekerjaan batch.

Setelah debugging, antarmuka pengembangan pekerjaan Flink mengembalikan dua catatan pesanan yang sesuai kriteria filter: nilai order_id adalah 100004 dan 100001, keduanya untuk order_user_id user_001. Nilai order_fee mereka adalah 2000.02 dan 5000.05, dan nilai order_create_time mereka setelah 2023-02-15 12:00:00.

Langkah 3: Gunakan gudang data real-time

Langkah 2 menunjukkan cara membangun Streaming Warehouse berlapis berbasis Flink dan Hologres menggunakan katalog Flink. Bagian ini memperkenalkan beberapa kasus penggunaan sederhana setelah gudang data diatur.

Kueri titik

Lakukan kueri terhadap tabel metrik agregat di lapisan DWS berdasarkan kunci primer, mendukung jutaan RPS.

Berikut contoh kode untuk mengkueri jumlah konsumsi pengguna tertentu pada tanggal tertentu di halaman pengembangan HoloWeb.

-- holo sql
SELECT * FROM dws_users WHERE user_id ='user_001' AND ds = '20230215';

Dalam hasil kueri, nilai kolom jumlah konsumsi (paied_buy_fee_sum) adalah 8000.08.

Analisis OLAP

Lakukan analisis OLAP pada tabel lebar lapisan DWD.

Berikut contoh kode untuk mengkueri detail pesanan pelanggan tertentu pada platform pembayaran tertentu pada Februari 2023 di halaman pengembangan HoloWeb.

-- holo sql
SELECT * FROM dwd_orders
WHERE order_create_time >= '2023-02-01 00:00:00'  and order_create_time < '2023-03-01 00:00:00'
AND order_user_id = 'user_001'
AND pay_platform = 0
ORDER BY order_create_time LIMIT 100;

Setelah kueri dieksekusi, tabel hasil menampilkan catatan detail pesanan yang sesuai kriteria filter, menunjukkan kolom seperti order_id, order_user_id, order_shop_id, order_product_id, order_product_catalog_name, order_fee, order_create_time, dan order_update_time.

Laporan real-time

Tampilkan laporan real-time berdasarkan data dari tabel lebar lapisan DWD. Penyimpanan hibrida baris-kolom dan tabel berorientasi kolom Hologres memberikan kemampuan analisis OLAP yang sangat baik, mendukung respons dalam hitungan detik.

Berikut contoh kode untuk mengkueri jumlah total dan jumlah total pesanan untuk setiap kategori pada Februari 2023 di halaman pengembangan HoloWeb.

-- holo sql
SELECT
  TO_CHAR(order_create_time, 'YYYYMMDD') AS order_create_date,
  order_product_catalog_name,
  COUNT(*),
  SUM(order_fee)
FROM
  dwd_orders
WHERE
  order_create_time >= '2023-02-01 00:00:00'  and order_create_time < '2023-03-01 00:00:00'
GROUP BY
  order_create_date, order_product_catalog_name
ORDER BY
  order_create_date, order_product_catalog_name;

Setelah Anda mengeksekusi SQL, tab Results menampilkan empat kolom data dalam tabel: order_create_date, order_product_catalog_name, count, dan sum. Contoh hasil untuk tanggal 20230215 menunjukkan jumlah pesanan (2, 1, 1, 2, dan 2) dan jumlah total (6000.06, 4000.04, 3000.03, 4000.04, dan 7000.03) untuk lima kategori produk dari phone_aaa hingga phone_eee.

Referensi