이 페이지에서

For AI agents: a documentation index is available at /docs/llms.txt. Append .md to any page URL for markdown, or send Accept: text/markdown.

Snowflake 데이터 가져오기

Amplitude의 Snowflake 연동을 사용하면 Snowflake 데이터를 Amplitude 프로젝트에 직접 수집할 수 있습니다. 이 연동은 선택한 데이터 유형에 따라 Snowflake 데이터를 가져오기 위한 네 가지 전략을 지원합니다.

Amplitude 지역 IP 주소

회사의 네트워크 정책에 따라 Amplitude의 서버가 귀하의 Snowflake 인스턴스에 액세스할 수 있도록 허용 목록에 다음 IP 주소를 추가해야 할 수도 있습니다.

제한

  • 단일 Snowflake SQL 쿼리의 최대 실행 시간은 12시간입니다. Snowflake 웨어하우스에 더 많은 컴퓨팅 리소스를 할당함으로써 쿼리 성능을 최적화하고 런타임을 줄일 수 있습니다(예: 웨어하우스 크기를 늘림).

사용자 및 그룹 속성 동기화

Amplitude의 데이터 웨어하우스 가져오기는 때때로 이벤트를 병렬로 처리하므로 이벤트를 Identify 및 Group Identify API에 직접 제출하는 것과 같은 방식으로 이벤트에 대한 사용자 및 그룹 속성의 시간 순서별 동기화가 보장되지 않습니다.

오래 실행되는 쿼리

가져오기 쿼리가 취소되지 않도록 하기 위해 Amplitude는 세션 수준에서 설정됩니다.ABORT_DETACHED_QUERY = FALSE

기존 Snowflake 자격 증명 재사용

새로운 Snowflake 가져오기 또는 내보내기를 생성할 때 Amplitude를 사용하면 이전에 불러오기 자격 증명을 다시 입력하지 않고 조직에서 선택할 수 있습니다. 재사용 가능한 자격 증명에는 다른 가져오기, 내보내기로부터의 연결 및 다른 프로젝트에서 이루어진 연결(권한이 있는 경우)이 포함됩니다.

공유 자격 증명은 함께 업데이트됩니다.

Credentials는 기본 수준에서 공유됩니다. 한 연결에서 비밀번호나 키 쌍을 업데이트하면 Amplitude는 해당 자격 증명을 공유하는 모든 연결을 업데이트합니다. 변경하기 전에 어떤 연결이 자격 증명을 사용하는지 검토하십시오.

기존 자격 증명을 재사용하려면 새 연결을 만들 때 자격 증명 입력 단계에서 기존 자격 증명 사용을 선택합니다. Amplitude는 조직에서 불러오기된 모든 자격 증명을 나열합니다. 다른 프로젝트의 자격 증명을 재사용하려면 두 프로젝트 모두에서 데이터 웨어하우스 연결을 생성할 수 있는 권한이 필요합니다.

연동 설정

다음 단계를 완료하여 Snowflake 소스를 구성하십시오.

  1. 연결 설정 및 확인
  2. 데이터 선택
  3. 가져오기 전략 선택
  4. 데이터 매핑
  5. 동기화 예약

연결 설정 및 확인

Snowflake를 Amplitude 프로젝트의 데이터 소스로 추가하려면 다음 단계를 따르십시오.

  1. Amplitude 데이터에서 _카탈로그 → 소스_로 이동합니다.

  2. 웨어하우스 소스 섹션에서 _Snowflake_를 클릭합니다.

  3. 연결하려는 Snowflake 인스턴스에 필요한 자격 증명을 입력하십시오.

    • 계정: Snowflake 계정 식별자입니다. 대소문자를 구분합니다. 이 부분은 Snowflake URL의 첫 번째 부분으로, snowflakecomputing.com. 이전의 내용입니다. 계정 이름에 ".snowflakecomputing.com"을 포함하지 마십시오.
    • 데이터베이스: Amplitude가 데이터를 찾을 수 있는 데이터베이스의 이름입니다.
    • 웨어하우스: Amplitude가 SQL을 실행하기 위해 사용합니다.
    • 사용자 이름: Amplitude에서 인증을 위해 사용합니다.
    • 암호: Amplitude에서 인증을 위해 사용합니다.

    Amplitude는 Snowflake에 대한 암호 기반 및 키 쌍 인증을 제공합니다.

Snowflake 암호 인증 사용 중지

2026년 5월부터 Snowflake는 단일 요소 암호 인증에 대한 지원을 중단합니다. 이는 Snowflake에서 Amplitude로 데이터를 전송하는 방식에 영향을 미칩니다. Amplitude는 보안 강화와 향후 Snowflake와의 호환성을 위해 키 쌍 인증으로 마이그레이션할 것을 권장합니다. 자세한 마이그레이션 지침은 Snowflake 암호 인증 사용 중지 FAQ를 참조하십시오.

- If you want to use password authentication, select Password and enter your password in the Password field. - Key pair authentication (Recommended): If you want to use key pair authentication, select Key pair and then click Generate Key. Then provide the organization and account names in the format ORGNAME-ACCOUNTNAME.

  1. (선택 사항) Snowflake용 Stage와의 S3 스토리지 연동 구성**(오픈 베타)**: Stage와의 스토리지 연동을 설정하여 Amplitude가 Snowflake 데이터에 액세스할 때 추가적인 보안 계층을 제공할 수 있습니다. 자세한 내용은 Snowflake의 Snowflake 스토리지 연동 문서를 참조하십시오.

  2. 자동 생성된 SQL 쿼리를 복사하여 Snowflake에서 실행하여 Amplitude에 적절한 권한 관리를 부여하십시오.

  3. 쿼리를 실행한 후 _다음_을 클릭하여 연결을 테스트합니다.

  4. 테스트가 성공한 후 _다음_을 다시 클릭하여 데이터 선택 단계로 넘어갑니다.

데이터 형식 선택

선택한 데이터 유형에 따라 구성에 사용할 수 있는 전략과 설정이 정의됩니다.

가져오기 전략 선택

선택한 데이터 유형에 따라 다음 전략 중에서 선택하십시오.

어떤 데이터 유형이 어떤 가져오기 전략과 호환되는지 이해하려면 다음 표를 참조하십시오.

변경 데이터 캡처 옵션

의 경우 Event데이터 유형의 동기화 전략은 CDC 피드 유형의 구성을 지원합니다.

웨어하우스에서 수집하려면 _추가 전용 동기화_를 선택하고 ID 확인, 속성 및 기여 동기화, 위치 확인과 같은 Amplitude의 보강 서비스를 포함하십시오.

_미러 동기화_를 선택하여 insert, update및 delete 작업을 지원하는 Snowflake 데이터를 미러링하십시오. 이 옵션은 Amplitude의 보강 서비스를 비활성화하여 사용자가 단일 진실 공급원(Source of Truth)과 동기화된 상태를 유지할 수 있도록 합니다.

_미러 동기화_는 데이터 가변성 설정도 지원합니다. 활성화할 옵션을 선택하십시오. update 또는 delete. insert 작업은 항상 활성화되어 있습니다.

데이터 매핑

선택한 가져오기 전략에 따라 데이터를 변환하기 위해 SQL 문으로 데이터를 매핑하거나(타임스탬프, 전체 동기화), 데이터 선택 도구를 사용하여 열 이름을 Amplitude 속성에 직접 매핑하십시오.

Event데이터 유형 및 추가 전용 또는 타임스탬프 수집의 경우, 선택적으로 사용자 속성 동기화 또는 _그룹 속성 동기화_를 선택하여 이벤트 내의 해당 속성을 동기화할 수 있습니다.

동기화 예약

소스의 이름을 입력하고 동기화 빈도를 구성합니다. 데이터 동기화를 5분 간격에서 매월 간격으로 예약할 수 있습니다. 매일 데이터 동기화는 하루 중 특정 시간에 실행될 수 있습니다. 주간 및 월간 데이터 동기화는 특정 요일과 시간에 실행될 수 있습니다.

사용 사례에 가장 적합한 연동 옵션 선택

연동 전략을 선택할 때는 다음 사항을 고려하십시오.

  • 전체 동기화: 전체 데이터 세트를 정기적으로 수집해야 하지만 변경된 행을 추적할 수 없는 경우 이 옵션을 선택합니다. 이 방법은 점진적 추적이 불가능한 소규모 데이터 세트에 가장 적합합니다. 이 방법은 매번 모든 데이터를 수집하는 데 필요한 오버헤드로 인해 대규모 데이터 세트에는 적합하지 않습니다.

  • 타임스탬프 가져오기: Snowflake가 레코드를 로드할 때의 상태를 나타내는 단조롭게 증가하는 타임스탬프 열을 사용하여 데이터를 증분적으로 가져올 수 있는 경우 이 옵션을 선택합니다. 이 방법은 효율적이며 타임스탬프와 함께 새 데이터를 추가할 때 잘 작동합니다.

  • 추가만 동기화: Amplitude의 보강 서비스를 계속 사용하는 동안 Snowflake의 CDC 기능에서 감지한 변경 사항을 기반으로 데이터를 가져오려면 이 옵션을 선택합니다. 이 방법은 CDC로부터의 읽기 INSERT 작업만 지원합니다.

  • 미러 동기화: 이 옵션을 선택하면 Snowflake의 CDC 기능에서 감지한 변경 사항을 기반으로 INSERT, UPDATE, 및 DELETE작업을 통해 Snowflake의 데이터를 직접 미러링할 수 있습니다. 이 방법은 Enrichment 서비스를 비활성화하여 Snowflake 데이터의 미러를 Amplitude에 유지합니다. UPDATE그리고 DELETE작업은 Amplitude의 데이터를 변형시킵니다.

이 표를 사용하여 가져오기 전략을 한 눈에 비교하십시오.

CDC를 위한 전제 조건과 고려 사항

CDC 및 이벤트 볼륨

. CDC를 사용함으로써 Snowflake는 동기화 빈도에 따라 통합된 행INSERT,UPDATE 및 DELETE작업을 Amplitude로 전송합니다. 동기화 다음 기간동안 이벤트에 대해 수행된 여러 작업은 기존 이벤트 볼륨에 대해 하나의 이벤트로만 수행 회수가 됩니다. 그러나 동기화 기간 외부에서 이벤트에 대해 수행된 전체 작업은 기존 이벤트 볼륨에 대해 추가 이벤트로 간주됩니다. 이는 기존 이벤트 볼륨을 사용하는 속도에 영향을 줄 수 있습니다. 필요한 경우 영업팀에 문의하여 이벤트 볼륨을 추가로 구매하십시오.

