為什麼 Amazon Redshift 在 STATUPDATE 關閉時,仍會執行 COPY ANALYZE 程序?

1 分的閱讀內容
0

我嘗試使用 COPY 命令將資料載入到 Amazon Redshift 的新資料表。我甚至新增了 COMPUPDATE OFF 參數。為什麼 COPY ANALYZE 仍然在執行?

簡短說明

在 Amazon Redshift 中建立資料表之前,先選取資料表的分佈樣式。如果資料表未指定分佈樣式,則預設為 AUTO 分佈。然後,Amazon Redshift 的 AUTO 分佈功能會使用 COPY ANALYZE 程序來判斷資料表是否應使用 EVEN 或 ALL 分佈。

注意: COMPUPDATE OFF 參數仍會使用 AUTO 分佈樣式對資料表執行 COPY ANALYZESTATUPDATE OFF 參數不會停用或重新按下 COPY ANALYZE 命令。

解決方法

1.    執行 SHOW TABLE驗證資料表的目前分佈樣式

SHOW TABLE [schema_name.]table_name

注意: 依預設,如果未在 CREATE TABLE 陳述式中指定分佈樣式,Amazon Redshift 會套用 AUTO 分佈。

2.    如果已開啟 AUTO 分佈,則使用已定義的分佈樣式建立資料表。指定分佈樣式可阻止 COPY ANALYZE 執行。

下列範例會指定 EVEN 分佈樣式:

create table rs_example_test (id int)diststyle even;

如需有關分佈樣式的詳細資訊,請參閱使用資料分佈樣式

3.    使用 COPY 命令將資料載入到資料表,然後附加 STATUPDATE OFF 參數。

注意: 最佳實務是使用 COPY 命令載入大量資料,而不是使用個別 INSERT 陳述式。這可以最大限度地降低效能問題的風險。

4.    在 SVL_STATEMENTTEXT 系統資料表上執行查詢,然後依與工作階段相關的程序 ID (PID) 進行篩選

select userid, xid, pid, trim(label) as label, starttime, endtime, sequence, trim(type) as type, left(text,60) text from svl_statementtext where pid = 26815 order by xid, starttime, sequence;

上面的語法會檢查 COPY ANALYZE 是否作為 COPY 交易的一部分執行。

輸出看起來類似下列內容:

userid      xid            pid    label      starttime            endtime               sequence     type      text
100       78915    26815   default      2019-03-19  14:06:19    2019-03-19 14:06:21   0             QUERY      copy rs_test3 from 's3://xxxxx-rs-log/AWSLogs/rs_test2.csv'\
100       78915    26815   default      2019-03-19  14:06:21    2019-03-19 14:06:21   0             UTILITY  COMMIT

這樣可確認 COPY ANALYZE 不再作為 COPY 交易的一部分執行。


相關資訊

使用暫存資料表執行合併 (upsert)

AWS 官方
AWS 官方已更新 2 年前