테이블 함수

테이블 함수는 각 입력 행에 대한 행 세트를 반환합니다. 반환된 세트에는 0개, 1개 또는 그 이상의 행이 포함될 수 있습니다. 각 행에는 하나 이상의 열이 포함될 수 있습니다.

테이블 함수는 《테이블 형식 함수》라고도 합니다.

이 항목의 내용:

테이블 함수란?

테이블 함수는 일반적으로 함수가 각 개별 입력에 대해 여러 행을 반환할 때 사용됩니다.

테이블 함수는 호출될 때마다 다른 수의 행을 반환할 수 있습니다. 예를 들어, 지정된 날짜의 최고 기온 기록 목록을 반환하는 record_high_temperatures_for_date() 함수는 4월 10일에 0개 행, 6월 10일에 1개 행, 8월 20일에 40개 행을 반환할 수 있습니다.

테이블 함수의 간단한 예

다음은 테이블 함수로 적합합니다.

  • 계좌 번호와 날짜를 받아 그 날짜에 해당 계좌에 청구된 모든 요금을 반환하는 함수. (특정 날짜에 둘 이상의 요금이 청구되었을 수 있습니다.)

  • 사용자 ID를 받아들이고, 해당 사용자에게 할당된 데이터베이스 역할을 반환하는 함수입니다. (사용자는 《sysadmin》 및 《useradmin》을 포함하여 여러 역할을 가질 수 있습니다.)

각 출력 행이 여러 입력 행에 의존하는 함수

테이블 함수는 각 출력 행에 영향을 주는 입력 행 수에 따라 다음 두 가지 카테고리로 그룹화할 수 있습니다.

  • 1 대 N

  • M 대 N

앞에서 설명한 함수는 1 대 N 테이블 함수입니다. 각 출력 행은 하나의 입력 행에만 의존합니다. 예를 들어, record_high_temperatures_for_date() 함수는 여러 출력 행을 생성할 수 있습니다(해당 날짜에 최고치를 기록한 각 도시에 대해 하나씩). 특정 입력 날짜에 대한 각 출력 행은 해당 날짜에만 의존합니다. 즉, 각 출력 행은 다른 모든 날짜의 행과 독립적입니다.

Snowflake는 M 대 N 테이블 함수도 지원합니다. 각 출력 행은 여러 입력 행에 따라 달라질 수 있습니다. 예를 들어, 함수가 주가의 이동 평균을 생성하는 경우 해당 함수는 여러 입력 행(여러 날짜)의 주가를 사용하여 각 출력 행을 생성합니다.

보다 일반적으로, M 대 N 함수에서 M개의 입력 행 그룹은 N개의 출력 행 그룹을 생성합니다. M은 하나 이상의 행일 수 있습니다. N은 0개, 1개 또는 그 이상의 행일 수 있습니다.

예를 들어, 10일 이동 평균에서 M은 10입니다. 10개 입력 행의 각 그룹이 하나의 평균 가격을 생성하기 때문에 N은 1입니다.

기본 제공 테이블 함수와 사용자 정의 테이블 함수

Snowflake는 수백 가지의 기본 제공 함수를 제공하며 그중 대부분은 테이블 함수입니다. 기본 제공 테이블 함수는 시스템 정의 테이블 함수 에 나열되어 있습니다.

사용자는 사용자 정의 함수 또는 《UDF》라고 하는 고유한 함수를 작성할 수도 있습니다. 일부 UDF는 스칼라이며 일부는 테이블 형식입니다. 사용자 정의 테이블 함수는 《UDTF》라고 합니다. UDF(UDTF 포함)에 대한 정보는 사용자 정의 함수(UDF) 작성하기 섹션을 참조하십시오.

기본 제공 테이블 함수와 사용자 정의 테이블 함수는 일반적으로 동일한 규칙을 따릅니다. 예를 들어, 이러한 함수는 SQL 문에서 동일한 방식으로 호출됩니다.

테이블 함수 사용하기

FROM 절에서 테이블 함수 사용하기

테이블에는 일련의 행이 포함됩니다. 마찬가지로 테이블 함수는 행 세트를 반환합니다. 테이블과 테이블 함수는 둘 다 행 세트가 필요한 컨텍스트에서 사용됩니다. 특히, 테이블 함수는 SQL 문의 FROM 절에서 사용됩니다.

SQL 컴파일러가 테이블 함수를 행 소스로 인식할 수 있도록 Snowflake는 테이블 함수 호출을 TABLE() 키워드로 래핑해야 합니다.

예를 들어, 다음 문은 DATE 값을 인자로 받는 record_high_temperatures_for_date() 로 명명된 테이블 함수를 호출합니다.

SELECT city_name, temperature
    FROM TABLE(record_high_temperatures_for_date('2021-06-27'::DATE))
    ORDER BY city_name;

TABLE() 구문에 대한 자세한 내용은 테이블 리터럴 섹션을 참조하십시오.

일반적으로 함수와 마찬가지로 테이블 함수는 각 호출에서 0개, 1개 또는 여러 개의 입력 인자를 받아들일 수 있습니다. 각 인자는 스칼라 식이어야 합니다.

테이블 함수 호출 구문에 대한 자세한 내용은 (이 항목의) 구문 섹션을 참조하십시오.

테이블을 테이블 함수에 대한 입력으로 사용하기

테이블 함수에 대한 인자는 리터럴 또는 테이블의 열과 같은 식일 수 있습니다. 예를 들어, 아래의 SELECT 문은 테이블의 값을 테이블 함수에 인자로 전달합니다.

CREATE OR REPLACE table dates_of_interest (event_date DATE);
INSERT INTO dates_of_interest (event_date) VALUES
    ('2021-06-21'::DATE),
    ('2022-06-21'::DATE);

CREATE OR REPLACE FUNCTION record_high_temperatures_for_date(d DATE)
    RETURNS TABLE (event_date DATE, city VARCHAR, temperature NUMBER)
    as
    $$
    SELECT d, 'New York', 65.0
    UNION ALL
    SELECT d, 'Los Angeles', 69.0
    $$;
SELECT
        doi.event_date as "Date", 
        record_temperatures.city,
        record_temperatures.temperature
    FROM dates_of_interest AS doi,
         TABLE(record_high_temperatures_for_date(doi.event_date)) AS record_temperatures
      ORDER BY doi.event_date, city;
+------------+-------------+-------------+
| Date       | CITY        | TEMPERATURE |
|------------+-------------+-------------|
| 2021-06-21 | Los Angeles |          69 |
| 2021-06-21 | New York    |          65 |
| 2022-06-21 | Los Angeles |          69 |
| 2022-06-21 | New York    |          65 |
+------------+-------------+-------------+

테이블 함수에 대한 인자는 뷰 및 기타 테이블 함수 등 테이블과 유사한 다른 소스에서 올 수 있습니다.

시스템 정의 테이블 함수 목록

Snowflake는 다음과 같은 시스템 정의(즉, 기본 제공) 테이블 함수를 제공합니다.

하위 카테고리

함수

참고

데이터 로딩

INFER_SCHEMA

자세한 내용은 Snowflake에 데이터 로딩하기 섹션을 참조하십시오.

VALIDATE

데이터 생성

GENERATOR

데이터 변환

SPLIT_TO_TABLE

STRTOK_SPLIT_TO_TABLE

오브젝트 모델링

GET_OBJECT_REFERENCES

반정형 쿼리

FLATTEN

자세한 내용은 반정형 데이터 쿼리하기 섹션을 참조하십시오.

쿼리 결과

RESULT_SCAN

다른 SQL 작업(예: SHOW)의 출력에 대한 SQL 작업을 수행하는 데 사용할 수 있습니다.

쿼리 프로필

GET_QUERY_OPERATOR_STATS

이력 및 사용 정보

(Snowflake Information Schema, Account Usage):

사용자 로그인

LOGIN_HISTORY , LOGIN_HISTORY_BY_USER

쿼리

QUERY_HISTORY , QUERY_HISTORY_BY_*

QUERY_ACCELERATION_HISTORY

Query Acceleration Service 미리 보기의 일부로 제공됩니다.

웨어하우스 및 저장소 사용

DATABASE_STORAGE_USAGE_HISTORY

WAREHOUSE_LOAD_HISTORY

WAREHOUSE_METERING_HISTORY

STAGE_STORAGE_USAGE_HISTORY

열 수준 및 행 수준 보안

POLICY_REFERENCES

오브젝트 태그 지정

TAG_REFERENCES

Information Schema 테이블 함수.

TAG_REFERENCES_ALL_COLUMNS

Information Schema 테이블 함수.

TAG_REFERENCES_WITH_LINEAGE

Account Usage 테이블 함수.

계정 복제

REPLICATION_GROUP_REFRESH_HISTORY

자세한 내용은 계정 복제 및 장애 조치 섹션을 참조하십시오.

REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB

REPLICATION_GROUP_USAGE_HISTORY

데이터베이스 복제

DATABASE_REFRESH_HISTORY

자세한 내용은 여러 계정에서 데이터베이스 복제하기 섹션을 참조하십시오.

DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB

DATABASE_REPLICATION_USAGE_HISTORY

데이터 로딩 및 전송

COPY_HISTORY

DATA_TRANSFER_HISTORY

PIPE_USAGE_HISTORY

STAGE_DIRECTORY_FILE_REGISTRATION_HISTORY

VALIDATE_PIPE_LOAD

데이터 클러스터링(테이블 내)

AUTOMATIC_CLUSTERING_HISTORY

자세한 내용은 자동 클러스터링 섹션을 참조하십시오.

외부 함수

EXTERNAL_FUNCTIONS_HISTORY

자세한 내용은 외부 함수 쓰기 섹션을 참조하십시오.

외부 테이블

AUTO_REFRESH_REGISTRATION_HISTORY

자세한 내용은 외부 테이블 관련 작업하기 섹션을 참조하십시오.

EXTERNAL_TABLE_FILES

EXTERNAL_TABLE_FILE_REGISTRATION_HISTORY

구체화된 뷰 유지 관리

MATERIALIZED_VIEW_REFRESH_HISTORY

자세한 내용은 구체화된 뷰 작업하기 섹션을 참조하십시오.

알림

NOTIFICATION_HISTORY

자세한 내용은 이메일 알림 보내기 섹션을 참조하십시오.

SCIM 유지 관리

REST_EVENT_HISTORY

자세한 내용은 SCIM을 사용하여 감사하기 섹션을 참조하십시오.

검색 최적화 유지 관리

SEARCH_OPTIMIZATION_HISTORY

자세한 내용은 검색 최적화 서비스 사용하기 섹션을 참조하십시오.

스트림

SYSTEM$STREAM_BACKLOG

자세한 내용은 테이블 스트림을 사용한 변경 내용 추적 섹션을 참조하십시오.

작업

COMPLETE_TASK_GRAPHS

자세한 내용은 작업을 사용하여 일정에 따라 SQL 문 실행 섹션을 참조하십시오.

CURRENT_TASK_GRAPHS

SERVERLESS_TASK_HISTORY

TASK_DEPENDENTS

TASK_HISTORY

구문

SELECT ...
  FROM [ <input_table> [ [AS] <alias_1> ] ,
         [ LATERAL ]
       ]
       TABLE( <table_function>( [ <arg_1> [, ... ] ] ) ) [ [ AS ] <alias_2> ];

함수별 구문은 개별 시스템 정의 테이블 함수에 대한 설명서를 참조하십시오.

사용법 노트

  • 테이블 함수는 LATERAL 구문을 사용하여 행 세트에 적용할 수도 있습니다.

  • 테이블 식 사용을 활성화하기 위해, Snowflake는 쿼리 및 하위 쿼리의 FROM 절에서 테이블 식에 대한 ANSI/ISO 표준 구문을 지원합니다. 이 구문은 식이 단일 행 대신 행의 컬렉션을 반환함을 나타내는 데 사용됩니다.

  • 이 ANSI/ISO 구문은 SELECT 목록의 FROM 절에서만 유효합니다. 다른 컨텍스트의 컬렉션 하위 쿼리 사양에서 이러한 키워드와 괄호를 생략할 수 없습니다.

맨 위로 이동