미러 동기화를 사용할 때는 다음 사항에 유의하십시오.

  • 변경 내용 추적 사용: 소스 테이블 또는 뷰에 대한 변경 내용 추적을 사용하도록 설정합니다. Snowflake 문서의 뷰 및 기본 테이블에 대한 변경 내용 추적 활성화를 참조하십시오.

  • 데이터 리텐션 설정: DATA_RETENTION_TIME_IN_DAYS1보다 크거나 같아야 하지만 Amplitude는 최소 7일을 권장합니다. 그렇지 않으면 변경 기반 가져오기가 실패합니다. 자세한 내용은 Snowflake의 문서에서 시간 여행을 참조하십시오. DATA_RETENTION_TIME_IN_DAYS설정을 변경하면 변경 내용 추적이 비활성화되고 연결을 복구할 수 없게 0됩니다. 이 문제가 발생하면 소스를 다시 생성하십시오.

  • 변경 내용 추적 사용 안 함: Snowflake에서 변경 내용 추적을 사용 안 함으로 설정하거나, 설정된 값보다 더 오랜 기간 동안 Amplitude 소스의 연결을 DATA_RETENTION_TIME_IN_DAYS끊으면 Amplitude는 과거 변경 내용을 추적하는 기능을 잃게 됩니다. 이 경우 연결을 다시 생성하십시오. 이벤트 중복을 방지하려면 모든 이벤트에 insert_id 값이 설정되어 있는지 확인하고 7일 이내에 연결을 다시 생성하십시오.

  • 고유성 및 불변성insert_id: 예기치 않은 문제가 발생할 경우 데이터 중복을 방지하기 위해 가져올 데이터의 각 행에 고유하고 불변하는 insert_id 값이 있는지 확인하십시오. Amplitude 중복 제거 및 insert_id에 대한 자세한 내용은 이벤트 중복 제거를 참조하십시오.

  • 복잡한 SQL 문: 데이터 소스가 복잡한 SQL SELECT 문(예: 절 포함)으로 표현되는 경우, 변경 기반 가져오기 전략과 함께 사용할 수 있도록 데이터 소스를 래핑하는 JOIN를 Snowflake 계정에 생성하십시오VIEW. Snowflake에서 뷰와 함께 CDC를 사용할 때 고려해야 할 사항은 뷰에서의 스트림을 참조하십시오.

  • JOIN이 있는 뷰: Snowflake CDC는 효율적이지만 JOIN이 포함된 뷰를 사용하면 성능에 영향을 줄 수 있습니다. 대신 조인된 데이터를 사용자 프로필로 동기화하는 것을 고려해 보십시오.

  • 테이블 삭제 및 재생성 방지: 이 시나리오에서 Snowflake CDC는 변경 사항을 캡처하지 않으므로 동일한 이름의 테이블을 삭제한 후 다시 생성하지 마십시오. 테이블 교체를 방지하려면 dbt와 같은 도구와 함께 증분 모델을 사용하십시오.

  • 스키마 변경 처리: CDC는 CDC 추적 테이블 또는 뷰에 기본값을 사용하여 새 열을 추가할 수 있도록 지원합니다. NULLAmplitude는 다른 종류의 스키마 변경을 권장하지 않습니다. Snowflake CDC는 DML 문의 변경 사항만 반영합니다. 데이터를 논리적으로 수정하는 DDL 문(예: 기본값을 사용하여 새 열 추가, 기존 열 삭제, 열 이름 변경)은 Amplitude로 전송되는 향후 데이터에 영향을 미치지만, Snowflake는 DDL 문으로 인한 변경 사항으로 기록 데이터를 업데이트하지 않습니다. 결과적으로 Amplitude는 과거 데이터에 대한 이러한 업데이트를 반영하지 않습니다.

  • Amplitude 보강 서비스 비활성화: 미러 동기화를 사용할 때 Amplitude는 ID 확인, 속성 및 어트리뷰션 동기화, 위치 정보 해결과 같은 보강 서비스를 비활성화하여 소스 데이터와 동기화된 상태를 유지합니다.

  • 사용자 개인 정보 보호 API: 사용자 개인 정보 보호 API는 이전에 수집된 데이터를 삭제하며 Amplitude가 사용자에 대한 새로운 정보를 처리하는 것을 방지하지 않습니다. CDC를 사용할 때는 사용자 개인 정보 보호 API를 사용하여 해당 데이터를 삭제하기 전에 사용자에 대한 데이터 전송을 중단해야 합니다. 이를 통해 Amplitude는 다음 동기화에서 사용자를 다시 생성하지 않습니다.

    Amplitude 시스템에서 최종 사용자와 관련된 모든 데이터를 삭제하려면 데이터 웨어하우스에서 사용자를 삭제하는 것만으로는 충분하지 않습니다. 이 프로세스를 수행하려면 사용자 개인 정보 보호 API 요청이 필요합니다. 이는 Amplitude가 사용자 데이터를 시스템에서 제거하도록 보장합니다.

  • 미러 동기화 이벤트 및 변형은 알 수 없는 사용자를 지원하지 않습니다. 행에는 사용자 ID가 포함되어야 합니다. 그렇지 않으면 Amplitude는 이벤트를 삭제합니다. 많은 양의 익명 이벤트가 발생하는 경우 Amplitude는 이 모드를 사용하지 않는 것을 권장합니다.

