本文由簡體中文內容自動轉碼而成。阿里雲不保證此自動轉碼的準確性、完整性及時效性。本文内容請以簡體中文版本為準。

表格儲存體格式定義

更新時間:2025-02-20 19:34

雲原生資料倉儲AnalyticDB PostgreSQL版支援行存、列存和行列混合儲存三種儲存模式。您可以根據使用情境,在建表時選行存表(適合資料更新較頻繁或採用INSERT方式的即時寫入的情境)或列存表(適合少量列的資料查詢、聚集等資料倉儲應用情境)。

定義表的儲存模式

如果您需要定義行存表或列存表,可以在建表語句的WITH參數中指定儲存模式。同時,WITH參數中還可以指定壓縮演算法和等級,詳情如下表。

參數名稱

描述

取值範圍

參數名稱

描述

取值範圍

orientation

指定表的儲存模式。row 表示行儲存,column 表示列儲存。預設值為row

說明

WITH參數不支援設定行列混存模式。如需設定行列混存,請參見混合儲存表

  • row

  • column

compresstype

指定表的壓縮演算法。

4.3和6.0版本預設值為none,表示不使用壓縮演算法。

7.0版本預設值為auto,表示根據資料的特點和系統配置自動選擇最合適的壓縮演算法。

  • 4.3 版本支援zlib、rle_type、none、auto。

  • 6.0 版本支援zstd、zlib、rle_type、lz4、none、auto。

  • 7.0版本支援zstd、lz4、none、auto。

compresslevel

指定壓縮層級,較高的值表示更高的壓縮率但有較慢的壓縮速度。預設值為1。

1~9。僅支援整數

appendonly

啟用或禁用追加最佳化儲存。預設值為false

  • true

  • false

行存表

預設情況下,AnalyticDB PostgreSQL版建立的是行存表(Heap Table),使用的PostgreSQL堆儲存模型。行存表適合資料更新較頻繁的情境,或者採用INSERT方式的即時寫入的情境,同時當行存表建有B-Tree索引時,具備更好的點查詢資料檢索效能。

樣本

  • 下述語句建立了一個預設堆儲存類型的行存表。

    CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
    說明

    當採用Data Transmission Service寫入 AnalyticDB for PostgreSQL資料時,AnalyticDB for PostgreSQL的目標表應設計為行存表,而不要採用列存表。DTS為準即時資料同步方式,除INSERT外,即支援UPDATE和DELETE等較多更新操作的同步。

  • 您可以指定orientation參數建立行存表(ao_row)。

    CREATE TABLE bar (a int, b text) 
    WITH (appendonly=true, orientation=row)
    DISTRIBUTED BY (a);

列存表

列存表(Column-Oriented Table)的按列儲存格式,資料訪問只會讀取涉及的列,適合少量列的資料查詢、聚集等資料倉儲應用情境,在此類情境中,列存表能夠提供更高效的I/O。但列存表不適合頻繁的更新操作或者大批量的INSERT寫入情境,這時其效率較低。列存表的資料寫入建議採用COPY等批量載入方式。列存表可以提供平均 3-5倍的較高資料壓縮率。

樣本

列存表必須是追加最佳化表。例如,要建立一個列存表,必須指定為appendonly=true

CREATE TABLE bar (a int, b text) 
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);

混合儲存表

重要

AnalyticDB for PostgreSQL7.0版執行個體支援混合儲存表。

分區表和非分區表均支援行列混合儲存。

非分區表

將非分區表的儲存引擎設定為beam即可實現行列混存。

Beam的儲存分為行存Delta和PAX結構的列存Base兩個部分。在資料寫入時,會根據資料寫入方式,自動選擇合適的儲存模式。當您使用INSERT INTO VALUES等流式即時方式寫入資料時,會寫入行存Delta部分,以達到與行存Heap表相當的即時寫入效能。當您使用COPYINSERT INTO SELECT等批處理方式寫入資料時,則會直接寫入到列存Base部分,以達到更高的吞吐,獲得更高的寫入效能。

建立表時指定儲存引擎為beam

CREATE TABLE testtable (a int) USING beam;

變更已存在的表的儲存引擎為beam

ALTER TABLE testtable SET ACCESS METHOD beam;

分區表

以如下分區表am_partitioned為例,為您介紹如何設定分區表的行列混存的方法。

CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;

建立分區時指定分區的儲存模式

  • 建立後,am_partitioned_1分區為ao_column列存。

    CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 0) USING ao_column;
  • 建立後,am_partitioned_2分區的儲存模式為行列混存。

    CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 1) USING beam;

變更已存在分區的儲存模式

變更am_partitioned_1儲存模式為ao_row行存。

ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;

壓縮

壓縮主要用於列存表或者追加寫(appendonly=true)的行存表,有以下兩種類型的壓縮可用。

  • 應用於整個表的表級壓縮。

  • 應用到指定列的列級壓縮。使用者可以為不同的列應用不同的列級壓縮演算法。

目前AnalyticDB PostgreSQL版支援的壓縮演算法如下:

  • 4.3 版本支援zlib、rle_type、none、auto。

  • 6.0 版本支援zstd、zlib、rle_type、lz4、none、auto。

  • 7.0版本支援zstd、lz4、none、auto。

說明

您也可以指定QuickLZ壓縮演算法,但內部會使用zlib演算法替換,另外rle_type演算法只適用於列存表。

樣本

建立一個列存表。

CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);

建立一個使用zlib壓縮且壓縮層級為5的列存表。

CREATE TABLE foo (a int, b text) 
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);

建立一個使用zstd壓縮且壓縮層級為9的列存表。

CREATE TABLE foo (a int, b text) 
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);
  • 本頁導讀 (1, M)
  • 定義表的儲存模式
  • 行存表
  • 列存表
  • 混合儲存表
  • 非分區表
  • 分區表
  • 壓縮
文檔反饋
phone Contact Us

Chat now with Alibaba Cloud Customer Service to assist you in finding the right products and services to meet your needs.

alicare alicarealicarealicare