동적 테이블 오류 코드 참조

동적 테이블 오류 코드 참조

동적 테이블 갱신이 실패하면 Snowflake는 갱신 기록(refresh history)에 오류 코드와 메시지를 기록해요. 이 페이지를 사용해 오류를 찾아보고, 원인을 이해하고, 해결하세요.

📌 이 페이지는 동적 테이블 사용자가 자주 만나는 흔한 오류 코드를 나열해요. 완전한 목록은 아니에요. 여기에 없는 오류 코드를 만나면 state_message 컬럼에서 안내를 확인하세요.

실패한 갱신의 오류 코드를 찾으려면 다음을 실행하세요:

SELECT name, state, state_code, state_message, query_id
FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(
  NAME => 'mydb.myschema.dt_orders'
))
WHERE state = 'FAILED'
ORDER BY data_timestamp DESC
LIMIT 10;
+----------------------------+---------+------------+--------------------------------------------------+--------------------------------------+
| NAME                       | STATE   | STATE_CODE | STATE_MESSAGE                                    | QUERY_ID                             |
+----------------------------+---------+------------+--------------------------------------------------+--------------------------------------+
| MY_DATABASE...DT_ORDERS    | FAILED  | 091930     | Change tracking is not enabled or has been ...   | 01b23c4d-0501-a2b3-0000-00012345abcd |
+----------------------------+---------+------------+--------------------------------------------------+--------------------------------------+

state_code 컬럼에 숫자 오류 코드가 있어요. state_message 컬럼에 전체 오류 메시지가 담겨요. query_id를 사용해 쿼리 기록에서 실패한 문을 검사할 수 있어요.

아래에 나열된 메시지는 대표적인 예시예요. 실제 오류 메시지에는 객체 이름, 타임스탬프, 인시던트 ID 같은 추가 세부 정보가 포함될 수 있어요.

오류는 세 가지 범주로 나뉘어요:

  • **구성 오류(configuration errors)**는 예방 가능해요. 변경 추적, 웨어하우스, 권한 같은 누락된 사전 요구 사항 때문에 발생해요.
  • **운영 오류(operational errors)**는 복구 가능해요. Snowflake 지원 없이 고칠 수 있는 업스트림 변경, 타임아웃, 스키마 진화 때문에 발생해요.
  • **내부 오류(internal errors)**는 사용자가 조치할 수 없어요. Snowflake Support에 연락하고 갱신 기록의 query_id를 포함하세요.

📌 동적 테이블이 다섯 번 연속으로 갱신에 실패하면 Snowflake가 자동으로 일시 중단해요. 근본 원인을 고친 후 ALTER DYNAMIC TABLE <name> RESUME으로 동적 테이블을 재개하세요.

출처: Snowflake 문서

본문

구성 오류 (예방 가능)

이 오류들은 필수 설정, 객체, 권한이 누락됐다는 뜻이에요. 설정을 고쳐 오류를 해결하세요.

변경 추적이 활성화되어 있지 않음 (091930)

  • 메시지: Change tracking is not enabled or has been missing for the time range requested.
  • 원인: 동적 테이블이 참조하는 기본 테이블에 변경 추적이 활성화되어 있지 않거나, 변경 추적 기록이 손실됐어요.
  • 해결: ALTER TABLE ... SET CHANGE_TRACKING = TRUE로 영향을 받는 기본 테이블의 변경 추적을 활성화하세요. 오류가 계속되면 동적 테이블을 다시 만드세요. 단계별 진단은 동적 테이블 갱신 문제 해결 문서를 참조하세요.

갱신 목록에 중복된 동적 테이블 (002008)

  • 메시지: Duplicate Dynamic Table:
  • 원인: ALTER DYNAMIC TABLE ... REFRESH에 전달된 테이블 목록에 같은 동적 테이블이 두 번 이상 나타나요. 중복 감지는 테이블 정체성으로 매칭하므로, 같은 테이블로 해석되는 짧은 이름, 인용된 이름, 정규화된 이름은 모두 같은 테이블로 취급돼요.
  • 해결: 목록에서 중복 항목을 제거하세요. 각 이름이 서로 다른 동적 테이블로 해석되는지 확인하세요.

웨어하우스가 없음 (002725)

  • 메시지: Dynamic table could not be refreshed because warehouse is missing.
  • 원인: 동적 테이블에 할당된 웨어하우스가 삭제·이름 변경됐거나, 소유 역할이 그에 대한 USAGE 권한을 잃었어요.
  • 해결: SHOW WAREHOUSES LIKE '<name>'로 웨어하우스가 존재하는지 확인하고, SHOW GRANTS ON WAREHOUSE <name>으로 권한을 확인하세요. 웨어하우스가 삭제됐다면 ALTER DYNAMIC TABLE <name> SET WAREHOUSE = <warehouse_name>으로 웨어하우스를 다시 할당하세요.

데이터 종속 함수 (002798)

  • 메시지: Dynamic table contains a data dependent '<function_name>' function.
  • 원인: 기본 테이블의 마스킹 또는 행 접근 정책이 IS_ROLE_IN_SESSION(column_name) 같은 컨텍스트 함수에 컬럼 값을 전달하고, 동적 테이블이 REFRESH_MODE=INCREMENTAL을 사용해요. 상수 인자를 가진 정책은 증분 갱신과 호환되며 이 오류를 유발하지 않아요.
  • 해결: REFRESH_MODE=AUTO를 사용해 Snowflake가 FULL 갱신으로 우아하게 결정하도록 하거나, 정책을 컬럼 값 대신 상수 인자를 사용하도록 다시 작성하세요. 자세한 내용은 동적 테이블 갱신 모드 문서를 참조하세요.

객체가 존재하지 않거나 권한이 없음 (002037)

  • 메시지: Object does not exist or not authorized.
  • 원인: 동적 테이블 정의에 참조된 테이블·뷰·함수가 존재하지 않거나, 동적 테이블의 소유 역할이 그에 필요한 권한이 없어요.
  • 해결: 참조된 모든 객체가 존재하고 소유 역할에 SELECT 권한이 있는지 확인하세요. 갱신 기록의 전체 state_message에서 누락된 객체 이름을 확인한 다음 객체와 부여(grant)를 검증하세요:
SHOW GRANTS TO ROLE myrole;

자세한 내용은 동적 테이블 접근 제어 문서를 참조하세요.

알 수 없는 함수 오류

  • 메시지: Unknown function <FUNCTION_NAME>.
  • 원인: 동적 테이블의 소유 역할이 정의에 참조된 사용자 정의 함수(UDF) 또는 외부 함수에 대한 권한을 잃었어요. 갱신은 소유 역할로 실행되므로, 함수에 대한 USAGE가 취소되거나 함수가 삭제되면 이 오류로 갱신이 실패해요.
  • 해결: 함수에 대한 USAGE를 소유 역할에 다시 부여하세요:
GRANT USAGE ON FUNCTION mydb.myschema.my_udf(VARCHAR)
  TO ROLE dt_owner_role;

함수가 삭제됐다면 다시 만들거나 동적 테이블 정의를 업데이트해 참조를 제거하세요. 정의를 검사해 동적 테이블이 어떤 함수를 참조하는지 확인하세요:

SELECT GET_DDL('DYNAMIC_TABLE', 'mydb.myschema.dt_orders');

자세한 내용은 동적 테이블 접근 제어 문서를 참조하세요.

증분 갱신과 호환되지 않는 보안 정책 (002744)

  • 메시지: Dynamic table must use full refresh because a security policy on a base table is not compatible with incremental refresh.
  • 원인: 기본 테이블의 행 접근 정책 또는 마스킹 정책이 증분 갱신이 추적할 수 없는 구조물을 사용해 동적 테이블이 전체 갱신을 사용하도록 강제해요.
  • 해결: REFRESH_MODE=FULL로 동적 테이블을 다시 만드세요:
CREATE OR REPLACE DYNAMIC TABLE mydb.myschema.dt_orders
  ...
  REFRESH_MODE = FULL
