테이블 함수
테이블 값 함수(TVF)라고도 부르는 테이블 함수는 테이블을 반환하는 사용자 정의 함수입니다. 테이블을 사용할 수 있는 어디에서나 테이블 함수를 사용할 수 있습니다. 테이블 함수는 뷰와 비슷하게 작동하지만 테이블 함수는 매개변수를 사용할 수 있습니다.
테이블 함수 만들기
테이블 함수를 만들려면 CREATE TABLE FUNCTION
문을 사용합니다. 테이블 함수에는 테이블을 생성하는 쿼리가 포함됩니다. 이 함수는 쿼리 결과를 반환합니다. 다음 테이블 함수는 INT64
매개변수를 사용하며, bigquery-public-data.usa_names.usa_1910_current
라는 공개 데이터 세트에 대한 쿼리의 WHERE
절 내에서 이 값을 사용합니다.
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year(y INT64)
AS (
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE year = y
GROUP BY year, name
);
다른 방법으로 필터링하려면 여러 매개변수를 테이블 함수에 전달할 수 있습니다. 다음 테이블 함수는 연도 및 이름 프리픽스로 데이터를 필터링합니다.
CREATE OR REPLACE TABLE FUNCTION mydataset.names_by_year_and_prefix(
y INT64, z STRING)
AS (
SELECT year, name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_current`
WHERE
year = y
AND STARTS_WITH(name, z)
GROUP BY year, name
);
매개변수 이름
테이블 함수 매개변수가 테이블 열의 이름과 일치할 경우 모호한 참조가 생성될 수 있습니다. 이 경우 BigQuery는 이름을 매개변수가 아닌 테이블 열에 대한 참조로 해석합니다. 권장 방법은 참조된 테이블 열 이름과 구분되는 매개변수 이름을 사용하는 것입니다.
테이블 함수 사용
테이블이 유효한 모든 컨텍스트에서 테이블 함수를 호출할 수 있습니다. 다음 예시에서는 SELECT
문의 FROM
절에서 mydataset.names_by_year
함수를 호출합니다.
SELECT * FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5
결과는 다음과 같이 표시됩니다.
+------+--------+-------+
| year | name | total |
+------+--------+-------+
| 1950 | James | 86447 |
| 1950 | Robert | 83717 |
| 1950 | Linda | 80498 |
| 1950 | John | 79561 |
| 1950 | Mary | 65546 |
+------+--------+-------+
테이블 함수의 출력을 다른 테이블과 조인할 수 있습니다.
SELECT *
FROM `bigquery-public-data.samples.shakespeare` AS s
JOIN mydataset.names_by_year(1950) AS n
ON n.name = s.word
서브 쿼리에서 테이블 함수를 사용할 수도 있습니다.
SELECT ARRAY(
SELECT name FROM mydataset.names_by_year(1950)
ORDER BY total DESC
LIMIT 5)
테이블 함수 나열
테이블 함수는 루틴의 한 유형입니다. 데이터 세트의 모든 루틴을 나열하려면 루틴 나열을 참조하세요.
테이블 함수 삭제
테이블 함수를 삭제하려면 DROP TABLE FUNCTION
문을 사용합니다.
DROP TABLE FUNCTION mydataset.names_by_year
루틴 승인
테이블 함수를 루틴으로 승인할 수 있습니다. 승인된 루틴을 사용하면 결과를 생성한 기본 테이블에 대해 액세스 권한을 부여하지 않고도 특정 사용자 또는 그룹에 쿼리 결과를 공유할 수 있습니다. 예를 들어 승인된 루틴은 데이터에 대한 집계를 계산하거나 테이블 값을 조회하고 이 값을 계산에 사용할 수 있습니다. 자세한 내용은 승인된 루틴을 참조하세요.
제한사항
매개변수는 스칼라 값이어야 합니다. BigQuery의 테이블 함수는 테이블을 입력 매개변수로 사용할 수 없습니다.
쿼리 본문은
SELECT
문이어야 하며 어떤 것도 수정할 수 없습니다. 예를 들어 테이블 함수에서는 데이터 정의 언어(DDL) 및 데이터 조작 언어(DML) 문이 허용되지 않습니다. 부수적인 효과가 필요하면 대신 프로시져를 작성하는 것이 좋습니다.테이블 함수는 참조하는 테이블과 동일한 위치에 저장되어야 합니다.
할당량
테이블 함수 할당량 및 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.