Snowflake의 증분 전송 설정

이 가이드에서는 Snowflake에서 BigQuery로 증분 데이터 전송을 구성하는 방법을 보여줍니다. 증분 전송을 사용하면 마지막 전송 실행 이후 변경된 데이터만 전송할 수 있으므로 전송 시간과 비용을 줄일 수 있습니다.

제한사항

증분 Snowflake 전송에는 다음과 같은 제한사항이 적용됩니다.

  • 삽입/업데이트(upsert) 쓰기 모드를 사용하려면 기본 키 열을 제공해야 합니다. 자세한 내용은 증분 전송의 기본 키 정의를 참조하세요.
  • 기본 키는 소스 테이블에서 고유해야 합니다. 중복이 있는 경우 BigQuery의 병합 작업 결과가 일관되지 않고 소스 데이터와 일치하지 않을 수 있습니다.
  • 증분 전송을 통한 스키마 변경의 자동 처리는 지원되지 않습니다. 소스 테이블의 스키마가 변경되면 BigQuery 테이블 스키마를 수동으로 업데이트해야 합니다.
  • 증분 전송은 소스 데이터의 변경사항이 적은 수의 파티션 내에 집중되어 있을 때 가장 잘 작동합니다. 업데이트가 소스 테이블에 분산되어 있으면 증분 전송 성능이 크게 저하될 수 있습니다. 이렇게 하면 많은 파티션을 검색해야 하기 때문입니다. 데이터 전송 간에 변경되는 행이 많은 경우 전체 전송을 사용하는 것이 좋습니다.
  • CREATE OR REPLACE TABLE 또는 CLONE과 같은 Snowflake의 일부 작업은 원래 테이블 객체와 연결된 변경사항 추적 기록을 덮어쓸 수 있습니다. 이렇게 하면 기존 데이터 전송이 오래되어 증분 전송을 재개하려면 새로운 전체 동기화가 필요합니다.
  • 증분 전송은 변경사항 추적을 위한 Snowflake의 데이터 보관 기간 내에 유지될 수 있도록 충분히 자주 실행해야 합니다. 마지막으로 성공한 전송이 이 기간 외에 실행되면 다음 전송은 전체 전송이 됩니다.

데이터 수집 동작

Snowflake 전송을 설정할 때 전송 구성에서 전체 또는 증분 쓰기 환경설정을 선택하여 데이터가 BigQuery에 로드되는 방법을 지정할 수 있습니다.

각 데이터 전송에서 Snowflake 데이터 세트의 모든 데이터를 전송하도록 전체 데이터 전송을 구성할 수 있습니다.

또는 각 데이터 전송에서 전체 데이터 세트를 로드하는 대신 마지막 데이터 전송 이후 변경된 데이터만 전송하도록 증분 데이터 전송 (미리 보기)을 구성할 수 있습니다. 데이터 전송에 증분 을 선택하는 경우 증분 데이터 전송 중에 BigQuery에 데이터가 기록되는 방법을 정의하려면 추가 또는 삽입/업데이트(upsert) 쓰기 모드를 지정해야 합니다. 다음 섹션에서는 사용 가능한 쓰기 모드를 설명합니다.

추가 쓰기 모드

추가 쓰기 모드는 대상 테이블에 새 행만 삽입합니다. 이 옵션은 기존 레코드를 확인하지 않고 전송된 데이터를 엄격하게 추가하므로 이 모드는 대상 테이블에서 데이터 중복을 일으킬 수 있습니다.

추가 모드를 선택할 때는 워터마크 열을 선택해야 합니다. Snowflake 커넥터가 소스 테이블의 변경사항을 추적하려면 워터마크 열이 필요합니다.

Snowflake 전송의 경우 레코드가 생성될 때만 업데이트되고 후속 업데이트로 변경되지 않는 열을 선택하는 것이 좋습니다. 예를 들어 CREATED_AT 열입니다.

삽입/업데이트(upsert) 쓰기 모드

삽입/업데이트(upsert) 쓰기 모드는 기본 키를 확인하여 대상 테이블에서 행을 업데이트하거나 새 행을 삽입합니다. 기본 키를 지정하여 Snowflake 커넥터가 대상 테이블을 소스 테이블과 최신 상태로 유지하는 데 필요한 변경사항을 결정하도록 할 수 있습니다. 데이터 전송 중에 지정된 기본 키가 대상 BigQuery 테이블에 있으면 Snowflake 커넥터가 소스 테이블의 새 데이터로 해당 행을 업데이트합니다. 데이터 전송 중에 기본 키가 없으면 Snowflake 커넥터가 새 행을 삽입합니다.