AS
  SELECT ...;

또는 기본 테이블의 보안 정책을 호환되지 않는 구조물을 사용하지 않도록 제거하거나 수정하세요. REFRESH_MODE는 생성 후 변경할 수 없어요. 변경하려면 CREATE OR REPLACE DYNAMIC TABLE로 동적 테이블을 다시 만드세요. 자세한 내용은 동적 테이블 갱신 모드 문서를 참조하세요.

수동 갱신에 대한 OPERATE 권한 부족 (002756)

  • 메시지: Insufficient privileges to operate on dynamic table. OPERATE privilege is required for manual refresh.
  • 원인: ALTER DYNAMIC TABLE ... REFRESH를 실행하는 역할이 갱신 파이프라인 어딘가에서 OPERATE 권한이 없어요. 소유 역할 또는 명시적 OPERATE 부여가 있는 역할만 수동 갱신을 트리거할 수 있어요.
    • 단일 테이블 갱신: ALTER DYNAMIC TABLE <name> REFRESH를 호출하는 역할이 동적 테이블이나 업스트림 동적 테이블에 OPERATE가 없음.
    • 다중 테이블 갱신: 역할이 나열된 동적 테이블에는 OPERATE가 있지만 갱신 파이프라인의 업스트림 동적 테이블 하나 이상에는 OPERATE가 없음.
    • 나열된 동적 테이블 자체에 OPERATE가 없으면 대신 오류 002037이 발생해요.
  • 해결: 수동 갱신을 실행해야 하는 역할에 OPERATE 권한을 부여하세요:
GRANT OPERATE ON DYNAMIC TABLE mydb.myschema.dt_orders
  TO ROLE pipeline_admin_role;

OWNERSHIP은 OPERATE의 모든 기능을 포함해요. 자세한 내용은 동적 테이블 접근 제어 문서를 참조하세요.

초기 갱신에 대한 권한 부족 (002757)

  • 메시지: Insufficient privileges to operate on dynamic table. OPERATE privilege is required for initial refresh.
  • 원인: 동적 테이블을 만든 역할이 파이프라인의 업스트림 동적 테이블 하나 이상에 OPERATE 권한이 없어요. INITIALIZE=ON_CREATE 동안 Snowflake는 생성하는 역할이 갱신해야 하는 모든 업스트림 동적 테이블을 운영할 수 있는지 확인해요.
  • 해결: CREATE DYNAMIC TABLE 문을 실행할 역할에 각 업스트림 동적 테이블에 대한 OPERATE를 부여하세요. 생성 후 백그라운드 갱신은 소유 역할을 사용하며 업스트림 테이블에 대한 OPERATE를 요구하지 않아요:
GRANT OPERATE ON DYNAMIC TABLE mydb.myschema.dt_upstream
  TO ROLE transform_role;

또는 INITIALIZE=ON_SCHEDULE로 동적 테이블을 만들어 즉시 초기 갱신을 건너뛰세요. 백그라운드 갱신 프로세스는 소유 역할을 사용하며, 소유 역할은 암시적으로 OPERATE를 가져요. 자세한 내용은 동적 테이블 접근 제어 문서를 참조하세요.

소유 역할이 존재하지 않음 (002773)

  • 메시지: Owner role of the dynamic table does not exist.
  • 원인: 동적 테이블을 소유한 역할이 삭제됐거나 더 이상 존재하지 않아요. Snowflake는 백그라운드 갱신을 실행하기 위해 소유 역할을 사용하므로, 역할이 없으면 갱신을 실행할 수 없어요.
  • 해결: 소유권을 기존 역할로 이전하세요:
GRANT OWNERSHIP ON DYNAMIC TABLE mydb.myschema.dt_orders
  TO ROLE transform_role COPY CURRENT GRANTS;

역할이 실수로 삭제됐다면 다시 만들고 필요한 권한을 다시 부여하세요. 현재 소유자를 확인하려면:

SHOW DYNAMIC TABLES LIKE 'dt_orders' IN SCHEMA mydb.myschema;

owner 컬럼이 현재 동적 테이블을 소유한 역할을 보여줘요. 자세한 내용은 동적 테이블 접근 제어 문서를 참조하세요.

운영 오류 (복구 가능)

이 오류들은 삭제된 객체나 스키마 진화 같은 환경의 변화 때문에 발생해요. 조치가 필요하지만 Snowflake 지원이 필요하지 않아요.

지원되지 않는 비결정적 함수 (091912)

  • 메시지: Query contains a non-deterministic function that change tracking does not support.
  • 원인: 동적 테이블의 정의가 증분 갱신이 변경을 추적할 수 없는 위치에서 비결정적 함수를 사용해요. 타임스탬프 함수(CURRENT_TIMESTAMP, CURRENT_DATE, CURRENT_TIME)는 WHERE, HAVING, QUALIFY 절에서 지원돼요. APPROX_COUNT_DISTINCT, APPROX_PERCENTILE, APPROX_TOP_K 같은 비결정적 집계 함수는 SELECT 절에서 지원돼요. 이 오류는 RANDOM() 같은 비결정적 스칼라 함수 또는 세션 컨텍스트 함수(CURRENT_USER, CURRENT_ROLE)가 SELECT 목록이나 다른 지원되지 않는 위치에 나타날 때 발생해요.
  • 해결: 비결정적 함수를 WHERE, HAVING, QUALIFY 절로 옮기거나(타임스탬프 함수에 대해 지원), 정의에서 제거하거나, REFRESH_MODE=FULL로 동적 테이블을 다시 만드세요. 예를 들어 SELECT 목록의 CURRENT_TIMESTAMP()는 전체 갱신을 강제해요:
CREATE OR REPLACE DYNAMIC TABLE mydb.myschema.dt_orders
  ...
  REFRESH_MODE = FULL
AS
  SELECT order_id, customer_id, CURRENT_TIMESTAMP() AS refreshed_at
  FROM mydb.myschema.raw_orders;

각 행이 언제 마지막으로 갱신됐는지 기록하는 타임스탬프가 필요하다면 CURRENT_TIMESTAMP() 대신 METADATA$ROW_LAST_COMMIT_TIME를 사용하세요. 이 내장 컬럼은 각 행의 실제 커밋 시간을 제공하며 증분 갱신과 호환돼요.

자세한 내용은 동적 테이블 지원 쿼리 문서를 참조하세요.

SQL 컴파일 오류

  • 메시지: SQL compilation error: invalid identifier ''.
  • 원인: 동적 테이블 정의에 참조된 컬럼이 기본 테이블에서 삭제되거나 이름 변경됐어요. 식별자가 더 이상 존재하지 않으므로 동적 테이블의 SQL을 컴파일할 수 없어요.
  • 해결: 동적 테이블 정의를 현재 기본 테이블 스키마와 비교해 누락된 컬럼을 식별하세요:
-- 동적 테이블의 정의 보기
SELECT GET_DDL('DYNAMIC_TABLE', 'mydb.myschema.dt_orders');

-- 기본 테이블의 현재 컬럼 보기
DESCRIBE TABLE mydb.myschema.raw_orders;

그런 다음 기본 테이블의 컬럼을 복원하거나 올바른 컬럼 이름을 참조하는 업데이트된 정의로 동적 테이블을 다시 만드세요:

CREATE OR REPLACE DYNAMIC TABLE mydb.myschema.dt_orders
  ...
AS
  SELECT ...;

💡 기본 테이블 스키마 변경이 잦다면 자동 스키마 진화를 위해 SELECT * 또는 SELECT * EXCLUDE(...)를 고려하세요. 동적 테이블 수정 문서를 참조하세요.

동적 테이블이 초기화되지 않음 (002741)

  • 메시지: Dynamic table is not initialized.
  • 원인: 동적 테이블의 초기 갱신이 완료되지 않았어요. 초기 갱신이 실패하거나(예: 권한 문제, 쿼리 오류) 동적 테이블이 최근에 만들어져 아직 예약되지 않았을 때 발생할 수 있어요.
  • 해결: 갱신 기록에서 초기 갱신 실패를 확인하세요:
SELECT state, state_code, state_message
FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY(
  NAME => 'mydb.myschema.dt_orders'
))
ORDER BY data_timestamp ASC
LIMIT 5;

근본 원인(누락된 권한, 잘못된 쿼리, 웨어하우스 문제)을 고친 후 수동 갱신을 트리거하세요:

ALTER DYNAMIC TABLE mydb.myschema.dt_orders REFRESH;

다중 문 트랜잭션에서 수동 갱신 지원 안 됨 (002743)

  • 메시지: Manual refresh of a dynamic table is not supported inside a multi-statement transaction.
  • 원인: ALTER DYNAMIC TABLE ... REFRESH가 다중 문 트랜잭션(BEGIN/COMMIT 블록) 안에서 실행됐어요. 명시적 트랜잭션 안에서는 수동 갱신이 지원되지 않아요.
  • 해결: 수동 갱신 문을 다중 문 트랜잭션 밖에서 실행하세요.

📌 TRANSACTION_ABORT_ON_ERROR가 TRUE로 설정되어 있으면 이 오류가 발생할 때 트랜잭션이 중단돼요.

보안 객체의 오류 (002742)

  • 메시지: Failed to refresh dynamic table. Error in secure object.
  • 원인: 동적 테이블의 정의가 갱신 중 오류를 반환한 보안 뷰 또는 보안 함수를 참조해요. 보안 객체 자체가 동적 테이블의 쿼리를 깨뜨리는 방식으로 수정된 후에 흔히 발생해요.
  • 해결: 보안 객체의 SQL이 유효하고 동적 테이블의 소유 역할에 필요한 권한이 있는지 확인하세요:
SHOW GRANTS ON VIEW mydb.myschema.my_secure_view;
DESC VIEW mydb.myschema.my_secure_view;

보안 객체의 스키마가 변경됐다면 업데이트된 정의로 동적 테이블을 다시 만드세요.

갱신이 취소되거나 시간 초과됨 (002724)

  • 메시지: Refresh was canceled or timed out.

  • 원인: 갱신 쿼리가 문 시간 초과를 초과했거나 취소됐어요. 웨어하우스가 워크로드에 너무 작거나, 정의가 너무 복잡하거나, 리소스 경합으로 쿼리가 큐에 대기했을 때 발생해요.

  • 해결: 다음 접근법 중 하나 이상을 고려하세요:

    1. 웨어하우스 크기를 늘리세요. 동적 테이블용 웨어하우스 선택 및 크기 조정 문서를 참조하세요.
    2. 정의를 여러 동적 테이블로 나눠 단순화하세요.
    3. 웨어하우스의 STATEMENT_TIMEOUT_IN_SECONDS 파라미터를 늘리세요.

    유효 타임아웃은 계정, 웨어하우스, 세션 수준에 걸쳐 설정된 가장 제한적인 값이에요. 웨어하우스 수준 설정을 늘려도 해결되지 않으면 세 가지를 모두 확인하세요.

문이 문 또는 잠금 시간 초과에 도달함 (000627)

  • 메시지: Statement reached its statement or lock timeout.
  • 원인: 갱신 문이 잠금 시간 초과 기간 내에 동적 테이블이나 참조된 객체에 대한 잠금을 획득하지 못했어요. 높은 동시성 기간 또는 장기 실행 트랜잭션이 충돌 잠금을 보유할 때 발생해요.
  • 해결: 잠금을 보유할 수 있는 장기 실행 트랜잭션을 확인하세요:
SHOW LOCKS IN ACCOUNT;
SHOW TRANSACTIONS IN ACCOUNT;

잠금 경합이 반복되면 LOCK_TIMEOUT 파라미터를 늘리거나 파이프라인 전체에 갱신 일정을 분산하세요.