CDC(변경 데이터 캡처) 미러 동기화로 마이그레이션

Amplitude는 데이터 전송 및 변형을 테스트하기 위해 새 프로젝트를 만들 것을 권장합니다. 데이터가 올바르게 매핑되고 변형되었는지 확인한 후 기본 프로젝트에서 다음 단계를 완료하십시오.

  1. 기존 연결을 수정하여 WHERE time < {cutOffDate}와 같은 필터링 정의를 사용하십시오. 여기서 time는 이벤트 시간이고 cutOffDate는 에포크 이후 밀리초 단위의 내일입니다.
  2. 이전 단계에서 설정한 값이 될 때까지 cutOffDate기다립니다.
  3. 기존 소스 연결을 통해 새 데이터가 유입되지 않는지 확인하십시오.
  4. WHERE time >= {cutOffDate}와 같은 필터링 정의를 사용하여 새 소스를 생성합니다. 여기서 time 는 이벤트 시간이고 cutOffDate 는 에포크 이후 밀리초 단위의 내일입니다.
  5. 1단계에서 수정한 소스 연결을 삭제합니다.

데이터 필드

SQL 쿼리를 생성할 때 데이터 유형에 대한 필수 필드를 포함하십시오. 이 표에서는 각 데이터 유형에 대한 필수 필드와 선택적 필드를 간략하게 설명합니다. 이벤트에 대해 지원되는 기타 필드 목록은 HTTP V2 API 문서에서 확인하고 사용자 속성에 대해 지원되는 기타 필드 목록은 Identify API 문서에서 확인하십시오. 이러한 목록에 없는 전체 열을 event_properties또는 user_properties에 추가하십시오. 그렇지 않으면 Amplitude는 이를 무시합니다.

이벤트

지원되는 다른 필드는 HTTP V2 API 문서에서 확인하십시오.

사용자 속성

지원되는 다른 필드는 Identify API 문서에서 확인하십시오.

그룹 속성

group_properties의 각 그룹 속성은 groups의 모든 그룹에 적용됩니다.

그룹 속성을 사용하려면:

  • 그룹 속성을 설정합니다. 다음은 Snowflake 그룹 속성 가져오기에서 이를 수행하는 방법을 보여주는 예입니다.

    SQL
    SELECT OBJECT_CONSTRUCT('customerId', account_id)                      AS "groups",          -- must be JSON
          OBJECT_CONSTRUCT('companyName', name, 'customerType', type) AS "group_properties" -- must be JSON
    FROM "AMPLITUDE"."DWH"."ACCOUNTS"
    
  • 그룹 속성과 연관된 이벤트를 전송합니다. 사용자 ID 및 그룹이 존재하는 한 이러한 이벤트는 위치 표시자 이벤트일 수 있습니다. Snowflake 이벤트 가져오기에 다음을 지정하십시오.

    SQL
    "groups": {"customerId": <account_id>}
    

SQL 쿼리 예제

데이터 선택 단계를 더 쉽게 수행할 수 있도록 다음은 시작할 수 있는 몇 가지 예제 SQL 스니펫입니다.

이벤트 데이터 예제

sql
SELECT
    EVENT_TYPE_COLUMN AS "event_type",
    EVENT_PROPERTIES_VARIANT_COLUMN AS "event_properties",
    TIME_EPOCH_MS_COLUMN AS "time",
    USER_ID_COLUMN AS "user_id",
    USER_PROPERTIES_VARIANT_COLUMN AS "user_properties"
FROM DATABASE_NAME.SCHEMA_NAME.TABLE_OR_VIEW_NAME

사용자 속성 예

sql
SELECT
    USER_ID_COLUMN AS "user_id",
    USER_PROPERTIES_VARIANT_COLUMN AS "user_properties"
FROM DATABASE_NAME.SCHEMA_NAME.TABLE_OR_VIEW_NAME

그룹 속성 예

sql
SELECT
    GROUPS_OBJ AS "groups",
    GROUP_PROPS_OBJ AS "group_properties"
FROM DATABASE_NAME.SCHEMA_NAME.TABLE_OR_VIEW_NAME

일반적인 스니펫

JSON 객체 생성:

sql
OBJECT_CONSTRUCT('city', CITY, 'state', STATE) as "user_properties"

타임스탬프 열을 밀리초로 변환합니다.

sql
DATE_PART('EPOCH_MILLISECOND', TIMESTAMP_COLUMN) as "time"

밀리초를 시간 기반 가져오기에 필요한 TIMESTAMP_NTZ형식으로 변환합니다. 이 예제에서는 3로 설정된 scale인수를 사용하여 밀리초로 변환합니다. 자세한 내용은 Snowflake 문서를 참조하십시오.

sql
TO_TIMESTAMP_NTZ(TIME_COLUMN_IN_MILLIS, 3) as "update_time_column"

시간대가 있는 타임스탬프 열을 시간 기반 가져오기에 필요한 TIMESTAMP_NTZ형식으로 변환합니다.

sql
TO_TIMESTAMP_NTZ(CONVERT_TIMEZONE('UTC', TIMESTAMP_TZ_COLUMN)) as "update_time_column"

SQL 문제 해결

다음 섹션에서는 가져오기 커넥터를 구성하는 데 사용할 수 있는 예제 SQL 쿼리를 제공합니다.

필수 이벤트 속성

Amplitude의 데이터 웨어하우스 가져오기 커넥터에 대해 작성하는 Snowflake SQL 쿼리는 Amplitude의 이벤트 API 스키마와 일치하는 특정 열을 반환해야 합니다. 다음 예제를 사용하여 쿼리를 구조화하십시오.

SELECT
    event_type,             -- String: Name of the event
    user_id,                -- String: Unique identifier for the user
    EXTRACT(EPOCH_MILLISECOND FROM event_timestamp) as time  -- Timestamp in milliseconds
FROM your_events_table

속성을 포함한 기본 이벤트 쿼리

sql
SELECT
    event_name as event_type,
    user_id,
    EXTRACT(EPOCH_MILLISECOND FROM event_timestamp) as time,
    device_id,
    -- Construct event properties from multiple columns
    OBJECT_CONSTRUCT(
        'page_name', page_name,
        'button_id', button_id,
        'interaction_type', interaction_type,
        'duration_ms', duration_ms
    ) as event_properties,
    -- Construct user properties
    OBJECT_CONSTRUCT(
        'account_type', account_type,
        'subscription_tier', subscription_tier,
        'last_login', TO_VARCHAR(last_login_date)
    ) as user_properties,
    platform,
    app_version
FROM app_events
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_DATE())

Snowflake의 특징과 모범 사례

다음은 Snowflake의 특정 기능과 모범 사례의 예입니다.

JSON 사용법

sql
-- Combining multiple JSON objects
SELECT
    event_type,
    user_id,
    EXTRACT(EPOCH_MILLISECOND FROM event_timestamp) as time,
    OBJECT_CONSTRUCT(
        'base_properties', base_properties,  -- existing JSON column
        'additional_data', OBJECT_CONSTRUCT(
            'new_field1', value1,
            'new_field2', value2
        )
    ) as event_properties
FROM events
-- Parsing JSON fields
SELECT
    event_type,
    user_id,
    time,
    PARSE_JSON(raw_properties):field_name::string as extracted_value
FROM events

타임스탬프 처리

sql
-- Converting different timestamp formats
SELECT
    event_type,
    user_id,
    CASE
        WHEN TRY_TO_TIMESTAMP(timestamp_string) IS NOT NULL
            THEN EXTRACT(EPOCH_MILLISECOND FROM TRY_TO_TIMESTAMP(timestamp_string))
        WHEN TRY_TO_TIMESTAMP_NTZ(timestamp_string) IS NOT NULL
            THEN EXTRACT(EPOCH_MILLISECOND FROM TRY_TO_TIMESTAMP_NTZ(timestamp_string))
        ELSE NULL
    END as time
FROM events

데이터 검증 쿼리

sql
-- Validate required fields
SELECT COUNT(*)
FROM (
    YOUR_QUERY_HERE
) t
WHERE event_type IS NULL
    OR user_id IS NULL
    OR time IS NULL;
-- Validate JSON structure
SELECT COUNT(*)
FROM (
    YOUR_QUERY_HERE
) t
WHERE NOT (
    TRY_CAST(event_properties AS OBJECT) IS NOT NULL
    AND TRY_CAST(user_properties AS OBJECT) IS NOT NULL
);
-- Validate timestamp range
SELECT
    MIN(time) as min_time,
    MAX(time) as max_time,
    TIMEADD(millisecond, MIN(time), '1970-01-01'::timestamp) as min_readable_time,
    TIMEADD(millisecond, MAX(time), '1970-01-01'::timestamp) as max_readable_time
FROM (
    YOUR_QUERY_HERE
) t;

성능 최적화 팁

다음 예제를 사용하면 연동 성능을 최적화할 수 있습니다.

클러스터링 키 사용

소스 테이블에 적절한 클러스터링 키를 사용하십시오.

sql
ALTER TABLE your_events_table CLUSTER BY (event_timestamp, user_id);

구체화된 뷰 사용

복잡한 변환에 구체화된 뷰를 사용하십시오.

sql
CREATE MATERIALIZED VIEW amplitude_ready_events AS
SELECT
    -- Your transformed columns here
FROM source_events;

WHERE 절의 날짜 분할법

sql
WHERE event_timestamp >= DATEADD(day, -7, CURRENT_DATE())
  AND event_timestamp < CURRENT_DATE()

마이크로 파티션

sql
SELECT ...
FROM your_table
WHERE TO_DATE(event_timestamp) BETWEEN '2024-01-01' AND '2024-01-31'

문제 해결

  1. 오류: SQL compilation error: Invalid identifier INFORMATION_SCHEMA.QUERY_HISTORY_BY_SESSION. Results not generated.
  • 원인: 이 문제는 연동에 사용된 Snowflake 역할이 더 이상 지정된 Snowflake 데이터베이스의 INFORMATION_SCHEMA에 액세스할 수 있는 권한을 갖지 않을 때 발생합니다. Amplitude는 고객의 Snowflake 인스턴스에서 실행되는 쿼리의 상태를 확인하기 위해 이 스키마에 대한 액세스를 필요로 합니다.
  • 해결 방법: 연동에 사용되는 역할이 대상 Snowflake 데이터베이스의 INFORMATION_SCHEMA에 액세스할 수 있는 권한 관리를 갖고 있는지 확인하십시오. 이 문제는 적절한 액세스 권한을 유지하지 않고 역할이 최근에 변경되거나 업데이트된 경우 자주 발생합니다.
  1. 오류: JWT token is invalid.
  • 원인: 이 오류는 지정된 사용자에게 연결된 공개 키와 Amplitude가 키 쌍 인증을 위해 생성한 개인 키 대상 구간 불일치가 있을 때 나타납니다.
  • 해결 방법: 지정된 사용자에 대해 공개 키가 올바르게 설정되어 있는지 확인하고 계정을 형식으로 제공해야 합니다ORGNAME-ACCOUNTNAME. 계정의 끝에 계정 로케이터가 있는 경우 공개 키가 올바르게 설정되어 있더라도 키 쌍 인증이 성공하지 않을 수 있습니다. 계정 식별자를 올바른 형식으로 가져오려면 Snowflake 인스턴스에서 SELECT CURRENT_ORGANIZATION_NAME() || '-' || CURRENT_ACCOUNT_NAME();실행하십시오.

