2017-02-17 11 views
1

큰 테이블이있어서 Teradata에서 행 번호를 추가해야합니다. 나는 이미 row_num이라고 불리는 테이블에 컬럼을 가지고 있지만 실제 숫자로 업데이트해야합니다. 아래 코드를 사용하려고했지만 작동하지 않습니다.행 번호가있는 열 업데이트

update database.time 
set row_num = INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY 
(START WITH 1 
INCREMENT BY 1 
MINVALUE 1 
NO CYCLE)) 

어떤 도움을 주시면 감사하겠습니다. 감사!! 당신이 각 행을 고유하게 식별하는 ID 열이있는 경우

+0

*? – dnoeth

+0

테이블이 ~ 4b 레코드입니다. – Kristen

+0

왜 테이블에 시퀀스 번호를 지정 하시겠습니까? – dnoeth

답변

0

, 당신은 할 수 있습니다 :

는 * 큰 테이블 얼마나 큰
update t 
    set t.row_num = tt.seqnum 
    from database.time t, 
     (select t.*, row_number() over (order by id) as seqnum 
      from database.time t 
     ) tt 
    where t.id = tt.id; 
+0

이것은 Teradata 구문 –

0
update t 

from mytable t 
     ,(select  t.* 
        ,cast(row_number() over (order by id) as bigint) as rn 

     from  mytable t 
     ) tt 

set  row_num = tt.rn 

where t.id = tt.id 
; 
+0

P.s. - @dnoeth는 큰 테이블의 경우 UPDATE 대신 CTAS를 사용할 것을 제안합니다. 이는 완전히 옳습니다. –

+0

그리고 Kristen이 쿼리를 실행하면 ROW_NUMBER가 기본적으로 Int를 반환하기 때문에 Numeric Overflow가 발생하여 실패합니다. 그러나 이것도 원래의 업데이트에서 발생합니다 :-) – dnoeth

+0

@dnoeth - 버전 및 구성에 따라 달라집니다 :-) 그냥 안전한쪽으로 가야합니다 - 답변에 CAST를 추가했습니다 –