當我從具有標識,主鍵和排序鍵的一個表中選擇具有自己的一組標識,主類,排序。 (1,1)身份不如它所定義的那樣,而是(1,8)(有時是3,8)。我認爲這可能是因爲原始表格被排序?爲了弄清楚發生了什麼,我做了一個更簡單的查詢和數據,並找到了跨多個紅移羣集的可重複的例子。參與我們的測試例子:在插入到()(Amazon Redshift)時不尊重標識列
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
你會注意到標識列不正確遞增。我有其他團隊的朋友試試這個,他們爲c和d列獲得20,27和65,60,而其他列是有序的。請注意,儘管id列的物理順序不正確,但輸出仍按排序鍵/輸入順序正確排序。
當我第一次發現這個問題時,我能想到的奇怪的原始結果和測試查詢之間唯一的相似之處是工會被排序,我的表上有一個sortkey。
有關爲什麼會發生這種情況以及如何解決這個問題的其他想法是受歡迎的。