삽입/업데이트(upsert) 모드를 선택할 때는 워터마크 열과 기본 키를 선택해야 합니다.

  • Snowflake 커넥터가 소스 테이블의 변경사항을 추적하려면 워터마크 열이 필요합니다.
    • 행이 수정될 때마다 업데이트되는 워터마크 열을 선택합니다. UPDATED_AT 또는 LAST_MODIFIED 열과 유사한 열을 사용하는 것이 좋습니다.
  • 기본 키는 Snowflake 커넥터가 행을 삽입하거나 업데이트해야 하는지 결정하는 데 필요한 테이블의 열 하나 이상일 수 있습니다.

    테이블의 모든 행에서 고유한 null이 아닌 값이 포함된 열을 선택합니다. 시스템 생성 식별자, 고유 참조 코드 (예: 자동 증가 ID) 또는 변경 불가능한 시간 기반 시퀀스 ID가 포함된 열을 사용하는 것이 좋습니다.

    데이터 손실 또는 데이터 손상을 방지하려면 선택한 기본 키 열에 고유한 값이 있어야 합니다. 선택한 기본 키 열의 고유성이 확실하지 않은 경우 추가 쓰기 모드를 사용하는 것이 좋습니다.

증분 데이터 전송에 삽입/업데이트(upsert) 쓰기 모드를 사용하려면 커스텀 스키마 파일에서 기본 키를 정의해야 합니다.

증분 수집 동작

데이터 소스의 테이블 스키마를 변경하면 이러한 테이블의 증분 데이터 전송이 다음과 같은 방식으로 BigQuery에 반영됩니다.

데이터 소스 변경사항 증분 수집 동작
새 열 추가 대상 BigQuery 테이블에 새 열이 추가됩니다. 이 열의 이전 레코드에는 null 값이 있습니다.
열 삭제 삭제된 열은 대상 BigQuery 테이블에 남아 있습니다. 삭제된 이 열의 새 항목은 null 값으로 채워집니다.
열의 데이터 유형 변경 커넥터는 데이터 유형 변환만 지원합니다.ALTER COLUMN 다른 데이터 유형 변환을 하면 데이터 전송이 실패합니다.

문제가 발생하면 새 전송 구성을 만드는 것이 좋습니다.

열 이름 변경 원래 열은 대상 BigQuery 테이블에 그대로 유지되고 업데이트된 이름으로 새 열이 대상 테이블에 추가됩니다.

증분 전송을 위한 커스텀 스키마 파일

커스텀 스키마 파일을 사용하여 증분 전송의 기본 키를 정의하고 스키마 매핑을 맞춤설정할 수 있습니다. 커스텀 스키마 파일은 소스 및 대상 스키마를 설명하는 JSON 파일입니다.

삽입/업데이트(upsert) 모드의 증분 전송의 경우 하나 이상의 열을 기본 키로 식별해야 합니다. 이렇게 하려면 커스텀 스키마 파일에서 PRIMARY_KEY 사용 유형으로 열에 주석을 추가합니다.

다음 예시는 orders 테이블의 기본 키로 O_ORDERKEYO_ORDERDATE를 정의하는 커스텀 스키마 파일을 보여줍니다.


{
  "databases": [
    {
      "name": "my_db",
      "originalName": "my_db",
      "tables": [
        {
          "name": "orders",
          "originalName": "orders",
          "columns": [
            {
              "name": "O_ORDERKEY",
              "originalName": "O_ORDERKEY",
              "usageType": [
                "PRIMARY_KEY"
              ]
            },
            {
              "name": "O_ORDERDATE",
              "originalName": "O_ORDERDATE",
              "usageType": [
                "PRIMARY_KEY"
              ]
            }
          ]
        }
      ]
    }
  ]
}

변경사항 추적 사용 설정

증분 Snowflake 전송을 설정하려면 먼저 다음 명령어를 사용하여 각 소스 테이블에서 변경사항 추적을 사용 설정해야 합니다.

ALTER TABLE DATABASE_NAME.SCHEMA_NAME.TABLE_NAME SET CHANGE_TRACKING = TRUE;

테이블에 변경사항 추적이 사용 설정되어 있지 않으면 Snowflake 커넥터는 해당 테이블의 전체 데이터 전송을 기본값으로 사용합니다.

다음 단계

증분 Snowflake 전송에 필요한 모든 단계를 구성한 후 Snowflake 전송 구성에 증분 전송을 사용 설정할 수 있습니다. 자세한 내용은 Snowflake 전송 설정을 참조하세요.