【发布时间】:2016-01-28 22:40:10
【问题描述】:
当我从一个具有标识、主键和排序键的表中选择另一个具有自己的一组标识、主键和排序的表时,我最初遇到了这个问题。它不尊重定义的 (1,1) 身份,而是执行 (1,8)(有时是 3,8)。我认为这可能是因为原始表已排序?为了弄清楚发生了什么,我做了一个更简单的查询和数据,并在多个红移集群中找到了一个可重现的示例。以这个测试为例:
drop table if exists test;
create temp table test (id int identity(1,1) not null
, value varchar(16)
, primary key (id))
diststyle all
sortkey (id);
insert into test (value) select 'a';
insert into test (value) select 'b';
insert into test (value) select 'c' union select 'd';
insert into test (value) values ('e'), ('f'), ('g');
select * from test;
我得到的输出是:
id value
1 a
2 b
9 c
10 d
3 e
4 f
5 g
您会注意到标识列未正确递增。我有其他集群的朋友试试这个,他们得到了 20、27 和 65、60 用于 c 和 d 列,而其他列是按顺序排列的。请注意,尽管 id 列在物理上并没有按顺序排列,但输出仍然按输入的排序键/顺序正确“排序”。
我第一次发现这个和测试查询时得到的奇怪的原始结果之间唯一的相似之处是联合是排序的,我的表上有一个排序键。
欢迎提出关于为什么会发生这种情况以及如何解决它的其他想法。
【问题讨论】: