日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

文檔

場(chǎng)景化建表調(diào)優(yōu)指南

Hologres支持設(shè)置多種表屬性,不同的表屬性有不同的特性。本文為您介紹如何根據(jù)業(yè)務(wù)查詢(xún)場(chǎng)景設(shè)置合適的表屬性,從而使查詢(xún)?cè)趫?zhí)行過(guò)程中掃描數(shù)據(jù)量更少、訪問(wèn)文件數(shù)更少、產(chǎn)生更少的I/O次數(shù),進(jìn)而使得查詢(xún)更快、查詢(xún)QPS更高。

確定表的存儲(chǔ)格式

Hologres支持行存、列存、行列共存三種存儲(chǔ)格式,具體原理及使用建議請(qǐng)參見(jiàn)表存儲(chǔ)格式:列存、行存、行列共存

首先請(qǐng)參考下圖所示流程確定您表的存儲(chǔ)格式。如果您的業(yè)務(wù)場(chǎng)景尚未完全明確,請(qǐng)優(yōu)先選擇行列共存,以兼顧更多可能出現(xiàn)的場(chǎng)景。image..png

確定表的查詢(xún)屬性

在確定表的存儲(chǔ)格式后,您需要根據(jù)查詢(xún)場(chǎng)景確定表的屬性。

說(shuō)明
  • 下文均為針對(duì)單場(chǎng)景設(shè)置的表屬性示例。

  • 示例中均使用64 CU規(guī)格的Hologres實(shí)例對(duì)TPC-H 100GB中的Lineitem和Orders兩張表進(jìn)行效果驗(yàn)證,表字段定義及數(shù)據(jù)導(dǎo)入方法請(qǐng)參見(jiàn)OLAP查詢(xún)場(chǎng)景

  • TPC-H表介紹:TPC-H數(shù)據(jù)集模擬的是零售場(chǎng)景。其中:

    • Orders表是訂單表(根據(jù)o_orderkey字段可以確定一個(gè)訂單)。

    • Lineitem表是訂單明細(xì)表(根據(jù)o_orderkeyl_linenumber字段可以確定一個(gè)訂單中的某個(gè)商品)。

  • 本文的TPC-H的實(shí)現(xiàn)基于TPC-H的基準(zhǔn)測(cè)試,并不能與已發(fā)布的TPC-H基準(zhǔn)測(cè)試結(jié)果相比較,本文中的測(cè)試并不符合TPC-H基準(zhǔn)測(cè)試的所有要求。

  • 如果您的表需要兼顧多個(gè)場(chǎng)景,如有不同的查詢(xún)過(guò)濾條件或有不同的JOIN字段,則需要綜合考慮這些場(chǎng)景的查詢(xún)頻率與性能需求,從而設(shè)置最優(yōu)的表屬性。

場(chǎng)景1:超高QPS點(diǎn)查

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景為萬(wàn)級(jí)及以上QPS的點(diǎn)查,以TPC-H Orders表為例,通過(guò)o_orderkey字段可以唯一確定一行數(shù)據(jù)。典型SQL樣例如下:

    SELECT * FROM orders WHERE o_orderkey = ?;
  • 設(shè)置建議

    將點(diǎn)查時(shí)的過(guò)濾字段設(shè)置為主鍵(Primary Key),Hologres支持通過(guò)Fixed Plan加速執(zhí)行基于主鍵的點(diǎn)查,實(shí)現(xiàn)執(zhí)行效率的成倍提升,原理請(qǐng)參見(jiàn)Fixed Plan加速SQL執(zhí)行

  • 效果驗(yàn)證

    您可以將Orders表定義為行存表或行列共存表,分別對(duì)將o_orderkey字段設(shè)為主鍵和不設(shè)主鍵兩種情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景1 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)Key/Value點(diǎn)查場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 有主鍵:并發(fā)數(shù)500,平均QPS約為10.4萬(wàn),平均latency約為4ms

    • 無(wú)主鍵:并發(fā)數(shù)500,平均QPS約為1.6萬(wàn),平均latency約為30ms

場(chǎng)景2:高QPS的小數(shù)據(jù)量前綴掃描

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景滿足以下條件:

    • 表由多個(gè)字段組成復(fù)合主鍵(Primary Key)。

    • 要求高QPS (萬(wàn)級(jí)QPS)查詢(xún)。查詢(xún)條件為根據(jù)主鍵字段組合中的某個(gè)字段進(jìn)行等值過(guò)濾,查詢(xún)結(jié)果集一般比較小(幾條或者幾十條)。

    以TPC-H Lineitem表為例,Lineitem是訂單明細(xì)表(根據(jù)l_orderkeyl_linenumber字段可以確定一個(gè)訂單中的某個(gè)商品),現(xiàn)需要高QPS的根據(jù)某個(gè)訂單號(hào)(l_orderkey)獲取此訂單下的所有商品,SQL樣式如下:

    SELECT * FROM lineitem WHERE l_orderkey = ?;
  • 設(shè)置建議

    1. 將等值過(guò)濾條件的字段設(shè)置為主鍵(Primary Key)的最左字段,即Lineitem表的主鍵是(l_orderkey, l_linenumber),而不是(l_linenumber, l_orderkey)

    2. 將等值過(guò)濾條件的字段設(shè)置為Distribution Key,保證需要掃描的數(shù)據(jù)都存儲(chǔ)在同一個(gè)Shard,減少訪問(wèn)的Shard數(shù),以提高QPS。即Lineitem表的distribution_keyl_orderkey

    3. 將等值過(guò)濾條件的字段設(shè)置為Clustering Key(行存表不需要,列存表和行列共存表需要),保證需要掃描的數(shù)據(jù)在文件中連續(xù),減少I(mǎi)/O次數(shù)。即Lineitem表的clustering_key設(shè)置為l_orderkey。

    通過(guò)如上的表屬性設(shè)置,將查詢(xún)轉(zhuǎn)化成了單Shard的前綴掃描(PrefixScan)。Hologres支持通過(guò)Fixed Plan加速執(zhí)行PrefixScan場(chǎng)景(需要開(kāi)啟hg_experimental_enable_fixed_dispatcher_for_scanGUC ),詳情請(qǐng)參見(jiàn)Fixed Plan加速SQL執(zhí)行

  • 效果驗(yàn)證

    您可以將Lineitem表定義為行存表或行列共存表,分別對(duì)按上述組合設(shè)置表屬性和不按上述組合設(shè)置表屬性?xún)煞N情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景2 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)Key/Value點(diǎn)查場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 按上述組合設(shè)置表屬性:并發(fā)數(shù)500,平均QPS約為3.7萬(wàn),平均latency約為13ms

    • 不按上述組合設(shè)置:并發(fā)數(shù)1,平均QPS約為60,平均latency約為16ms

場(chǎng)景3:有時(shí)間過(guò)濾條件的查詢(xún)

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景帶有典型的時(shí)間過(guò)濾條件,以TPC-H Lineitem表為例,需要通過(guò)l_shipdate字段進(jìn)行時(shí)間過(guò)濾(如查詢(xún)語(yǔ)句Q1),適當(dāng)修改時(shí)間過(guò)濾條件,SQL樣式如下:

    -- 原始Query
    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;
    
    -- 修改后的Query
    SELECT ... FROM lineitem
    WHERE
        l_year = '1992' AND  -- 僅分區(qū)表需要增加該時(shí)間過(guò)濾條件
        l_shipdate <= date '1992-12-01'  -- 適當(dāng)縮小時(shí)間范圍以更好地驗(yàn)證效果
    ...;
  • 設(shè)置建議

    1. 使用分區(qū)表,根據(jù)時(shí)間過(guò)濾條件進(jìn)行分區(qū)。本場(chǎng)景針對(duì)Lineitem表增加l_year列并將其設(shè)為分區(qū)鍵,即為按年分區(qū)。您需要結(jié)合實(shí)際數(shù)據(jù)量等因素綜合考慮,決定是否使用分區(qū)表,或只設(shè)置event_time_column。分區(qū)表使用限制與注意事項(xiàng)請(qǐng)參見(jiàn)CREATE PARTITION TABLE

    2. 將時(shí)間過(guò)濾字段設(shè)置為event_time_column,保證Shard內(nèi)的各文件按event_time_column值有序排列,減少掃描文件數(shù)。即Lineitem表的event_time_columnl_shipdateevent_time_column原理及使用請(qǐng)參見(jiàn)Event Time Column(Segment Key)

  • 效果驗(yàn)證

    您可以將Lineitem表定義為列存表,分別對(duì)按上述建議設(shè)置分區(qū)和event_time_column、不設(shè)置分區(qū)并將其他字段設(shè)為event_time_column兩種情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景3 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)OLAP查詢(xún)場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 按上述建議設(shè)置分區(qū)和event_time_column:掃描分區(qū)數(shù)為1,掃描文件數(shù)為80。

    • 不設(shè)置分區(qū)并將其他字段設(shè)為event_time_column:未經(jīng)過(guò)分區(qū)過(guò)濾,掃描文件數(shù)為320。

    說(shuō)明

    可以通過(guò)執(zhí)行EXPLAIN ANALYZE命令查看SQL的掃描分區(qū)數(shù)(Partitions selected)和掃描文件數(shù)(dop)。

場(chǎng)景4:有非時(shí)間的單值過(guò)濾條件的查詢(xún)

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景帶有非時(shí)間類(lèi)的單值過(guò)濾條件,以TPC-H Lineitem表為例,需要通過(guò)非時(shí)間字段l_shipmode進(jìn)行單值過(guò)濾(如按查詢(xún)語(yǔ)句Q1進(jìn)行聚合計(jì)算),SQL樣式如下:

    SELECT
        ...
    FROM
        lineitem
    WHERE
        l_shipmode IN ('FOB', 'AIR');
  • 設(shè)置建議

    1. 將單值字段設(shè)置為Clustering Key,保證相同值的數(shù)據(jù)在文件中連續(xù),減少I(mǎi)/O次數(shù)。即Lineitem表的l_shipmode為Clustering Key。

    2. 將單值字段設(shè)置為Bitmap,加速定位到符合條件的數(shù)據(jù)所在位置。即Lineitem表的l_shipmode為Bitmap_columns。

  • 效果驗(yàn)證

    您可以將Lineitem表定義為列存表,分別對(duì)按上述建議設(shè)置表屬性、不將l_shipmode設(shè)為Clustering Key和Bitmap_columns兩種情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景4 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)OLAP查詢(xún)場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 按上述建議設(shè)置表屬性:讀取數(shù)據(jù)行數(shù)1.7億行,查詢(xún)時(shí)長(zhǎng)0.71s

    • 不將l_shipmode設(shè)為Clustering Key和Bitmap_columns:讀取數(shù)據(jù)行數(shù)6.0億行(全表掃描),查詢(xún)時(shí)長(zhǎng)2.41s

      說(shuō)明
      • 可以通過(guò)慢Query日志查看讀取數(shù)據(jù)行數(shù)(read_rows),詳情請(qǐng)參見(jiàn)慢Query日志查看與分析

      • 可以通過(guò)執(zhí)行計(jì)劃驗(yàn)證是否通過(guò)Bitmap過(guò)濾,執(zhí)行計(jì)劃中有Bitmap Filter關(guān)鍵字,說(shuō)明查詢(xún)進(jìn)行了Bitmap過(guò)濾。

場(chǎng)景5:有按某字段聚合的查詢(xún)

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景為按某字段聚合,以TPC-H Lineitem表為例,針對(duì)l_suppkey字段進(jìn)行分組聚合查詢(xún),SQL樣式如下:

    SELECT
        l_suppkey,
        sum(l_extendedprice * (1 - l_discount))
    FROM
        lineitem
    GROUP BY
        l_suppkey;
  • 設(shè)置建議

    將聚合字段設(shè)置為Distribution Key,避免跨Shard的大量數(shù)據(jù)Shuffle。

  • 效果驗(yàn)證

    您可以將Lineitem表定義為列存表,分別對(duì)將聚合字段l_suppkey設(shè)為Distribution Key、將其他字段設(shè)為Distribution Key兩種情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景5 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)OLAP查詢(xún)場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 設(shè)置合適的Distribution Key:數(shù)據(jù)Shuffle量為 0.21 GB,執(zhí)行時(shí)長(zhǎng)2.30s

    • 設(shè)置不合適的Distribution Key:數(shù)據(jù)Shuffle量為 8.16 GB,執(zhí)行時(shí)長(zhǎng)3.68s

    說(shuō)明

    可以通過(guò)慢Query日志查看Shuffle數(shù)據(jù)量(shuffle_bytes),詳情請(qǐng)參見(jiàn)慢Query日志查看與分析

場(chǎng)景6:多表JOIN查詢(xún)

  • 場(chǎng)景

    如果您的查詢(xún)場(chǎng)景為多表JOIN查詢(xún),以TPC-H Lineitem表和Orders表為例,按查詢(xún)語(yǔ)句Q4進(jìn)行JOIN查詢(xún),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 -- JOIN查詢(xún)
                AND l_commitdate < l_receiptdate)
    GROUP BY
        o_orderpriority
    ORDER BY
        o_orderpriority;
  • 設(shè)置建議

    建議將JOIN字段設(shè)置為Distribution Key,實(shí)現(xiàn)Local Join,避免跨Shard的大量數(shù)據(jù)Shuffle。

  • 效果驗(yàn)證

    您可以將Lineitem表和Orders表定義為列存表,分別對(duì)將JOIN字段l_orderkeyo_orderkey設(shè)為各自的Distribution Key、設(shè)置其他字段為Distribution Key(比如將l_linenumber字段設(shè)為L(zhǎng)ineitem表的Distribution Key、將Orders表的Distribution Key設(shè)為空)兩種情況進(jìn)行效果驗(yàn)證,建表語(yǔ)句請(qǐng)參見(jiàn)場(chǎng)景6 DDL,驗(yàn)證方法請(qǐng)參見(jiàn)OLAP查詢(xún)場(chǎng)景

    驗(yàn)證結(jié)果如下:

    • 兩個(gè)表均設(shè)置合適的Distribution Key:數(shù)據(jù)Shuffle量為0.45 GB,執(zhí)行時(shí)長(zhǎng)2.19s

    • 兩個(gè)表均設(shè)置不合適的Distribution Key:數(shù)據(jù)Shuffle量為6.31 GB,執(zhí)行時(shí)長(zhǎng)5.55s

    說(shuō)明

    可以通過(guò)慢Query日志查看Shuffle數(shù)據(jù)量(shuffle_bytes),詳情請(qǐng)參見(jiàn)慢Query日志查看與分析

(可選)確定表所屬的Table Group

如果您的實(shí)例規(guī)格較大(大于256 Core),并且業(yè)務(wù)場(chǎng)景較豐富,可以考慮規(guī)劃多個(gè)Table Group,并在建表時(shí)指定表所屬的Table Group。詳情請(qǐng)參見(jiàn)Table Group設(shè)置最佳實(shí)踐

附錄:建表語(yǔ)句

  • 場(chǎng)景1 DDL:

    -- 有主鍵表DDL如下。無(wú)主鍵表只需刪去O_ORDERKEY的PRIMARY KEY定義。
    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;
  • 場(chǎng)景2 DDL:

    -- 創(chuàng)建滿足上文表屬性組合的Lineitem表。
    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;
  • 場(chǎng)景3 DDL:

    -- 創(chuàng)建Lineitem分區(qū)表。非分區(qū)表同場(chǎng)景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;
  • 場(chǎng)景4 DDL:

    -- 創(chuàng)建設(shè)置不恰當(dāng)表屬性的Lineitem表。對(duì)比場(chǎng)景只需將clustering_key和bitmap_columns改為恰當(dāng)值。
    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;
  • 場(chǎng)景5 DDL:

    -- 將Group By字段設(shè)為distribution_key的Lineitem表。
    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;
  • 場(chǎng)景6 DDL:

    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;