全部产品
Search
文档中心

Hologres:Panduan tentang pembuatan dan penyetelan tabel berdasarkan skenario

更新时间:Jul 02, 2025

Di Hologres, Anda dapat mengonfigurasi berbagai properti tabel. Properti yang berbeda memiliki karakteristik unik. Panduan ini menjelaskan cara mengonfigurasi properti tabel sesuai dengan skenario kueri. Properti yang tepat membantu mengurangi jumlah data yang dipindai, jumlah file yang diakses, serta operasi I/O dalam kueri, sehingga meningkatkan kecepatan kueri dan permintaan per detik (QPS).

Tentukan format penyimpanan tabel Anda

Hologres mendukung penyimpanan berorientasi baris, kolom, dan hibrid baris-kolom. Untuk informasi lebih lanjut tentang format penyimpanan ini, lihat Mode Penyimpanan Tabel: Penyimpanan Berorientasi Baris, Kolom, dan Hibrid Baris-Kolom.

Gambar berikut menunjukkan cara menentukan format penyimpanan tabel. Jika skenario bisnis belum sepenuhnya didefinisikan, disarankan menggunakan penyimpanan hibrid baris-kolom untuk mempertimbangkan lebih banyak kemungkinan skenario.image..png

Konfigurasikan properti kueri tabel Anda

Setelah menentukan format penyimpanan tabel, konfigurasikan properti tabel berdasarkan skenario kueri.

Catatan
  • Bagian ini memberikan contoh konfigurasi properti tabel dalam berbagai skenario.

  • Contoh-contoh ini menggunakan instance Hologres dengan 64 unit komputasi (CUs) untuk memverifikasi kinerja kueri pada tabel Lineitem dan Orders dalam dataset TPC-H 100 GB.

  • Dataset TPC-H mensimulasikan data dalam skenario ritel dan mencakup tabel-tabel berikut:

    • Tabel Orders: Tabel pesanan, di mana bidang o_orderkey secara unik mengidentifikasi sebuah pesanan.

    • Tabel Lineitem: Tabel detail pesanan, di mana bidang o_orderkey dan l_linenumber secara unik mengidentifikasi produk dalam pesanan.

  • Uji kinerja TPC-H yang dijelaskan dalam panduan ini diimplementasikan berdasarkan uji benchmark TPC-H tetapi tidak memenuhi semua persyaratan benchmark tersebut. Oleh karena itu, hasil uji ini tidak dapat dibandingkan dengan hasil resmi dari uji benchmark TPC-H.

  • Jika tabel digunakan dalam beberapa skenario kueri dengan kondisi filter atau bidang JOIN yang berbeda, konfigurasikan properti tabel optimal berdasarkan frekuensi kueri dan persyaratan kinerja.

Skenario 1: Kueri titik dengan QPS sangat tinggi

  • Deskripsi Skenario

    Anda ingin melakukan puluhan ribu kueri titik per detik pada tabel Orders dalam dataset TPC-H. Anda dapat menentukan bidang o_orderkey untuk menemukan satu baris data. Contoh Pernyataan SQL:

    SELECT * FROM orders WHERE o_orderkey = ?;
  • Saran Konfigurasi

    Disarankan mengonfigurasi bidang filter sebagai kunci utama. Hologres menyediakan rencana tetap untuk mempercepat kueri berdasarkan kunci utama, yang secara signifikan meningkatkan efisiensi eksekusi. Untuk informasi lebih lanjut, lihat Percepat Eksekusi Pernyataan SQL dengan Menggunakan Rencana Tetap.

  • Verifikasi Kinerja

    Definisikan tabel Orders sebagai tabel berorientasi baris atau hibrid baris-kolom. Verifikasi kinerja kueri saat bidang o_orderkey dikonfigurasi sebagai kunci utama dan saat tidak ada kunci utama yang dikonfigurasi. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 1.

    Hasil Verifikasi:

    • Kunci utama dikonfigurasi: Sekitar 500 kueri dipicu sekaligus, rata-rata QPS sekitar 104.000, dan latensi rata-rata sekitar 4 ms.

    • Tidak ada kunci utama yang dikonfigurasi: Sekitar 500 kueri dipicu sekaligus, rata-rata QPS sekitar 16.000, dan latensi rata-rata sekitar 30 ms.

Skenario 2: Pemindaian awalan pada sejumlah kecil data dengan QPS tinggi

  • Deskripsi Skenario

    Anda ingin melakukan kueri dalam skenario dengan persyaratan berikut:

    • Banyak bidang tabel yang akan di-query membentuk kunci utama.

    • Puluhan ribu QPS perlu diproses. Kueri titik dilakukan berdasarkan bidang dalam kunci utama, dan dataset yang dikembalikan berisi beberapa atau puluhan entri data.

    Sebagai contoh, Anda ingin mengkueri semua produk dalam pesanan yang ditentukan oleh bidang l_orderkey dengan QPS tinggi dari tabel Lineitem. Tabel Lineitem adalah tabel detail pesanan dalam dataset TPC-H. Dalam tabel ini, Anda dapat menentukan bidang l_orderkey dan l_linenumber untuk mengidentifikasi produk dalam pesanan. Contoh pernyataan:

    SELECT * FROM lineitem WHERE l_orderkey = ?;
  • Saran Konfigurasi

    1. Konfigurasikan bidang yang digunakan untuk penyaringan kesetaraan sebagai bidang paling kiri dari kunci utama. Dalam contoh ini, atur kunci utama tabel Lineitem ke (l_orderkey, l_linenumber) bukan (l_linenumber, l_orderkey).

    2. Konfigurasikan bidang yang digunakan untuk penyaringan kesetaraan sebagai kunci distribusi untuk memastikan bahwa semua data yang perlu dipindai disimpan dalam shard yang sama. Ini membantu mengurangi jumlah shard yang harus diakses dan meningkatkan QPS. Dalam contoh ini, atur distribution key tabel Lineitem ke l_orderkey.

    3. Konfigurasikan bidang yang digunakan untuk penyaringan kesetaraan sebagai kunci pengelompokan jika tabel menggunakan format penyimpanan berorientasi kolom atau hibrid baris-kolom. Ini memastikan bahwa entri data yang akan dipindai diurutkan dalam file berdasarkan bidang tersebut dan membantu mengurangi jumlah operasi I/O. Dalam contoh ini, atur clustering key tabel Lineitem ke l_orderkey.

    Dengan konfigurasi ini, hanya pemindaian awalan pada satu shard yang diperlukan untuk mengkueri data. Hologres menyediakan rencana tetap untuk mempercepat pemindaian awalan. Untuk mengaktifkan fitur ini, atur parameter Grand Unified Configuration (GUC) hg_experimental_enable_fixed_dispatcher_for_scan ke on. Untuk informasi lebih lanjut, lihat Percepat Eksekusi Pernyataan SQL dengan Menggunakan Rencana Tetap.

  • Verifikasi Kinerja

    Definisikan tabel Lineitem sebagai tabel berorientasi baris atau hibrid baris-kolom. Verifikasi kinerja kueri saat konfigurasi di atas digunakan dan saat konfigurasi tersebut tidak digunakan. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 2.

    Hasil Verifikasi:

    • Konfigurasi di atas digunakan: Sekitar 500 kueri dipicu sekaligus, rata-rata QPS sekitar 37.000, dan latensi rata-rata sekitar 13 ms.

    • Konfigurasi di atas tidak digunakan: Hanya 1 kueri yang dipicu sekaligus, rata-rata QPS sekitar 60, dan latensi rata-rata sekitar 16 ms.