자주 묻는 질문

Snowflake 연동 관련 문제가 발생할 경우 아래 항목을 검토하십시오.

Snowflake 쿼리 시간이 초과되면 어떻게 됩니까?

Snowflake 쿼리 시간이 초과되면 Amplitude는 지수적 백오프 전략을 사용하여 자동으로 쿼리를 재시도합니다. 각 재시도 시도는 이전 시도보다 점점 더 오래 기다리므로 Snowflake는 요청을 성공적으로 처리할 수 있는 시간을 더 많이 갖습니다.

Amplitude는 실패한 쿼리를 몇 회나 재시도합니까?

Amplitude는 가져오기 작업을 실패한 것으로 표시하기 전에 최대 8회의 재시도를 시도합니다(초기 쿼리를 포함하여 총 9회의 시도). 각 재시도 시도는 새로 시작되므로 데이터를 검색하는 데 일관된 접근 방식을 유지할 수 있습니다.

ABORT_DETACHED_QUERY가 FALSE로 설정된 이유는 무엇입니까?

계정 수준에서ABORT_DETACHED_QUERY = FALSE 설정하면 Snowflake가 5분 이상 실행되는 가져오기 쿼리를 자동으로 취소하지 못하게 됩니다. 이 설정이 없으면:

  • Snowflake는 오랫동안 실행되는 쿼리를 알림 없이 취소합니다.
  • Amplitude는 이를 일시적인 실패로 간주하고 재시도합니다.
  • 이로 인해 이벤트가 중복되고 이벤트 수가 증가할 수 있습니다.

이 설정은 Amplitude의 재시도 메커니즘을 변경하지는 않지만, Snowflake의 자동 쿼리 취소로 인해 발생하는 불필요한 재시도를 방지합니다.

가져오기 다음 기간동안 데이터 중복을 방지하려면 어떻게 해야 합니까?

재시도 및 중복 가져오기 다음 기간동안 데이터가 중복되는 것을 방지하려면 다음을 수행하십시오.

  • 포함 insert_id: 이 고유 식별자를 사용하면 Amplitude가 중복 이벤트를 감지하고 무시할 수 있습니다.
  • 적절한 재시도 설정 지정: 불필요한 재시도를 방지하도록 구성합니다ABORT_DETACHED_QUERY = FALSE.

insert_id이 설정이 없으면 Amplitude는 모든 수신 이벤트를 새로운 이벤트로 취급하므로 데이터 중복, 이벤트 수 증가 및 분석 부정확성이 발생할 수 있습니다.

쿼리 시간 초과 다음 기간동안 전체 데이터 손실의 위험이 있습니까?

아니요, Amplitude 가져오기 작업이 시간 초과될 때 데이터 손실의 위험이 없습니다. 그 이유는 다음과 같습니다.

  • 읽기 전용 작업: Amplitude는 Snowflake 인스턴스에서 데이터만 읽습니다. 절대로 테이블을 수정하거나, 삭제하거나, 작성하지 않습니다.
  • 소스 데이터 보호: 시간 초과는 데이터 전송 다음 기간동안 발생하며, 소스 데이터에 영향을 줄 수 있는 전체 작업 다음 기간동안에는 발생하지 않습니다.
  • 자동 재시도: Amplitude는 실패한 가져오기를 최대 8회 자동으로 재시도하므로 데이터에 성공적으로 가져올 수 있는 여러 가지 기회를 제공합니다.

Snowflake 데이터는 가져오기 작업 결과에 관계없이 안전하게 유지되고 변경되지 않습니다.

이 내용이 도움이 되었나요?