Amazon Redshift 为什么在 STATUPDATE 关闭时运行 COPY ANALYZE 进程?

1 分钟阅读
0

我尝试使用 COPY 命令将数据加载到 Amazon Redshift 中的新表。我甚至添加了 COMPUPDATE OFF 参数。为什么 COPY ANALYZE 仍会运行?

简短描述

在 Amazon Redshift 中创建表之前,请选择表的分配方式。如果不指定表的分配方式,则默认为 AUTO 分配。Amazon Redshift 的 AUTO 分配功能随后将使用 COPY ANALYZE 进程确定该表的分配方式应使用 EVEN 还是 ALL。

**注意:**使用 AUTO 分配方式时,COMPUPDATE OFF 参数仍会在表上运行 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 事务的一部分运行。


相关信息

使用暂存表执行合并(更新插入)

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