Skenario 3: Kueri dengan kondisi filter terkait waktu

  • Deskripsi Skenario

    Anda ingin melakukan kueri dengan kondisi filter terkait waktu. Dalam contoh ini, Anda ingin mengkueri data dalam tabel Lineitem dataset TPC-H berdasarkan kondisi filter yang ditentukan oleh bidang l_shipdate. Untuk informasi lebih lanjut tentang pernyataan kueri, lihat Q1. Contoh pernyataan SQL:

    -- Pernyataan kueri asli
    SELECT
        l_returnflag,
        l_linestatus,
        sum(l_quantity) AS sum_qty,
        sum(l_extendedprice) AS sum_base_price,
        sum(l_extendedprice * (1 - l_discount)) AS sum_disc_price,
        sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) AS sum_charge,
        avg(l_quantity) AS avg_qty,
        avg(l_extendedprice) AS avg_price,
        avg(l_discount) AS avg_disc,
        count(*) AS count_order
    FROM
        lineitem
    WHERE
        l_shipdate <= date '1998-12-01' - interval '120' day
    GROUP BY
        l_returnflag,
        l_linestatus
    ORDER BY
        l_returnflag,
        l_linestatus;
    
    -- Pernyataan kueri yang dimodifikasi
    SELECT ... FROM lineitem
    WHERE
        l_year='1992' AND -- Kondisi filter terkait waktu hanya perlu ditambahkan ke tabel partisi yang diinginkan.
        l_shipdate <= date '1992-12-01' -- Rentang waktu dipersempit untuk lebih menunjukkan efeknya.
    ...;
  • Saran Konfigurasi

    1. Partisi tabel Lineitem berdasarkan waktu. Dalam contoh ini, tambahkan kolom l_year ke tabel Lineitem dan konfigurasikan bidang l_year sebagai kunci partisi untuk mempartisi tabel Lineitem berdasarkan tahun. Tentukan apakah akan mempartisi tabel atau hanya mengonfigurasi properti event_time_column berdasarkan volume data dan persyaratan bisnis. Untuk informasi lebih lanjut tentang batasan dan catatan penggunaan pada tabel partisi, lihat CREATE PARTITION TABLE.

    2. Konfigurasikan bidang filter waktu sebagai properti event_time_column untuk memastikan bahwa entri data dalam file di shard diurutkan berdasarkan properti event_time_column. Ini mengurangi jumlah file yang harus dipindai. Dalam contoh ini, konfigurasikan bidang l_shipdate sebagai properti event_time_column untuk tabel Lineitem. Untuk informasi lebih lanjut tentang prinsip dan penggunaan properti event_time_column, lihat Event Time Column (Segment Key).

  • Verifikasi Kinerja

    Definisikan tabel Lineitem sebagai tabel berorientasi kolom. Verifikasi kinerja kueri saat partisi dan properti event_time_column dikonfigurasi sesuai saran dan saat tidak ada partisi yang dikonfigurasi dan bidang lain dikonfigurasi sebagai properti event_time_column. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 3.

    Hasil Verifikasi:

    • Partisi dan event_time_column dikonfigurasi sesuai saran: 80 file dalam 1 partisi dipindai.

    • Tidak ada partisi yang dikonfigurasi dan event_time_column diatur ke bidang lain: Data tidak difilter berdasarkan partisi dan 320 file dipindai.

    Catatan

    Anda dapat mengeksekusi pernyataan EXPLAIN ANALYZE untuk melihat jumlah partisi yang dipindai yang ditentukan oleh parameter Partitions selected dan jumlah file yang dipindai yang ditentukan oleh parameter dop.

Skenario 4: Kueri dengan kondisi filter nilai tunggal non-waktu

  • Deskripsi Skenario

    Anda ingin melakukan kueri dengan kondisi filter nilai tunggal non-waktu. Dalam contoh ini, Anda ingin mengkueri data dalam tabel Lineitem dataset TPC-H berdasarkan kondisi filter nilai tunggal non-waktu yang ditentukan oleh bidang l_shipmode untuk agregasi data. Untuk informasi lebih lanjut tentang pernyataan kueri, lihat Q1. Contoh pernyataan SQL:

    SELECT
        ...
    FROM
        lineitem
    WHERE
        l_shipmode IN ('FOB', 'AIR');
  • Saran Konfigurasi

    1. Konfigurasikan bidang nilai tunggal sebagai kunci pengelompokan untuk memastikan bahwa entri data dengan nilai yang sama diurutkan secara berurutan dalam file. Ini membantu mengurangi operasi I/O. Dalam contoh ini, konfigurasikan bidang l_shipmode tabel Lineitem sebagai kunci pengelompokan.

    2. Buat indeks bitmap untuk bidang nilai tunggal untuk mempercepat proses menemukan data yang diinginkan. Dalam contoh ini, konfigurasikan bidang l_shipmode tabel Lineitem sebagai properti kolom bitmap.

  • Verifikasi Kinerja

    Definisikan tabel Lineitem sebagai tabel berorientasi kolom. Verifikasi kinerja kueri saat properti tabel dikonfigurasi sesuai saran dan saat bidang l_shipmode tidak dikonfigurasi sebagai kunci pengelompokan atau properti kolom bitmap. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 4.

    Hasil Verifikasi:

    • Properti tabel dikonfigurasi sesuai saran: 170 juta baris data dibaca, dan durasi kueri adalah 0,71s.

    • l_shipmode tidak dikonfigurasi sebagai kunci pengelompokan atau properti kolom bitmap: Seluruh tabel yang berisi 600 juta baris data dibaca, dan durasi kueri adalah 2,41s.

      Catatan
      • Anda dapat memeriksa jumlah baris data yang dibaca berdasarkan parameter read_rows dalam log kueri lambat. Untuk informasi lebih lanjut, lihat Kueri dan Analisis Log Kueri Lambat.

      • Anda dapat menggunakan rencana eksekusi untuk memeriksa apakah data difilter berdasarkan indeks bitmap. Jika rencana eksekusi berisi kata kunci Bitmap Filter, data difilter berdasarkan indeks bitmap.

