2012-09-10 3 views
7

매일 BigQuery 테이블에 증분 데이터를 추가 할 계획입니다. 증분 데이터를 기존 테이블에 추가 할 때마다 테이블의 기존 데이터에서 중복 된 레코드 (기본 키 열 기반)를 제거하려고합니다. SELECT all_cols from table where pkey_col NOT IN (INCR_KEYS) - - 새로운 테이블에 결과를 저장 BigQuery 테이블에서 중복 레코드 제거

  • 가의 라인에 대한 쿼리를 실행합니다 (INCR_KEYS를 호출 할 수 있습니다)
    1. 이 증분 데이터에서 키 세트를 수집 - 한 가지 방법은하는 것입니다.
    2. 새 테이블에 증분 데이터를 추가하십시오.

    이 접근법에 대한 나의 관심은 큰 테이블의 복사본을 만들어 내 청구서에 추가한다는 것입니다.

    중복 테이블을 만들지 않고도 같은 결과를 얻을 수있는 더 좋은 방법이 있습니까?

  • +0

    테이블이 얼마나 큰을? 압축 된 64MB보다 크면 # 2가 실패합니다. –

    +0

    @RyanBoyd - 문제가되지 않아야합니다. INCR_KEYS> 64MB 인 경우, INCR_KEYS를 더 작은 청크로 분할하여 반복 할 수 있습니다. <2> – user1659408

    +0

    전체 테이블 (예 : INCR_KEYS에없는 데이터)이 64MB보다 큰 경우 문제가 발생합니다. # 2의 SELECT 쿼리는 성공하지 못합니다. –

    답변

    4

    중복 테이블을 만들지 않고이 작업을 수행하는 방법을 알지 못합니다. 실제로 이것은 상당히 영리한 솔루션처럼 들립니다.

    그러나 증분 비용은 매우 적습니다. BigQuery는 존재하는 기간 동안 데이터에 대해서만 요금을 청구합니다. 이전 테이블을 삭제하면 초 또는 분 동안 두 테이블에 대해서만 비용을 지불하면됩니다.

    +0

    고마워요 @ 요르단, 나는 그걸로 살 수 있습니다! 누군가가 중복 테이블을 포함하지 않고도 해결책을 제시 할 수 있다면 여전히 좋습니다. – user1659408

    1

    당신은 기존 테이블로 설정 대상 테이블에 쿼리를 실행하고 잘라내 쓰기 처분을 설정할 수 있습니다 :이 일 것으로 예상

    bq query --allow_large_results --replace --destination_table=mydataset.mytable \ 
        'SELECT * FROM mydataset.mytable 
        WHERE key NOT IN (SELECT key FROM mydataset.update)' 
    bq cp --append_table mydataset.update mydataset.mytable 
    

    을하지만 난 그게 특히, 백업을 복용 가치가있다 생각 곧 삭제할 수 있습니다.

    bq cp mydataset.mytable mydataset.backup 
    # You can also build the new table in one pass: 
    bq query --allow_large_results --replace --destination_table=mydataset.mytable \ 
        'SELECT * FROM (
         SELECT * FROM mydataset.mytable 
         WHERE key NOT IN (SELECT key FROM mydataset.update) 
        ), (
         SELECT * FROM mydataset.update 
        )' 
    bq rm mydataset.backup 
    
    +0

    정확하게 작동하고 어떻게 mydataset.update를 채우고 있습니까? –

    0

    당신은 새로운 대상 테이블을 설정하고 단지 모든 열에 의한 수와 그룹을 조회 할 수 있습니다

    SELECT 
        FIELD1, 
        FIELD2, 
        FIELD3, 
        FIELD4 
    FROM (
        SELECT 
        COUNT (*), 
        FIELD1, 
        FIELD2, 
        FIELD3, 
        FIELD4 
        FROM 
        [<TABLE>] 
        GROUP BY 
        FIELD1, 
        FIELD2, 
        FIELD3, 
        FIELD4) 
    
    관련 문제