Redshift:当源表中有自动排序键时,创建表失败
Posted
技术标签:
【中文标题】Redshift:当源表中有自动排序键时,创建表失败【英文标题】:Redshift : create table like fails when there is AUTO sort key in source table 【发布时间】:2021-03-28 16:36:38 【问题描述】:我正在尝试使用 redshift 创建一个临时表
CREATE TABLE tmp_users (LIKE users);
这工作了一段时间。但最近我在生产中遇到了如下故障。
org.postgresql.util.PSQLException: ERROR: Invalid syntax: Create table sortkey auto with initial sortkeys.
在 CREATE TABLE 查询执行期间,我的源表没有提供排序键。因此,根据 redshift 文档,它们将具有默认的 AUTO SORTKEY。来自 SVV_TABLE_INFO
table | diststyle | sortkey1
--------------------------------------
users | AUTO(ALL) | AUTO(SORTKEY)
对上述源表架构执行 LIKE 查询不会导致任何问题。
但我在生产表中看到 sortkey1 更改为 users 表 AUTO(SORTKEY(c1)) 的列之一并在此架构上执行 LIKE 会导致上述异常。
我的问题是
-
作为自动性能调整的一部分,redshift 是否更改了排序键?
为什么 LIKE 在这种情况下会失败?如果是预期的.. 我该如何创建表格副本?
我提到了问题nvalid syntax: Create table sortkey auto with initial sortkeys,但在我的情况下,建议的删除排序键的解决方案是不可能的,因为表有数百万条记录。
【问题讨论】:
【参考方案1】:我有同样的问题。 create table like 失败的原因是原始表具有自动排序键,而 Redshift 自动为该表生成了一些特定的排序键。
显然,由于性能问题,无法删除 sortkey。
这种情况下的解决方案是更改 sortkey 并强制它与 Redshift 自动生成的完全相同。
缺点: Redshift 将不再自动更改此表的 sorkey,您必须监控此表的用例并手动应用最佳排序键。 优点: 您可以使用此表元数据创建其他表(create table like)
【讨论】:
以上是关于Redshift:当源表中有自动排序键时,创建表失败的主要内容,如果未能解决你的问题,请参考以下文章
当源表的一行中的多个列与目标表中单行的相同列匹配时,从目标 spark delta 表中删除一行
需要从源表中获取布尔类型列作为 varchar 并在 Amazon redshift 的目标表中存储为 varchar