All Products
Search
Document Center

Hologres:Panduan Cepat: Gunakan virtual warehouse

Last Updated:Jul 30, 2026

Hologres V2.0 memisahkan sumber daya komputasi ke dalam virtual warehouse independen untuk penerapan yang elastis dan berdaya tahan tinggi. Panduan ini mencakup pembuatan warehouse, pemuatan data, akses pengguna, dan pengalihan traffic.

Informasi latar belakang

Virtual warehouse menyediakan isolasi sumber daya, elastisitas, pemisahan baca/tulis, dan isolasi workload. Arsitektur virtual warehouse.

Prasyarat

Hanya instans Hologres versi V2.0.4 atau lebih baru yang mendukung virtual warehouse. Jika instans Anda menjalankan versi sebelum V2.0.4, lihat Error umum selama persiapan upgrade atau bergabunglah dengan grup DingTalk Hologres untuk dukungan. Untuk informasi lebih lanjut, lihat Bagaimana cara mendapatkan dukungan online lebih lanjut?.

Buat virtual warehouse baru

Contoh ini membuat virtual warehouse bernama read_warehouse_1 untuk pemisahan baca/tulis. init_warehouse menangani operasi tulis, sedangkan read_warehouse_1 menangani kueri.

image..png

Buat database

  1. Login ke HoloWeb sebagai superuser dan buat database bernama erp_database. Buat database.

    Pada kotak dialog Create Database, konfigurasikan parameter berikut:

    • Instance: Pilih instance target.

    • Database Name: Masukkan nama database, misalnya erp_database.

    • Permission Policy: Pilih SPM.

    • Log On Immediately: Pilih Yes. Login ke database akan menutup semua halaman yang sedang dibuka di bawah database saat ini. Pastikan Anda telah menyimpan pekerjaan Anda.

    Klik OK untuk menyelesaikan pembuatan.

  2. Hubungkan ke database dan jalankan SQL berikut untuk mengimpor data sampel.

    DROP FOREIGN TABLE IF EXISTS odps_customer_10g;
    DROP FOREIGN TABLE IF EXISTS odps_lineitem_10g;
    DROP FOREIGN TABLE IF EXISTS odps_nation_10g;
    DROP FOREIGN TABLE IF EXISTS odps_orders_10g;
    DROP FOREIGN TABLE IF EXISTS odps_part_10g;
    DROP FOREIGN TABLE IF EXISTS odps_partsupp_10g;
    DROP FOREIGN TABLE IF EXISTS odps_region_10g;
    DROP FOREIGN TABLE IF EXISTS odps_supplier_10g;
    
    
    IMPORT FOREIGN SCHEMA "MAXCOMPUTE_PUBLIC_DATA#default" LIMIT to
    (
        odps_customer_10g,
        odps_lineitem_10g,
        odps_nation_10g,
        odps_orders_10g,
        odps_part_10g,
        odps_partsupp_10g,
        odps_region_10g,
        odps_supplier_10g
    ) 
    FROM SERVER odps_server INTO public OPTIONS(if_table_exist'error',if_unsupported_type'error');
    
    DROP TABLE IF EXISTS LINEITEM;
    
    BEGIN;
    CREATE TABLE LINEITEM
    (
        L_ORDERKEY      BIGINT      NOT NULL,
        L_PARTKEY       INT         NOT NULL,
        L_SUPPKEY       INT         NOT NULL,
        L_LINENUMBER    INT         NOT NULL,
        L_QUANTITY      DECIMAL(15,2) NOT NULL,
        L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
        L_DISCOUNT      DECIMAL(15,2) NOT NULL,
        L_TAX           DECIMAL(15,2) NOT NULL,
        L_RETURNFLAG    TEXT        NOT NULL,
        L_LINESTATUS    TEXT        NOT NULL,
        L_SHIPDATE      TIMESTAMPTZ NOT NULL,
        L_COMMITDATE    TIMESTAMPTZ NOT NULL,
        L_RECEIPTDATE   TIMESTAMPTZ NOT NULL,
        L_SHIPINSTRUCT  TEXT        NOT NULL,
        L_SHIPMODE      TEXT        NOT NULL,
        L_COMMENT       TEXT        NOT NULL,
        PRIMARY KEY (L_ORDERKEY,L_LINENUMBER)
    );
    CALL set_table_property('LINEITEM', 'clustering_key', 'L_SHIPDATE,L_ORDERKEY');
    CALL set_table_property('LINEITEM', 'segment_key', 'L_SHIPDATE');
    CALL set_table_property('LINEITEM', 'distribution_key', 'L_ORDERKEY');
    CALL set_table_property('LINEITEM', 'bitmap_columns', 'L_ORDERKEY,L_PARTKEY,L_SUPPKEY,L_LINENUMBER,L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
    CALL set_table_property('LINEITEM', 'dictionary_encoding_columns', 'L_RETURNFLAG,L_LINESTATUS,L_SHIPINSTRUCT,L_SHIPMODE,L_COMMENT');
    CALL set_table_property('LINEITEM', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS ORDERS;
    
    BEGIN;
    CREATE TABLE ORDERS
    (
        O_ORDERKEY      BIGINT      NOT NULL PRIMARY KEY,
        O_CUSTKEY       INT         NOT NULL,
        O_ORDERSTATUS   TEXT        NOT NULL,
        O_TOTALPRICE    DECIMAL(15,2) NOT NULL,
        O_ORDERDATE     timestamptz NOT NULL,
        O_ORDERPRIORITY TEXT        NOT NULL,
        O_CLERK         TEXT        NOT NULL,
        O_SHIPPRIORITY  INT         NOT NULL,
        O_COMMENT       TEXT        NOT NULL
    );
    CALL set_table_property('ORDERS', 'segment_key', 'O_ORDERDATE');
    CALL set_table_property('ORDERS', 'distribution_key', 'O_ORDERKEY');
    CALL set_table_property('ORDERS', 'bitmap_columns', 'O_ORDERKEY,O_CUSTKEY,O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_SHIPPRIORITY,O_COMMENT');
    CALL set_table_property('ORDERS', 'dictionary_encoding_columns', 'O_ORDERSTATUS,O_ORDERPRIORITY,O_CLERK,O_COMMENT');
    CALL set_table_property('ORDERS', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS PARTSUPP;
    
    BEGIN;
    CREATE TABLE PARTSUPP
    (
        PS_PARTKEY    INT    NOT NULL,
        PS_SUPPKEY    INT    NOT NULL,
        PS_AVAILQTY   INT    NOT NULL,
        PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
        PS_COMMENT    TEXT   NOT NULL,
        PRIMARY KEY(PS_PARTKEY,PS_SUPPKEY)
    );
    CALL set_table_property('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
    CALL set_table_property('PARTSUPP', 'colocate_with', 'LINEITEM');
    CALL set_table_property('PARTSUPP', 'bitmap_columns', 'PS_PARTKEY,PS_SUPPKEY,PS_AVAILQTY,PS_COMMENT');
    CALL set_table_property('PARTSUPP', 'dictionary_encoding_columns', 'PS_COMMENT');
    CALL set_table_property('PARTSUPP', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS PART;
    
    BEGIN;
    CREATE TABLE PART
    (
        P_PARTKEY     INT    NOT NULL PRIMARY KEY,
        P_NAME        TEXT   NOT NULL,
        P_MFGR        TEXT   NOT NULL,
        P_BRAND       TEXT   NOT NULL,
        P_TYPE        TEXT   NOT NULL,
        P_SIZE        INT    NOT NULL,
        P_CONTAINER   TEXT   NOT NULL,
        P_RETAILPRICE DECIMAL(15,2) NOT NULL,
        P_COMMENT     TEXT   NOT NULL
    );
    CALL set_table_property('PART', 'distribution_key', 'P_PARTKEY');
    CALL set_table_property('PART', 'bitmap_columns', 'P_PARTKEY,P_SIZE,P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
    CALL set_table_property('PART', 'dictionary_encoding_columns', 'P_NAME,P_MFGR,P_BRAND,P_TYPE,P_CONTAINER,P_COMMENT');
    CALL set_table_property('PART', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    
    
    DROP TABLE IF EXISTS CUSTOMER;
    BEGIN;
    CREATE TABLE CUSTOMER
    (
        C_CUSTKEY    INT    NOT NULL PRIMARY KEY,
        C_NAME       TEXT   NOT NULL,
        C_ADDRESS    TEXT   NOT NULL,
        C_NATIONKEY  INT    NOT NULL,
        C_PHONE      TEXT   NOT NULL,
        C_ACCTBAL    DECIMAL(15,2) NOT NULL,
        C_MKTSEGMENT TEXT   NOT NULL,
        C_COMMENT    TEXT   NOT NULL
    );
    CALL set_table_property('CUSTOMER', 'distribution_key', 'C_CUSTKEY');
    CALL set_table_property('CUSTOMER', 'bitmap_columns', 'C_CUSTKEY,C_NATIONKEY,C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
    CALL set_table_property('CUSTOMER', 'dictionary_encoding_columns', 'C_NAME,C_ADDRESS,C_PHONE,C_MKTSEGMENT,C_COMMENT');
    CALL set_table_property('CUSTOMER', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS SUPPLIER;
    
    BEGIN;
    CREATE TABLE SUPPLIER
    (
        S_SUPPKEY   INT    NOT NULL PRIMARY KEY,
        S_NAME      TEXT   NOT NULL,
        S_ADDRESS   TEXT   NOT NULL,
        S_NATIONKEY INT    NOT NULL,
        S_PHONE     TEXT   NOT NULL,
        S_ACCTBAL   DECIMAL(15,2) NOT NULL,
        S_COMMENT   TEXT   NOT NULL
    );
    CALL set_table_property('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
    CALL set_table_property('SUPPLIER', 'bitmap_columns', 'S_SUPPKEY,S_NAME,S_ADDRESS,S_NATIONKEY,S_PHONE,S_COMMENT');
    CALL set_table_property('SUPPLIER', 'dictionary_encoding_columns', 'S_NAME,S_ADDRESS,S_PHONE,S_COMMENT');
    CALL set_table_property('SUPPLIER', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS NATION;
    
    BEGIN;
    CREATE TABLE NATION(
      N_NATIONKEY INT NOT NULL PRIMARY KEY,
      N_NAME text NOT NULL,
      N_REGIONKEY INT NOT NULL,
      N_COMMENT text NOT NULL
    );
    CALL set_table_property('NATION', 'distribution_key', 'N_NATIONKEY');
    CALL set_table_property('NATION', 'bitmap_columns', 'N_NATIONKEY,N_NAME,N_REGIONKEY,N_COMMENT');
    CALL set_table_property('NATION', 'dictionary_encoding_columns', 'N_NAME,N_COMMENT');
    CALL set_table_property('NATION', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    DROP TABLE IF EXISTS REGION;
    
    BEGIN;
    CREATE TABLE REGION
    (
        R_REGIONKEY INT  NOT NULL PRIMARY KEY,
        R_NAME      TEXT NOT NULL,
        R_COMMENT   TEXT
    );
    CALL set_table_property('REGION', 'distribution_key', 'R_REGIONKEY');
    CALL set_table_property('REGION', 'bitmap_columns', 'R_REGIONKEY,R_NAME,R_COMMENT');
    CALL set_table_property('REGION', 'dictionary_encoding_columns', 'R_NAME,R_COMMENT');
    CALL set_table_property('REGION', 'time_to_live_in_seconds', '31536000');
    COMMIT;
    
    INSERT INTO public.customer SELECT * FROM public.odps_customer_10g ;
    INSERT INTO public.lineitem SELECT * FROM public.odps_lineitem_10g ;
    INSERT INTO public.nation SELECT * FROM public.odps_nation_10g ;
    INSERT INTO public.orders SELECT * FROM public.odps_orders_10g ;
    INSERT INTO public.part SELECT * FROM public.odps_part_10g ;
    INSERT INTO public.partsupp SELECT * FROM public.odps_partsupp_10g ;
    INSERT INTO public.region SELECT * FROM public.odps_region_10g ;
    INSERT INTO public.supplier SELECT * FROM public.odps_supplier_10g ;
    
    vacuum nation;
    vacuum region;
    vacuum supplier;
    vacuum customer;
    vacuum part;
    vacuum partsupp;
    vacuum orders;
    vacuum lineitem;
    
    analyze nation;
    analyze region;
    analyze lineitem;
    analyze orders;
    analyze customer;
    analyze part;
    analyze partsupp;
    analyze supplier;
    analyze lineitem (l_orderkey,l_partkey,l_suppkey);
    analyze orders (o_custkey);
    analyze partsupp(ps_partkey,ps_suppkey);

Buat gudang virtual

  1. Login ke Konsol Hologres dan buka halaman detail instans target.

  2. Pada panel navigasi kiri, klik Virtual Warehouse Management untuk membuka tab Virtual Warehouse Resource Management.

    Halaman ini menampilkan alokasi sumber daya reserved dan elastis dari instans, serta menyediakan tombol Add Virtual Warehouse untuk membuat virtual warehouse.

  3. Klik Create Virtual Warehouse. Pada kotak dialog, masukkan Virtual Warehouse Name dan pilih Virtual Warehouse Resource.

    Pada skenario ini, buat virtual warehouse bernama read_warehouse_1.

    Pada skenario ini, pilih 32 CU (32 Core 128 GB, nodes: 2) untuk Virtual Warehouse Resources, lalu klik OK untuk menyelesaikan pembuatan.

  4. Klik OK.

  5. Pada halaman Virtual Warehouse Management, virtual warehouse berhasil dibuat jika statusnya pada kolom Status adalah Running.

Muat data ke dalam virtual warehouse

Kelompok tabel merupakan wadah data di Hologres. Untuk melakukan kueri data melalui virtual warehouse, muat terlebih dahulu kelompok tabel yang diperlukan ke dalamnya.

  1. Lihat kelompok tabel di database saat ini.

    Jalankan pernyataan SQL berikut:

    SELECT tablegroup_name
    FROM hologres.hg_table_group_properties
    GROUP BY tablegroup_name;

    Hasil contoh: Hasil kueri menunjukkan bahwa nama Table Group adalah erp_database_tg_default.

    Database memiliki satu kelompok tabel.

  2. Muat kelompok tabel untuk virtual warehouse.

    Muat erp_database_tg_default ke dalam read_warehouse_1 agar dapat melakukan kueri data:

    CALL hg_table_group_load_to_warehouse('erp_database.erp_database_tg_default', 'read_warehouse_1', 1);
  3. Periksa kelompok tabel yang telah dimuat.

    SELECT * FROM hologres.hg_warehouse_table_groups;

    Hasil contoh:image..png

    read_warehouse_1 kini telah memuat kelompok tabel erp_database_tg_default.

Atur izin pengguna

Pengguna tidak dapat mengakses virtual warehouse baru tanpa izin eksplisit. Contoh berikut memberikan akses kepada Pengguna RAM bernama ram_test ke read_warehouse_1.

  1. Lihat izin virtual warehouse pengguna.

    SELECT * FROM hologres.hg_warehouse_users;
  2. Lihat virtual warehouse default pengguna.

    SELECT * FROM hologres.hg_user_default_warehouse;
  3. Tambahkan pengguna ke instans.

    Pada halaman Users di HoloWeb, tambahkan Pengguna RAM ke instans Hologres. Manajemen pengguna.

    Pengguna RAM yang ditambahkan akan ditampilkan dalam daftar User Account, dengan tipe role default diatur sebagai Normal. Anda dapat menyesuaikan izin melalui opsi Modify Role Type di kolom Actions.

  4. Berikan izin kueri kepada pengguna ram_test pada database erp_database.

    Pada halaman Database authorization di HoloWeb, berikan izin kueri pada database kepada pengguna ram_test. Berikan izin kepada Pengguna RAM.

  5. Berikan akses pengguna ram_test ke virtual warehouse read_warehouse_1.

    CALL hg_grant_warehouse_access_privilege ('read_warehouse_1', '"p4_2xxxxxxxxxxxxxxx"');

    Otorisasi pengguna untuk menggunakan virtual warehouse.

  6. Tetapkan read_warehouse_1 sebagai virtual warehouse default untuk pengguna ram_test.

    Untuk pemisahan baca/tulis, ram_test harus terhubung melalui read_warehouse_1 alih-alih init_warehouse. Tetapkan warehouse default untuk pengguna ram_test:

    CALL hg_set_user_default_warehouse('"p4_2xxxxxxxxxxxxxxx"', 'read_warehouse_1');
  7. Periksa virtual warehouse yang digunakan oleh akun saat ini.

    Setelah login sebagai ram_test, verifikasi warehouse aktif:

    SELECT current_warehouse();

Alihkan traffic antar virtual warehouse

Jika read_warehouse_1 mengalami gangguan, alihkan traffic ram_test kembali ke init_warehouse.

image..png

Penting
  • Pengalihan traffic berlaku saat koneksi ulang. Pastikan aplikasi Anda memiliki mekanisme koneksi ulang.

  • Gunakan routing otomatis saat menghubungkan ke Hologres. Jangan tentukan nama virtual warehouse dalam string koneksi.

  1. Berikan akses pengguna ram_test ke virtual warehouse init_warehouse.

    Jika ram_test belum memiliki akses ke init_warehouse, berikan izin kepada ram_test sehingga ram_test dapat menggunakan sumber daya init_warehouse:

    CALL hg_grant_warehouse_access_privilege('init_warehouse', '"p4_2xxxxxxxxxxxxxxx"');
  2. Tetapkan init_warehouse sebagai virtual warehouse default untuk pengguna ram_test.

    Tetapkan warehouse default untuk ram_test ke init_warehouse. Koneksi baru akan menggunakan init_warehouse.

    CALL hg_set_user_default_warehouse('"p4_2xxxxxxxxxxxxxxx"', 'init_warehouse');
  3. Hentikan koneksi yang tidak menggunakan virtual warehouse default.

    SELECT hg_kill_non_default_warehouse_connections(); 
  4. Setelah koneksi ulang, koneksi baru Anda akan menggunakan virtual warehouse default.