2017-10-31 4 views
0

레거시 Redshift 데이터베이스에서 작업하면서 자동 증가 열의 기본 ID 값에 대해 익숙하지 않은 패턴을 발견했습니다. 예 :Redshift 내부 "ID"기능의 서명

create table sometable (row_id bigint default "identity"(24078855, 0, '1,1'::text), ... 

놀랍게도 해당 ID 기능에 대한 문서를 찾을 수 없습니다. 그래서 내부 될 그 기능을 발견했습니다

select * from pg_proc proc 
join pg_language lang on proc.prolang = lang.oid 
where proc.proname = 'identity'; 

, 그리고 prosrc 열 (googleable하지 불행하게도) 단지 ff_identity_int64입니다입니다 : 내가 발굴 할 수 있었던 유일한 것은 다음과 같다.

누가 첫 번째 및 두 번째 인수에 대한 정보를 제게 제공해 주시겠습니까? 그 예인 "identity"(24078855, 0, '1,1'::text)에서 24078855와 0을 의미합니다. ('1,1':: text - 여기에서 처음에는 1이 시작 값이고 두 번째 1은 증가 단계입니다. 그러나 24078855와 0은 여전히 ​​나를 위해 신비한 것입니다.

+0

무언가가 최대 값과 최소값 (시드)이라는 것을 알려주는 것이 무엇입니까? – AlexYes

+0

@AlexYes 나는 "identity"(5, 0, '1,2':: text)'를 사용하여 실험을했다. 테이블에 행을 추가하고이를 삭제하고 다시 추가하는 동안 계정에서 5를 사용할 수 없었습니다. '1,2':: text 만 고려하여 자동 증가가 계속 증가하는 것처럼 보입니다. –

답변

0

신원 절 여기 CREATE TABLE의 문서에 설명되어 열 ID 열임을 지정 http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html#identity-clause

IDENTITY (시드 공정)

조. IDENTITY 열은 고유 한 자동 생성 값을 포함합니다. IDENTITY 열에 대한 데이터 유형은 INT 또는 BIGINT 여야합니다. INSERT 문을 사용하여 행을 추가하면이 값은 seed로 지정된 값으로 시작하고 step으로 지정된 수만큼 증가합니다. COPY 문을 사용하여 테이블을로드하면 IDENTITY 열이 유용하지 않을 수 있습니다. COPY 작업을 통해 데이터는 병렬로로드되어 노드 조각에 분산됩니다. 아이덴티티 값이 고유한지 확인하기 위해 Amazon Redshift는 아이디 값을 생성 할 때 여러 값을 건너 뜁니다. 결과적으로 ID 값은 고유하고 순차적이지만 연속적이지는 않으며 순서는 소스 파일의 순서와 일치하지 않을 수 있습니다.

+0

불행히도, 이것은 내 질문을 해결하지 못합니다. –