Skenario 5: Kueri agregat berdasarkan bidang

  • Deskripsi Skenario

    Anda ingin melakukan kueri agregat berdasarkan bidang. Dalam contoh ini, Anda ingin melakukan kueri agregat pada tabel Lineitem dalam dataset TPC-H berdasarkan bidang l_suppkey. Contoh pernyataan SQL:

    SELECT
        l_suppkey,
        sum(l_extendedprice * (1 - l_discount))
    FROM
        lineitem
    GROUP BY
        l_suppkey;
  • Saran Konfigurasi

    Konfigurasikan bidang agregat sebagai kunci distribusi untuk mencegah sejumlah besar data di-shuffle di seluruh shard.

  • Verifikasi Kinerja

    Definisikan tabel Lineitem sebagai tabel berorientasi kolom. Verifikasi kinerja kueri saat bidang agregat l_suppkey dikonfigurasi sebagai kunci distribusi dan saat bidang lain dikonfigurasi sebagai kunci distribusi. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 5.

    Hasil Verifikasi:

    • Bidang agregat dikonfigurasi sebagai kunci distribusi: Sekitar 0,21 GB data di-shuffle, dan durasi eksekusi adalah 2,30s.

    • Bidang lain dikonfigurasi sebagai kunci distribusi: Sekitar 8,16 GB data di-shuffle, dan durasi eksekusi adalah 3,68s.

    Catatan

    Anda dapat memeriksa jumlah data yang di-shuffle berdasarkan parameter shuffle_bytes dalam log kueri lambat. Untuk informasi lebih lanjut, lihat Kueri dan Analisis Log Kueri Lambat.

Skenario 6: Kueri gabungan pada beberapa tabel

  • Deskripsi Skenario

    Anda ingin melakukan kueri gabungan pada beberapa tabel. Dalam contoh ini, Anda ingin melakukan kueri gabungan pada tabel Lineitem dan Orders dalam dataset TPC-H. Untuk informasi lebih lanjut tentang pernyataan kueri, lihat Q4. Contoh pernyataan SQL:

    SELECT
        o_orderpriority,
        count(*) AS order_count
    FROM
        orders
    WHERE
        o_orderdate >= date '1996-07-01'
        AND o_orderdate < date '1996-07-01' + interval '3' month
        AND EXISTS (
            SELECT
                *
            FROM
                lineitem
            WHERE
                l_orderkey=o_orderkey -- Kueri gabungan
                AND l_commitdate < l_receiptdate)
    GROUP BY
        o_orderpriority
    ORDER BY
        o_orderpriority;
  • Saran Konfigurasi

    Konfigurasikan bidang berdasarkan operasi gabungan dilakukan sebagai kunci distribusi untuk mencegah sejumlah besar data di-shuffle di seluruh shard.

  • Verifikasi Kinerja

    Definisikan tabel Lineitem dan Orders sebagai tabel berorientasi kolom. Verifikasi kinerja kueri saat bidang l_orderkey dan o_orderkey yang digunakan untuk operasi gabungan dikonfigurasi sebagai kunci distribusi dan saat bidang lain dikonfigurasi sebagai kunci distribusi. Sebagai contoh, bidang l_linenumber dikonfigurasi sebagai kunci distribusi tabel Lineitem, dan tidak ada kunci distribusi yang dikonfigurasi untuk tabel Orders. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 6.

    Hasil Verifikasi:

    • Kunci distribusi dikonfigurasi sesuai saran untuk tabel: Sekitar 0,45 GB data di-shuffle, dan durasi eksekusi adalah 2,19s.

    • Kunci distribusi tidak dikonfigurasi sesuai saran untuk tabel: Sekitar 6,31 GB data di-shuffle, dan durasi eksekusi adalah 5,55s.

    Catatan

    Anda dapat memeriksa jumlah data yang di-shuffle berdasarkan parameter shuffle_bytes dalam log kueri lambat. Untuk informasi lebih lanjut, lihat Kueri dan Analisis Log Kueri Lambat.

(Opsional) Tentukan grup tabel tempat tabel Anda berada

Jika instance Hologres Anda berisi lebih dari 256 core, dan instance tersebut digunakan dalam berbagai skenario bisnis, disarankan mengonfigurasi beberapa grup tabel dan menentukan grup tabel tempat tabel berada saat membuat tabel. Untuk informasi lebih lanjut, lihat Praktik Terbaik untuk Menentukan Grup Tabel.

Lampiran: Pernyataan pembuatan tabel

  • Pernyataan DDL dalam Skenario 1:

    -- Pernyataan bahasa definisi data (DDL) untuk membuat tabel dengan kunci utama. Jika Anda ingin membuat tabel tanpa mengonfigurasi kunci utama, hapus PRIMARY KEY yang ditentukan untuk bidang O_ORDERKEY.
    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', 'orientation', 'row');
    CALL SET_TABLE_PROPERTY('orders', 'clustering_key', 'o_orderkey');
    CALL SET_TABLE_PROPERTY('orders', 'distribution_key', 'o_orderkey');
    COMMIT;
  • Pernyataan DDL dalam Skenario 2:

    -- Buat tabel bernama Lineitem dan konfigurasikan properti yang diperlukan untuk tabel.
    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', 'orientation', 'row');
    -- CALL set_table_property('lineitem', 'clustering_key', 'L_ORDERKEY,L_SHIPDATE');
    CALL set_table_property('lineitem', 'distribution_key', 'L_ORDERKEY');
    COMMIT;
  • Pernyataan DDL dalam Skenario 3:

    -- Buat tabel partisi bernama Lineitem. Pernyataan yang digunakan untuk membuat tabel non-partisi sama dengan yang digunakan dalam skenario 2.
    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,
        L_YEAR          TEXT        NOT NULL,
        PRIMARY KEY (L_ORDERKEY,L_LINENUMBER,L_YEAR)
    )
    PARTITION BY LIST (L_YEAR);
    CALL set_table_property('lineitem', 'clustering_key', 'L_ORDERKEY,L_SHIPDATE');
    CALL set_table_property('lineitem', 'segment_key', 'L_SHIPDATE');
    CALL set_table_property('lineitem', 'distribution_key', 'L_ORDERKEY');
    COMMIT;
  • Pernyataan DDL dalam Skenario 4:

    -- Buat tabel bernama Lineitem dan konfigurasikan properti tabel tidak sesuai saran. Dalam skenario perbandingan, konfigurasikan kunci pengelompokan dan properti kolom bitmap sesuai saran.
    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', '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_comment');
    COMMIT;
  • Pernyataan DDL dalam Skenario 5:

    -- Buat tabel bernama Lineitem dan konfigurasikan bidang yang ingin Anda tentukan dalam klausa Group By sebagai kunci distribusi.
    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,L_SUPPKEY)
    );
    CALL set_table_property('lineitem', 'segment_key', 'L_COMMITDATE');
    CALL set_table_property('lineitem', 'clustering_key', 'L_ORDERKEY,L_SHIPDATE');
    CALL set_table_property('lineitem', 'distribution_key', 'L_SUPPKEY');
    COMMIT;
  • Pernyataan DDL dalam Skenario 6:

    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');
    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');
    COMMIT;

Referensi

Untuk informasi lebih lanjut tentang pernyataan DDL untuk tabel internal Hologres, lihat topik-topik berikut: