2017-02-02 2 views
1

약 500cr 행을 가진 테이블에 ID 열을 추가하고 증분 값으로 업데이트해야합니다. 가장 좋은 방법은 무엇인지 제안하십시오. 쿼리를 실행하여 값을 업데이트하고 새 테이블에 저장하려고했지만 시간 제한이 6 시간 후에 쿼리가 실패했습니다. 도와주세요.새 ID 열 추가 및 기존 테이블에 증분 값 채우기

+0

가장 좋은 방법으로 추가 결합 할 수 있습니다하려는 경우 기본/외래 키로 사용하거나 할 수 partition_field + incremental number은 아니다 왜냐하면 대부분의 경우 이것은 당신이 당신의 논리에 의존하여 당신의 쿼리에서 당신이 파리에서 도출 할 수있는 중간 필드 일 뿐이 기 때문입니다. 유스 케이스를 설명 할 수 있다면 귀하를 도울 수 있습니다. 어쨌든 - 문제가있는 코드의 [Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve)을 보여주기 위해 질문을 편집 하시길 권한다. 특정 문제를 해결하려고 노력하십시오. [How to Ask] (http://stackoverflow.com/help/how-to-ask)도 읽을 수 있습니다. –

+0

ID 열의 역할을 수행해야합니다. 따라서 새 열의 증분 값을 업데이트 할 수있게되면이 열의 증분 값을 포함하여 매일 약 백만 개의 행을 푸시합니다. 또한 우리는 everyrow 열을 별도의 테이블에있는 여러 행으로 처리 할 것이고이 새로운 열은 다른 테이블에 대한 외래 키 역할을 할 것입니다. – rachit

+0

Google BigQuery는 정규화 규칙을 따라야하는 정규 관계형 데이터베이스가 아닙니다. BigQuery에서는 데이터의 정규화를 방지하는 것이 좋습니다. 거래 성격의 외래 키가 없습니다! 하나의 행에 전체 트랜잭션. –

답변

3

row_number() over()은 매우 비쌉니다.
row_number() over(partition by some_field)을 사용해 파티션간에 번호를 재분배 해보십시오.
여기서 테이블의 합리적인 수의 고유 한 값을 가진 파티션 필드를 선택해야합니다. 1K 정도라고합시다. 이 "첫 라운드 '후
- 당신이 복합 키가됩니다 : 당신은 당신이 다음 두 키를 한

+0

이 작업을 수행하면 매일이 업데이트 쿼리를 실행해야합니다. 또한 테이블에 파티션이 없습니다. 또한 요구 사항에 따라 화합물이 아닌 식별 열로만 증분 값을 지정해야합니다. 우리는 요구 사항을 변경할 수 없습니다. 나는 그들에게 이것을 제안 할 수 있고, 그들이 내가 어떻게 든 그것을 할 길을 찾을 필요가 있다는 것에 동의 하는지를 알 수있다. – rachit

+0

도움 주셔서 감사합니다. – rachit

+0

을 염두에 두십시오 - 복합 키가있는 첫 번째 "단계"는 row_number() over()의 비용을 처리하는 것입니다. 이것이 w/o 문제를 통해 얻을 것이라면 - 다음 단계에서 - 이것을 하나의 키로 결합 할 수 있습니다 - 이것은 상대적으로 간단한 다른 쿼리 일 수 있습니다! 하지만 귀하의 질문에 언급 한대로 - 이것은 단 한 번의 행동 일뿐입니다 - 앞으로 귀하는 귀하의 애플리케이션 측에서이 번호를 "생성"해야합니다 - bigquery에는 자동 번호 매기기 등의 기능이 없습니다. –

관련 문제