테이블 함수

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

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

할당량

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