2022_01 번들

이 항목에서는 다음과 같이 그달의 동작 변경 사항(있는 경우)을 설명합니다.

  • 사용되지 않게 된 기능.

  • 활성화된 번들 변경 사항.

  • 번들로 제공되지는 않고 구현된 기타 변경 사항.

이러한 변경 사항에 대해 궁금한 점이 있으면 Snowflake 지원 에 문의하십시오.

이 달에 도입된 새로운 기능, 개선된 사항, 수정 사항에 대한 자세한 내용은 2022년 3월 문서를 참조하십시오.

중요

별도로 명시되는 경우를 제외하고, 이러한 변경 사항은 6.7 동작 변경 릴리스에서 기본적으로 활성화되는 2022_01 번들에 포함됩니다.

이 항목의 내용:

SQL 변경 사항 — 일반

트랜잭션: 중단된 트랜잭션을 커밋하면 오류 메시지가 반환됩니다.

이 변경으로 이미 중단된 트랜잭션의 커밋을 시도하면 오류 메시지가 반환됩니다.

이전

중단된 트랜잭션에서 COMMIT 문을 실행하면(예: 별도의 SYSTEM$ABORT_TRANSACTION 호출을 통해 또는 세션이 유휴 상태였기 때문에) 해당 문이 성공으로 표시되며 다음 메시지가 제공됩니다.

Statement executed successfully.

그러나 트랜잭션 자체는 이미 중단된 상태입니다.

COMMIT 문의 결과 메시지는 트랜잭션이 성공한 것으로 잘못 표시됩니다.

현재

중단된 트랜잭션에서 COMMIT 문을 실행하면(예: 별도의 SYSTEM$ABORT_TRANSACTION 호출을 통해 또는 세션이 유휴 상태이기 때문에) 명령문이 실패하고 000670 오류 코드와 다음 메시지가 표시됩니다.

000670 (57014): COMMIT failed. Your transaction '<이름>', id '<ID>', was already aborted.

SQL 변경 사항 — 명령 및 함수

SHOW TAGS: 출력의 새 열

SHOW TAGS 명령의 출력에 추가된 새 열은 다음과 같습니다.

  • allowed_values: 새로운 이 열은 오브젝트에 태그를 할당할 때 설정할 수 있는 문자열 값을 지정합니다. 태그에 지정된 allowed_values 가 없으면 열의 값은 NULL입니다.

이 변경 사항이 미치는 영향을 제한하기 위해 새 열이 출력의 마지막 열로 추가되었습니다.

SHOW USERS: 페이지 매김 결과, 제한 결과 및 Terse 출력에 대한 지원 추가

SHOW USERS 명령의 동작이 다음과 같이 변경되었습니다.

이전

SHOW USERS 명령은 SQL 출력을 10,000개 행으로 제한하고 다음 구문만 지원합니다.

SHOW USERS [ LIKE '<pattern>' ]
Copy
현재

SHOW USERS 명령은 10,000개 이상의 행을 반환하기 위해 사용할 수 있으며 지원되는 구문은 다음과 같습니다.

SHOW [ TERSE ] USERS [ LIKE '<pattern>' ] [ STARTS WITH '<name_string>' ] [ LIMIT <rows> [ FROM '<name_string>' ] ]
Copy

여기서

  • TERSE 는 출력 열의 다음 하위 세트만 선택적으로 반환합니다.

    name, created_on, display_name, first_name, last_name, email, org_identity, comment, has_password, has_rsa_public_key.

    기본값: 값 없음(모든 열이 출력에 포함됨)

  • STARTS WITH 'name_string' 은 오브젝트 이름의 시작 부분에 나타나는 문자를 기반으로 명령 출력을 선택적으로 필터링합니다. 문자열은 작은따옴표로 묶어야 하며 대/소문자를 구분 합니다. 예를 들어, 다음 절은 서로 다른 결과를 반환합니다.

    ... STARTS WITH 'B' ...

    ... STARTS WITH 'b' ...

    기본값: 값 없음(출력에 필터링이 적용되지 않음)

  • LIMIT rows [ FROM 'name_string' ] 은 반환되는 최대 행 수를 선택적으로 제한하는 동시에, 결과의 《페이지 매김》도 활성화합니다. 반환된 실제 행 수가 지정된 제한보다 적을 수 있습니다(예: 기존 오브젝트 수가 지정된 제한보다 적음).

    선택적 FROM 'name_string' 하위 절은 사실상 결과에 대한 《커서》 역할을 합니다. 그 덕분에 오브젝트 이름이 지정된 문자열과 일치하는 첫 번째 행 다음에 오는 행을 지정된 개수만큼 가져올 수 있습니다.

    문자열은 작은따옴표로 묶어야 하며 대/소문자를 구분 합니다. 또한, 문자열에 전체 오브젝트 이름을 포함할 필요가 없고 부분 이름이 지원됩니다.

    기본값: 값 없음(출력에 제한이 적용되지 않음)

기본적으로, SHOW USERS는 이전과 같이 10,000개 행을 반환합니다. 계정의 사용자 수가 10,000명을 초과하는 경우 명령을 두 번 실행하여 10,000명의 제한을 초과하는 사용자를 반환할 수 있습니다.

SHOW USERS;

SHOW USERS LIMIT 10000 FROM 'JOE';
Copy
  • 첫 번째 문은 첫 번째 10,000명 사용자를 반환합니다. 반환되는 마지막 열은 사용자 이름이 JOE 인 사용자입니다.

  • 두 번째 문은 JOE 이후의 다음 10,000명 사용자를 반환합니다.

SYSTEM$EXTERNAL_TABLE_PIPE_STATUS 및 SYSTEM$PIPE_STATUS 함수: JSON 출력의 추가적인 세부 정보

이제 SYSTEM$EXTERNAL_TABLE_PIPE_STATUSSYSTEM$PIPE_STATUS 함수의 JSON 출력에 다음과 같은 추가 문자열 이름/값 쌍이 포함되어 로딩 중 발생한 오류 등 특정 데이터 로딩에 대한 자세한 내용이 제공됩니다.

이름

설명

참고

oldestPendingFilePath

처리를 위해 현재 큐에 대기 중인 가장 오래된 데이터 파일의 경로입니다. 파일이 큐에 추가된 시점의 타임스탬프는 기존 oldestFileTimestamp 속성에 반환됩니다.

lastIngestedTimestamp

Snowpipe가 가장 최근 파일을 대상 테이블에 성공적으로 로딩한 시점의 타임스탬프입니다.

SYSTEM$PIPE_STATUS만 해당.

lastIngestedFilePath

lastIngestedTimestamp에 지정된 타임스탬프에 로딩된 파일의 경로입니다.

SYSTEM$PIPE_STATUS만 해당.

lastPipeErrorTimestamp

마지막 실행을 위해 파이프 정의에서 COPY INTO 문을 컴파일할 때 타임스탬프에서 오류가 발생했습니다.

SYSTEM$PIPE_STATUS만 해당.

lastPipeFaultTimestamp

내부 Snowflake 프로세스 오류가 마지막으로 감지된 타임스탬프입니다.

lastPulledFromChannelTimestamp

Snowpipe가 Amazon Simple Queue Service(SQS) 큐, Google Pub/Sub 큐 또는 Microsoft Azure 저장소 큐에서 파이프에 대한 《오브젝트 생성》 이벤트 알림을 마지막으로 끌어온 시점의 타임스탬프입니다.

lastForwardedFilePath

파이프로 전달된 마지막 《오브젝트 생성》 이벤트 메시지에서 식별된 데이터 파일의 경로입니다.

다음 예는 Snowpipe에서 발생하는 일반적인 문제에 대한 샘플 출력을 보여줍니다. 함수 출력의 자세한 세부 정보는 데이터 로딩와 관련된 이러한 문제 및 기타 문제를 진단하는 데 유용할 수 있습니다.

  • 알림 큐가 잘못 구성됨:

    {"executionState":"RUNNING","pendingFileCount":0,"notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":0,"lastPulledFromChannelTimestamp:"2022-01-20T06:24:44.771Z"}
    
    Copy

    Snowpipe가 Amazon Simple Queue Service(SQS) 큐, Google Pub/Sub 큐 또는 Microsoft Azure 저장소 큐에서 파이프에 대한 《오브젝트 생성》 이벤트 알림을 주기적으로 끌어오기 위해 시도합니다. 누락되거나 오래된 lastPulledFromChannelTimestamp 값은 Snowpipe가 저장소 큐에 연결할 수 없음을 나타냅니다.

    lastPulledFromChannelTimestamp 타임스탬프가 최신이지만 numOutstandingMessagesOnChannel0 인 경우, Snowpipe는 큐에서 이벤트 알림을 수신할 수 있지만 큐에 알림이 없는 것입니다. 이 마지막 문제는 저장 위치에 데이터 파일을 생성하지 않았거나 큐에 대한 구독이 잘못 구성된 경우에 발생할 수 있습니다.

  • 알림 큐 권한 문제:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:44:08.461Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    channelErrorMessage 값은 저장소 큐에 액세스하고 이벤트 알림을 끌어오기 위한 충분한 권한이 Snowflake에 부여되지 않았음을 나타냅니다.

  • 파이프 정의 및 이벤트 알림 구성에 지정된 경로 불일치:

    {"executionState":"RUNNING","pendingFileCount":0,"lastIngestedTimestamp":"2022-01-20T06:00:01.669Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T06:04:01.089Z","lastForwardedMessageTimestamp":"2022-01-20T06:00:02.741Z","lastPulledFromChannelTimestamp":"2022-01-20T06:05:28.49Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    lastForwardedMessageTimestamp 타임스탬프가 lastReceivedMessageTimestamp 이전입니다. 이는 Snowpipe가 저장소 큐에서 《오브젝트 생성》 이벤트 메시지를 1개 이상 끌어왔지만, 파이프에 정의된 경로와 메시지가 일치하지 않아 처리를 위해 파이프로 전달되지 않았음을 나타냅니다.

  • 외부 저장소 위치 권한 문제:

    {"executionState":"STALLED_STAGE_PERMISSION_ERROR","pendingFileCount":0,"error":"Failed to access the stage, please check storage permission.", "lastPipeErrorTimestamp":"2022-01-20T04:40:01.747Z", "lastIngestedTimestamp":"2022-01-20T04:30:02.518Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T04:30:02.319Z","lastForwardedMessageTimestamp":"2022-01-20T04:30:03.27Z","channelErrorMessage":"no monitoring permission: numOutstandingMessagesOnChannel is not accurate","lastErrorRecordTimestamp":"2022-01-20T04:44:08.461Z","lastPulledFromChannelTimestamp":"2022-01-20T04:39:58.494Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    executionState 값 및 오류 메시지는 Snowflake에 저장소 위치(예: Amazon S3 또는 Google Cloud Storage 버킷 또는 Microsoft Azure 컨테이너)에 대한 최소 권한이 부여되지 않아 저장소 위치에 있는 데이터 파일에 액세스할 수 있음을 나타냅니다.

  • 파이프 정의에서 COPY INTO <테이블> 문 컴파일 오류:

    {"executionState":"STALLED_COMPILATION_ERROR","pendingFileCount":0,"error":"SQL compilation error: error line 1 at position 29\ninvalid identifier 'LAST_NAME'",", "lastPipeErrorTimestamp":"2022-01-20T17:54:30.4Z", "lastIngestedTimestamp":"2022-01-20T17:51:04.73Z","lastIngestedFilePath":"myfile.csv","notificationChannelName":"projects/myproject/subscriptions/mysubscription","numOutstandingMessagesOnChannel":1,"lastReceivedMessageTimestamp":"2022-01-20T17:51:03.336Z","lastForwardedMessageTimestamp":"2022-01-20T17:51:05.081Z","lastPulledFromChannelTimestamp":"2022-01-20T18:03:00.637Z","lastForwardedFilePath":"mypath/myfile.csv"}
    
    Copy

    executionState 값 및 오류 메시지는 Snowpipe가 저장소 위치에서 검색된 데이터 파일을 로딩하는 파이프 정의에서 COPY INTO <테이블> 문을 실행할 수 없음을 나타냅니다.

SQL 변경 — 사용량 뷰 & Information Schema

FUNCTIONS 뷰: 새 열

다음 열은 INFORMATION_SCHEMA.FUNCTIONS 뷰와의 일관성을 위해 ACCOUNT_USAGE.FUNCTIONS 뷰에 추가되었습니다.

  • handler

  • imports

  • target_path

이 변경 사항이 미치는 영향을 제한하기 위해 새 열은 뷰의 마지막 열로 추가되었습니다.

FUNCTIONS 뷰, DESCRIBE FUNCTION 및 GET_DDL 함수: 새 열

INFORMATION_SCHEMA.FUNCTIONS 뿐만 아니라 DESCRIBE FUNCTION 명령 및 GET_DDL 함수의 출력에 추가된 열은 다음과 같습니다.

  • request_translator: 요청 변환기 JavaScript 사용자 정의의 이름입니다(있는 경우).

  • response_translator: 응답 변환기 JavaScript 사용자 정의의 이름입니다(있는 경우).

​​​​​요청 변환기 및 응답 변환기를 사용하면 외부 함수가 사용하는 원격 서비스로 보내고 받는 데이터 형식을 변경할 수 있습니다. 자세한 내용은 원격 서비스에 대한 데이터와 함께 요청 및 응답 변환기 사용하기 섹션을 참조하십시오.

POLICY_REFERENCES 함수: 새 열

created_on 열이 INFORMATION_SCHEMA.POLICY_REFERENCES 테이블 함수에서 제거되었습니다.

다음 열이 INFORMATION_SCHEMA.POLICY_REFERENCES 테이블 함수의 출력에 추가되었습니다.

  • tag_name

  • tag_database

  • tag_schema

  • policy_status

이러한 새 열을 사용하면 태그 이름을 기준으로 열에 대한 정책 연결을 검색할 수 있습니다.

이 변경 사항이 미치는 영향을 제한하기 위해 이러한 새 열은 출력의 마지막 열로 추가되었습니다.

TAGS 뷰: 새 열

이 릴리스에서 ACCOUNT_USAGE.TAGS 뷰에 추가된 열은 다음과 같습니다.

  • allowed_values: 오브젝트에 태그를 할당할 때 설정할 수 있는 문자열 값을 지정합니다. 태그에 지정된 allowed_values 가 없으면 열의 값은 NULL입니다.

이 변경 사항이 미치는 영향을 제한하기 위해 새 열이 뷰의 마지막 열로 추가되었습니다.

TASK_HISTORY 함수: 기본적으로 이전 7일 동안 반환된 태스크 사용 내역

INFORMATION_SCHEMA.TASK_HISTORY 테이블 함수의 동작이 다음과 같이 변경되었습니다.

이전

기본적으로 함수는 시작 날짜 또는 시간이 결정되지 않은 시간 범위 내에서 실행된 과거 태스크에 대한 레코드를 반환했습니다. 내부 데이터 정리 활동으로 인해 일반적으로 시간 범위는 이전 14일로 제한되었지만, 드문 경우로 과거 기간을 추가로 연장할 수 있었습니다.

쿼리에 SCHEDULED_TIME_RANGE_START 인자가 지정된 경우 시간 범위는 이전 7일 이내의 과거 레코드로 제한되었습니다.

현재

이 함수는 이전 7일 이내에 시작된 과거 태스크 실행에 대한 레코드를 반환합니다.

참고로 이전 동작과 마찬가지로 쿼리에 SCHEDULED_TIME_RANGE_START 인자가 지정되면 시간 범위는 계속해서 이전 7일 이내의 과거 레코드로 제한됩니다.

TASK_HISTORY 뷰/함수: 새 열

ACCOUNT_USAGE.TASK_HISTORY 뷰 및 INFORMATION_SCHEMA.TASK_HISTORY 테이블 함수의 출력에 추가된 열은 다음과 같습니다.

  • scheduled_from: 작업 실행을 요청한 메커니즘을 지정합니다. 열에 반환되는 유일한 값은 SCHEDULE 입니다. 이 값은 작업 정의의 일정에 따라 태스크 실행이 시작되었음을 나타냅니다. 태스크 트리에서 하위 태스크를 실행하는 경우 이 열에서는 SCHEDULE 도 반환합니다.

이 열은 향후 도입되는 기능을 지원하기 위해 도입되었습니다.

웨어하우스 뷰: 일관적인 웨어하우스 이름 출력

웨어하우스 소유자(즉, 웨어하우스에 대한 OWNERSHIP 권한이 있는 역할) 또는 상위 역할은 새 웹 인터페이스 또는 ALTER WAREHOUSE … RENAME 명령을 사용하여 웨어하우스 이름을 변경할 수 있습니다.

웨어하우스 이름을 변경할 때의 동작이 다음과 같이 변경되었습니다.

이전

웨어하우스 이름이 일관적이지 않게 표시되는 뷰 열은 다음과 같습니다.

  • ACCOUNT_USAGE, READER_ACCOUNT_USAGE, ORGANIZATION_USAGE

    • WAREHOUSE_METERING_HISTORY.WAREHOUSE_HAME

  • ACCOUNT_USAGE

    • METERING_HISTORY.NAME

뷰의 최근 레코드(웨어하우스 이름 변경 시간으로부터 2~3시간 전)는 새 이름으로 표시되었지만, 이전 레코드에는 이전 이름이 표시되었습니다.

현재

이 뷰의 WAREHOUSE_NAME 및 NAME 열에는 모든 레코드에 대한 새 웨어하우스 이름이 표시됩니다.

참고

이 동작 변경은 다음 보기 및 테이블 함수에는 영향을 미치지 않으며, 해당 보기 및 테이블 함수는 WAREHOUSE_NAME 열의 모든 레코드에 대한 새 웨어하우스 이름을 이미 표시합니다.

  • ACCOUNT_USAGE

    • WAREHOUSE_EVENTS_HISTORY 뷰

    • WAREHOUSE_LOAD_HISTORY 뷰

  • INFORMATION_SCHEMA

    • WAREHOUSE_LOAD_HISTORY 테이블 함수

    • WAREHOUSE_METERING_HISTORY 테이블 함수

확장성 변경 사항

JavaScript 저장 프로시저: 오류 처리 변경 사항

JavaScript로 작성된 저장 프로시저의 오류 처리가 다음과 같이 변경되었습니다.

이전

JavaScript 저장 프로시저에 의해 발생한 모든 오류는 오류 코드가 동일하고 SQLSTATE (각각 100183P0000) 일반 오류 메시지("Execution error in stored procedure SP_NAME...")가 동일했습니다.

스택 추적에 액세스하기 위한 속성의 이름은 stackTraceTxt 였습니다.

예를 들어, 데이터베이스 오브젝트가 없는 경우 예외 오브젝트에 포함되는 항목은 다음과 같습니다.

{
  "stackTraceTxt":"At Statement.execute, line 12 position 19",
  "state":"P0000",
  "code":100183,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

저장 프로시저에서 예외를 포착하지 못한 경우 저장 프로시저를 호출하면 다음 출력이 생성됩니다.

100183 (P0000): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy
현재

저장 프로시저가 쿼리를 실행하는 경우(대부분 저장 프로시저에서와 같이) 하위 쿼리 실행 중 오류가 발생하면 하위 쿼리의 오류 코드 및 SQLSTATE 가 사용됩니다.

또한, 스택 추적에 액세스하기 위한 속성의 이름이 stack 으로 변경되었습니다. 동작 변경이 활성화된 상태에서는 stackTraceTxt 속성이 계속해서 존재하지만, 향후 릴리스에서는 stackTraceTxt 가 제거될 예정입니다.

예를 들어, 데이터베이스 오브젝트가 없는 경우 예외 오브젝트에 포함되는 항목은 다음과 같습니다.

{
  "stack":"Statement.execute, line 12 position 19",
  "stackTraceTxt":"Statement.execute, line 12 position 19", // To be removed in a future release
  "state":"42S02",
  "code":2003,
  "message":"SQL compilation error:\nObject 'X' does not exist or not authorized."
}
Copy

저장 프로시저에서 예외를 포착하지 못하는 경우 저장 프로시저를 호출하면 다음 출력이 생성됩니다.

002003 (42S02): Execution error in store procedure ...:
SQL compilation error:
Object 'X' does not exist or not authorized.
At Statement.execute, line 12 position 19
Copy