테이블 함수

테이블 값 함수(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) 문이 허용되지 않습니다. 부수적인 효과가 필요하면 대신 프로시져를 작성하는 것이 좋습니다.

  • 테이블 함수는 참조하는 테이블과 동일한 위치에 저장되어야 합니다.

할당량

테이블 함수 할당량 및 한도에 대한 자세한 내용은 할당량 및 한도를 참조하세요.