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.
Konfigurasikan properti kueri tabel Anda
Setelah menentukan format penyimpanan tabel, konfigurasikan properti tabel berdasarkan skenario kueri.
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_orderkeysecara unik mengidentifikasi sebuah pesanan.Tabel Lineitem: Tabel detail pesanan, di mana bidang
o_orderkeydanl_linenumbersecara 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_orderkeyuntuk 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_orderkeydikonfigurasi 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_orderkeydengan QPS tinggi dari tabel Lineitem. Tabel Lineitem adalah tabel detail pesanan dalam dataset TPC-H. Dalam tabel ini, Anda dapat menentukan bidangl_orderkeydanl_linenumberuntuk mengidentifikasi produk dalam pesanan. Contoh pernyataan:SELECT * FROM lineitem WHERE l_orderkey = ?;Saran Konfigurasi
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).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 keytabel Lineitem kel_orderkey.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_scanke 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
Partisi tabel Lineitem berdasarkan waktu. Dalam contoh ini, tambahkan kolom l_year ke tabel Lineitem dan konfigurasikan bidang
l_yearsebagai kunci partisi untuk mempartisi tabel Lineitem berdasarkan tahun. Tentukan apakah akan mempartisi tabel atau hanya mengonfigurasi propertievent_time_columnberdasarkan volume data dan persyaratan bisnis. Untuk informasi lebih lanjut tentang batasan dan catatan penggunaan pada tabel partisi, lihat CREATE PARTITION TABLE.Konfigurasikan bidang filter waktu sebagai properti
event_time_columnuntuk memastikan bahwa entri data dalam file di shard diurutkan berdasarkan propertievent_time_column. Ini mengurangi jumlah file yang harus dipindai. Dalam contoh ini, konfigurasikan bidangl_shipdatesebagai propertievent_time_columnuntuk tabel Lineitem. Untuk informasi lebih lanjut tentang prinsip dan penggunaan propertievent_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_columndikonfigurasi sesuai saran dan saat tidak ada partisi yang dikonfigurasi dan bidang lain dikonfigurasi sebagai propertievent_time_column. Untuk informasi lebih lanjut tentang pernyataan pembuatan tabel, lihat Pernyataan DDL dalam Skenario 3.Hasil Verifikasi:
Partisi dan
event_time_columndikonfigurasi sesuai saran: 80 file dalam 1 partisi dipindai.Tidak ada partisi yang dikonfigurasi dan
event_time_columndiatur ke bidang lain: Data tidak difilter berdasarkan partisi dan 320 file dipindai.
CatatanAnda dapat mengeksekusi pernyataan
EXPLAIN ANALYZEuntuk 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_shipmodeuntuk 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
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_shipmodetabel Lineitem sebagai kunci pengelompokan.Buat indeks bitmap untuk bidang nilai tunggal untuk mempercepat proses menemukan data yang diinginkan. Dalam contoh ini, konfigurasikan bidang
l_shipmodetabel 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_shipmodetidak 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_shipmodetidak dikonfigurasi sebagai kunci pengelompokan atau properti kolom bitmap: Seluruh tabel yang berisi 600 juta baris data dibaca, dan durasi kueri adalah2,41s.CatatanAnda 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_suppkeydikonfigurasi 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.
CatatanAnda 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_orderkeydano_orderkeyyang digunakan untuk operasi gabungan dikonfigurasi sebagai kunci distribusi dan saat bidang lain dikonfigurasi sebagai kunci distribusi. Sebagai contoh, bidangl_linenumberdikonfigurasi 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.
CatatanAnda 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: