테이블 함수¶
테이블 함수는 각 입력 행에 대한 행 세트를 반환합니다. 반환된 세트에는 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 포함)에 대한 자세한 내용은 사용자 정의 함수 개요 섹션을 참조하십시오.
기본 제공 테이블 함수와 사용자 정의 테이블 함수는 일반적으로 동일한 규칙을 따릅니다. 예를 들어, 이러한 함수는 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는 다음과 같은 시스템 정의(즉, 기본 제공) 테이블 함수를 제공합니다.
하위 카테고리 |
함수 |
참고 |
---|---|---|
데이터 로딩 |
자세한 내용은 Snowflake에 데이터 로딩하기 섹션을 참조하십시오. |
|
데이터 생성 |
||
데이터 변환 |
||
ML 기반 분석 |
자세한 내용은 Snowflake Cortex ML 기반 함수 섹션을 참조하십시오. |
|
오브젝트 모델링 |
||
반정형 쿼리 |
자세한 내용은 반정형 데이터 쿼리하기 섹션을 참조하십시오. |
|
쿼리 결과 |
다른 SQL 작업(예: SHOW)의 출력에 대한 SQL 작업을 수행하는 데 사용할 수 있습니다. |
|
쿼리 프로필 |
||
이력 및 사용 정보 |
||
사용자 로그인
|
||
쿼리
|
||
자세한 내용은 Query Acceleration Service 사용하기 섹션을 참조하십시오. |
||
웨어하우스 및 저장소 사용
|
||
열 수준 및 행 수준 보안
|
||
오브젝트 태그 지정
|
Information Schema 테이블 함수. |
|
Information Schema 테이블 함수. |
||
Account Usage 테이블 함수. |
||
계정 복제
|
자세한 내용은 여러 계정에 걸쳐 복제 및 장애 조치 도입 섹션을 참조하십시오. |
|
REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB |
||
데이터베이스 복제
|
자세한 내용은 여러 계정에서 데이터베이스 복제하기 섹션을 참조하십시오. |
|
DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB |
||
데이터 로딩 및 전송
|
||
데이터 클러스터링(테이블 내)
|
자세한 내용은 자동 클러스터링 섹션을 참조하십시오. |
|
동적 테이블
|
자세한 내용은 동적 테이블 작업 정보 섹션을 참조하십시오. |
|
외부 함수
|
자세한 내용은 외부 함수 쓰기 섹션을 참조하십시오. |
|
외부 테이블
|
자세한 내용은 외부 테이블 관련 작업하기 섹션을 참조하십시오. |
|
구체화된 뷰 유지 관리
|
자세한 내용은 구체화된 뷰 작업하기 섹션을 참조하십시오. |
|
알림
|
자세한 내용은 이메일 알림 보내기 섹션을 참조하십시오. |
|
SCIM 유지 관리
|
자세한 내용은 SCIM을 사용하여 감사하기 섹션을 참조하십시오. |
|
검색 최적화 유지 관리
|
자세한 내용은 검색 최적화 서비스 섹션을 참조하십시오. |
|
스트림
|
자세한 내용은 테이블 스트림을 사용한 변경 내용 추적 섹션을 참조하십시오. |
|
작업
|
자세한 내용은 작업을 사용하여 일정에 따라 SQL 문 실행하기 섹션을 참조하십시오. |
|
네트워크 규칙 |
Information Schema 테이블 함수. 자세한 내용은 네트워크 규칙 섹션을 참조하십시오. |
구문¶
SELECT ...
FROM [ <input_table> [ [AS] <alias_1> ] ,
[ LATERAL ]
]
TABLE( <table_function>( [ <arg_1> [, ... ] ] ) ) [ [ AS ] <alias_2> ];
함수별 구문은 개별 시스템 정의 테이블 함수에 대한 설명서를 참조하십시오.