利用自動壓縮載入資料表 - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

利用自動壓縮載入資料表

您可以根據自己對資料的評估,將壓縮編碼手動套用至資料表中的資料欄。或者,您可以使用 COPY命令搭配COMPUPDATE設定為 ON,根據範例資料自動分析和套用壓縮。

您可以在建立和載入全新資料表時使用自動壓縮。COPY 命令會執行壓縮分析。藉由在已填入的資料表上執行 ANALYZE COMPRESSION 命令,您也可以執行壓縮分析,而不載入資料或變更資料表上的壓縮。例如,當您想要分析資料表上的壓縮以備日後使用ANALYZECOMPRESSION時,您可以執行 ,同時保留現有的資料定義語言 (DDL) 陳述式。

選擇壓縮編碼時,自動壓縮會平衡整體效能。如果排序索引鍵欄位的壓縮比相同查詢中的其他欄位高出許多,限制範圍的掃描執行效果可能較差。因此,自動壓縮將跳過排序索引鍵資料欄上的資料分析階段,並保留使用者定義的編碼類型。

如果您尚未明確定義RAW編碼類型,則自動壓縮會選擇編碼。ANALYZE COMPRESSION 行為相同。為了獲得最佳查詢效能,請考慮使用 RAW 進行排序索引鍵。

自動壓縮的運作方式

當 COMPUPDATE 參數開啟時,每當您使用空白目標資料表執行COPY命令,且所有資料表資料欄都具有RAW編碼或沒有編碼時,COPY命令都會套用自動壓縮。

若要將自動壓縮套用至空資料表,無論其目前的壓縮編碼為何,請在將 COMPUPDATE 選項設定為 ON 的情況下執行 COPY 命令。若要關閉自動壓縮,請使用 COMPUPDATE選項設定為 來執行 COPY命令OFF。

您不可以套用自動壓縮至已包含資料的資料表。

注意

自動壓縮分析需要在載入資料中有足夠的資料列 (每個配量至少 100,000 資料列),才能產生有意義的樣本。

自動壓縮會隨著載入交易在背景中執行這些操作:

  1. 從輸入檔案載入初始的資料列樣本。樣本數是以 COMPROWS 參數的值為基礎。預設為 100,000。

  2. 為每個資料欄選擇壓縮選項。

  3. 樣本資料列從資料表移除。

  4. 以所選壓縮編碼重新建立資料表。

  5. 使用新編碼載入和壓縮整個輸入檔案。

執行 COPY 命令後,資料表會完全載入、壓縮,並可供使用。如果您稍後載入更多資料,附加的資料列會根據現有編碼壓縮。

如果您只想要執行壓縮分析,請執行 ANALYZE COMPRESSION,這比執行完整 更有效率COPY。然後您可以評估結果來決定是否使用自動壓縮或手動重新建立資料表。

只有 COPY命令支援自動壓縮。另外,您可以在建立資料表時手動套用壓縮編碼。如需手動壓縮編碼的詳細資訊,請參閱資料欄壓縮以減少儲存資料的大小

自動壓縮範例

在此範例中,假設TICKIT資料庫包含名為 的LISTING資料表複本BIGLIST,而且您希望在載入大約 300 萬列時,自動壓縮此資料表。

載入和自動壓縮資料表
  1. 確保資料表是空白的。您僅可以套用自動壓縮至空白資料表:

    TRUNCATE biglist;
  2. 使用單一COPY命令載入資料表。雖然資料表是空白的,可能已指定部分較舊的編碼。若要協助 Amazon Redshift 執行壓縮分析,請將 COMPUPDATE 參數設定為 ON。

    COPY biglist FROM 's3://amzn-s3-demo-bucket/biglist.txt' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|' COMPUPDATE ON;

    由於未指定COMPROWS任何選項,因此會使用每個切片 100,000 列的預設和建議樣本數。

  3. 查看BIGLIST資料表的新結構描述,以檢閱自動選擇的編碼結構描述。

    SELECT "column", type, encoding from pg_table_def where tablename = 'biglist'; Column | Type | Encoding ----------------+-----------------------------+---------- listid | integer | az64 sellerid | integer | az64 eventid | integer | az64 dateid | smallint | none numtickets | smallint | az64 priceperticket | numeric(8,2) | az64 totalprice | numeric(8,2) | az64 listtime | timestamp without time zone | az64
  4. 驗證已載入預期的資料列數量:

    select count(*) from biglist; count --------- 3079952 (1 row)

當資料列稍後使用 COPY或 INSERT陳述式附加到此表格時,會套用相同的壓縮編碼。