템플릿 함수 사용하기

데이터베이스 이름 및 스키마 이름과 같은 SQL 식별자의 연결을 활성화하고 다양한 컨텍스트에서 인용 또는 인용되지 않은 식별자를 유연하게 사용할 수 있도록 Snowflake CLI 는 프로젝트 템플릿 정의 템플릿에서 사용할 수 있는 다음과 같은 유틸리티 함수 집합을 제공합니다.

fn.concat_ids()

  • 입력: 하나 이상의 문자열 인자(SQL ID 또는 일반 문자열)

  • 출력: 유효한 SQL ID(따옴표로 묶이거나 묶이지 않음)

fn.concat_ids() 함수는 여러 문자열 인자를 SQL ID(따옴표 또는 따옴표 제외)를 나타내는 단일 문자열로 연결합니다. 입력 문자열 중 하나라도 유효한 따옴표 식별자인 경우 연결 전에 이스케이프가 취소됩니다. 그런 다음 결과 문자열에 SQL이 아닌 안전 문자가 포함되어 있거나 입력 문자열 중 유효한 따옴표로 묶인 식별자가 있는 경우 결과 문자열이 이스케이프 처리되고 따옴표로 묶입니다.

예:

  • 입력 값 중 하나가 따옴표로 묶인 식별자이기 때문에 fn.concat_ids('id1_', '"quoted_id2"') 를 호출하면 "id1_quoted_id2" 가 출력됩니다.

  • fn.concat_ids('id1_', 'id2') 를 호출하면 입력 값 중 따옴표로 묶인 식별자가 없고 입력 값에 SQL 안전 문자가 아닌 문자가 포함되어 있지 않으므로 id1_id2 가 출력됩니다.

fn.str_to_id()

  • 입력: 하나 이상의 문자열 인자(SQL ID 또는 일반 문자열)

  • 출력: 유효한 SQL ID(따옴표로 묶이거나 묶이지 않음)

fn.str_to_id() 함수는 문자열을 ID로 반환합니다. 입력 문자열에 따옴표로 묶인 유효한 식별자나 따옴표로 묶이지 않은 식별자가 포함되어 있으면 함수는 이를 그대로 반환합니다. 그러나 입력 문자열에 제대로 따옴표로 묶이지 않은 안전하지 않은 SQL 문자가 포함된 경우 함수는 안전하지 않은 문자를 이스케이프 처리한 따옴표로 묶인 ID를 반환합니다.

예:

  • fn.str_to_id('id1') 은 유효한 따옴표로 묶지 않은 식별자이므로 이를 호출하면 id1 이 반환됩니다.

  • fn.str_to_id('unsafe"id') 를 호출하면 안전하지 않은 SQL 문자가 포함되어 있기 때문에 "unsafe""id" 가 반환됩니다.

fn.id_to_str()

  • 입력: 1개의 문자열 인자(SQL ID 또는 일반 문자열)

  • 출력: 일반 문자열

입력이 유효한 SQL ID인 경우 함수는 이스케이프되지 않은 일반 문자열을 반환합니다. 그렇지 않으면 함수는 입력 문자열을 그대로 반환합니다.

예:

  • :fn.id_to_str('id1') 을 호출하면 따옴표로 묶이지 않았으므로 id1 이 반환됩니다.

  • :codenowrap:` fn.id_to_str(‘“quoted””id.example”’)` 을 호출하면 quoted"id.example 이 반환됩니다.

fn.get_username()

  • 입력: 대체 값을 포함하는 1개의 선택적 문자열

  • 출력: 운영 체제에서 감지된 현재 사용자 이름

운영 체제 환경 변수에서 현재 사용자 이름을 반환합니다. 현재 사용자 이름을 찾을 수 없거나 비어 있는 경우, 빈 값을 반환하거나 대체 값이 제공된 경우 대체 값을 사용합니다.

예:

  • fn.get_username('default_user') 는 현재 사용자 이름이 발견되면 현재 사용자 이름을 반환하고, 그렇지 않으면 default_user 를 반환합니다.

fn.sanitize_id()

  • 입력: 1개의 문자열 인자

  • 출력: 유효한 따옴표로 묶이지 않은 SQL ID

함수 fn.sanitize_id() 는 입력에서 안전하지 않은 SQL 문자를 모두 제거하고 따옴표로 묶지 않은 유효한 SQL ID로 반환합니다. 결과가 문자나 밑줄로 시작하지 않으면 밑줄을 추가합니다. 매우 긴 문자열의 경우 이 함수는 문자열을 255자로 자릅니다.

예:

  • fn.sanitize_id('Some.id"With_Special_Chars') 를 사용하는 경우 출력은 SomeidWith_Special_Chars 입니다.

  • fn.sanitize_id('1abc') 를 사용하는 경우 출력은 _1abc 입니다.

샘플 사용 사례

다음 예제는 snowflake.yml 프로젝트 정의 파일에서 이러한 함수를 사용하는 방법을 보여줍니다.

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.pkg_suffix) %>
    artifacts:
      - src: app/*
        dest: ./
  app:
    type: application
    identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.app_suffix) %>

env:
  app_name: myapp_base_name_<% fn.sanitize_id(fn.get_username()) %>
  app_suffix: _app_instance
  pkg_suffix: _pkg
Copy

다음 예제는 SQL 파일에서 함수를 사용하는 방법을 설명합니다.

DESC APPLICATION <% fn.str_to_id(ctx.entities.app.identifier) %>;
DESC APPLICATION PACKAGE <% fn.str_to_id(ctx.entities.pkg.identifier) %>;
Copy