SQL 실행이 취소됨 (000603)

  • 메시지: SQL execution canceled.
  • 원인: 갱신 쿼리가 완료되기 전에 취소됐어요. 갱신이 진행되는 동안 웨어하우스가 자동 일시 중단되거나, 관리자가 갱신 쿼리를 수동으로 취소하거나, 리소스 압박으로 시스템이 쿼리를 취소할 때 발생해요.
  • 해결: 웨어하우스의 AUTO_SUSPEND 설정을 확인하세요. 갱신 기간 동안 웨어하우스가 일시 중단된다면 AUTO_SUSPEND를 늘리거나 갱신이 실행되는 동안 0(자동 일시 중단 없음)으로 설정하세요:
ALTER WAREHOUSE transform_wh SET AUTO_SUSPEND = 600;

쿼리가 수동으로 취소됐다면 자동화된 프로세스나 사용자가 활성 갱신 쿼리를 취소하고 있지 않은지 확인하세요.

일부 입력이 갱신에 실패함 (002753)

  • 메시지: Some inputs failed to refresh: []. (백그라운드 갱신) 또는 Manual refresh failed because an upstream dynamic table failed to refresh. (수동 갱신)
  • 원인: 파이프라인의 업스트림 동적 테이블 하나 이상이 갱신에 실패했어요. 백그라운드(예약) 갱신 중 Snowflake는 실패한 업스트림 테이블 이름과 함께 "Some inputs failed to refresh"로 보고해요. 수동 갱신(ALTER DYNAMIC TABLE ... REFRESH) 중에는 메시지가 더 명시적이에요. 두 경우 모두 다운스트림 갱신이 성공하려면 업스트림 실패를 먼저 해결해야 해요.
  • 해결: 파이프라인의 각 테이블에 대한 갱신 기록을 확인해 어떤 업스트림 동적 테이블이 실패했는지 식별하세요:
  • SELECT name, state, state_code, state_message
    FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY())
    WHERE state = 'FAILED'
    ORDER BY data_timestamp DESC
    LIMIT 20;
    

    업스트림 실패를 먼저 고친 다음 다운스트림 동적 테이블에서 수동 갱신을 다시 시도하세요:

    ALTER DYNAMIC TABLE mydb.myschema.dt_orders REFRESH;
    

    업스트림 실패 진단에 대한 자세한 내용은 UPSTREAM_FAILED 상태로 갱신 실패 문서를 참조하세요.

    동적 테이블을 더 이상 증분으로 갱신할 수 없음 (002766)

    • 메시지: Dynamic table can no longer be refreshed incrementally.
    • 원인: 뷰에 LIMIT 절 추가, 참조된 객체의 컬럼 변경 같은 파이프라인의 구조적 변화로 동적 테이블의 정의를 더 이상 증분으로 추적할 수 없어요. Snowflake가 이 정의에 대해 증분 변경 추적이 더 이상 유효하지 않다고 감지했어요.
    • 해결: CREATE OR REPLACE DYNAMIC TABLE로 동적 테이블을 다시 만드세요. 정의가 더 이상 증분 갱신을 지원하지 않으면 REFRESH_MODE=FULL을 설정하세요:
    CREATE OR REPLACE DYNAMIC TABLE mydb.myschema.dt_orders
      ...
      REFRESH_MODE = FULL
    AS
      SELECT ...;
    

    증분 갱신을 유지하려면 호환성을 깨뜨린 구조적 변경을 되돌리세요(예: 참조된 뷰에서 LIMIT 절 제거). 어떤 쿼리 패턴이 증분 갱신을 지원하는지에 대한 자세한 내용은 동적 테이블 지원 쿼리 문서를 참조하세요.

    업스트림 테이블이 데이터 보존 기간 밖에 있음 (002841)

    • 메시지: Upstream table is outside the data retention period. Change tracking data is no longer available.
    • 원인: 동적 테이블이 의존하는 업스트림 테이블이 DATA_RETENTION_TIME_IN_DAYS 창 밖으로 벗어났어요. 증분 갱신에 필요한 변경 추적 데이터를 더 이상 사용할 수 없으므로 동적 테이블이 갱신할 수 없어요.
    • 해결: 동적 테이블을 다시 초기화해야 해요. CREATE OR REPLACE DYNAMIC TABLE로 변경 추적 기준선을 재설정하세요:
    CREATE OR REPLACE DYNAMIC TABLE mydb.myschema.dt_orders
      ...
    AS
      SELECT ...;
    

    앞으로 이 문제를 방지하려면:

    1. 일시 중단 기간을 모니터링하세요. 동적 테이블이 일시 중단되면 업스트림 테이블의 보존 기간이 만료되기 전에 재개하세요.
    2. 필요하면 업스트림 테이블의 보존 기간을 늘리세요: ALTER TABLE upstream_table SET DATA_RETENTION_TIME_IN_DAYS = 14.
    3. 일시 중단을 조기 감지하도록 DYNAMIC_TABLE_REFRESH_HISTORY 함수에 알림을 설정하세요.

    내부 오류 (지원 문의)

    이 오류들은 스스로 해결할 수 없는 내부 문제를 나타내요. Snowflake Support에 연락하고 갱신 기록의 query_id와 오류 세부 정보를 제공하세요.

    내부 Dynamic Table 갱신 오류 (002781)

    • 메시지: Internal Dynamic Table refresh error. Invalid DT_ROW_ID.
    • 원인: 증분 갱신 중 내부 데이터 무결성 검사가 실패했어요. Snowflake가 동적 테이블의 기존 행과 일치하지 않는 변경 델타의 행을 감지했어요.
    • 해결: 내부 데이터 무결성 오류예요. 발생하면 CREATE OR REPLACE로 동적 테이블을 다시 만드세요. 오류가 지속되면 갱신 기록의 query_id와 함께 Snowflake Support에 연락하세요.

    SQL 실행 내부 오류 (300002, 300010)

    • 메시지: SQL execution internal error: Processing aborted due to error.
    • 원인: 갱신 처리 중 내부 실행 오류가 발생했어요. 오류 메시지에는 숫자 오류 코드(300002 또는 300010 같은)와 인시던트 ID가 포함돼요. 300xxx 범위의 다른 코드도 나타날 수 있어요.
    • 해결: 사용자가 조치할 수 없어요. 오류 코드와 인시던트 ID가 포함된 전체 오류 메시지와 함께 Snowflake Support에 연락하세요.

    ExecRsoProjection: 해결되지 않은 커넥터 (370001)

    • 메시지: ExecRsoProjection: Unresolved connector.
    • 원인: 동적 테이블의 정의를 처리하는 동안 내부 SQL 컴파일러 오류가 발생했어요.
    • 해결: 사용자가 조치할 수 없어요. query_id와 함께 Snowflake Support에 연락하세요. 임시 해결책으로 정의를 단순화하면(예: 복잡한 JOIN + GROUP BY를 두 동적 테이블로 나누기) 문제를 피할 수 있어요.

    Snowflake 지원에 연락할 때

    다음 경우에 Snowflake Support에 연락하세요:

    • 위 내부 오류 섹션에 나열된 오류가 발생한 경우.
    • 오류 메시지에 인시던트 번호와 함께 "Processing aborted due to error"가 포함된 경우.
    • 오류 메시지에 "Internal Error" 또는 "incident"가 포함된 경우.
    • 오류 002781(잘못된 DT_ROW_ID)이 반복적으로 발생하는 경우.
    • 구성 또는 운영 오류의 해결 단계를 따랐는데도 문제가 지속되는 경우.

    지원 케이스를 열 때 다음을 포함하세요:

    1. 갱신 기록의 전체 오류 메시지.
    2. state_message 또는 갱신 기록 출력의 query_id.
    3. 동적 테이블 이름과 데이터베이스/스키마.
    4. SHOW DYNAMIC TABLES LIKE '<table_name>'의 출력.

    다음 단계

    • 동적 테이블 갱신 문제 해결
    • 동적 테이블 모니터링
    • 동적 테이블 갱신 모드
    • CREATE DYNAMIC TABLE

    더 알아보기 (Learn more)