Fungsi tabel

Fungsi tabel, yang juga disebut fungsi yang bernilai tabel (TVF), merupakan fungsi yang ditentukan pengguna dan menampilkan tabel. Anda bisa menggunakan fungsi tabel di mana pun Anda bisa menggunakan tabel. Fungsi tabel berperilaku mirip dengan tampilan, tetapi fungsi tabel dapat mengambil parameter.

Membuat fungsi tabel

Untuk membuat fungsi tabel, gunakan pernyataan CREATE TABLE FUNCTION. Fungsi tabel berisi kueri yang menghasilkan tabel. Fungsi ini menampilkan hasil kueri. Fungsi tabel berikut mengambil parameter INT64 dan menggunakan nilai ini di dalam klausa WHERE dalam kueri melalui set data publik yang disebut bigquery-public-data.usa_names.usa_1910_current .

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
);

Untuk memfilter dengan cara lain, Anda dapat meneruskan beberapa parameter ke fungsi tabel. Fungsi tabel berikut memfilter data menurut tahun dan awalan nama:

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
);

Nama parameter

Jika parameter fungsi tabel cocok dengan nama kolom tabel, parameter tersebut dapat membuat referensi yang ambigu. Dalam hal ini, BigQuery akan menafsirkan nama tersebut sebagai referensi ke kolom tabel, bukan parameter. Praktik yang direkomendasikan adalah menggunakan nama parameter yang berbeda dengan nama kolom tabel yang direferensikan.

Menggunakan fungsi tabel

Anda dapat memanggil fungsi tabel dalam konteks apa pun jika tabel tersebut valid. Contoh berikut memanggil fungsi mydataset.names_by_year dalam klausa FROM pernyataan SELECT:

SELECT * FROM mydataset.names_by_year(1950)
  ORDER BY total DESC
  LIMIT 5

Hasilnya akan terlihat seperti berikut:

+------+--------+-------+
| year |  name  | total |
+------+--------+-------+
| 1950 | James  | 86447 |
| 1950 | Robert | 83717 |
| 1950 | Linda  | 80498 |
| 1950 | John   | 79561 |
| 1950 | Mary   | 65546 |
+------+--------+-------+

Anda dapat menggabungkan output dari fungsi tabel dengan tabel lain:

SELECT *
  FROM `bigquery-public-data.samples.shakespeare` AS s
  JOIN mydataset.names_by_year(1950) AS n
  ON n.name = s.word

Anda juga dapat menggunakan fungsi tabel di subkueri:

SELECT ARRAY(
  SELECT name FROM mydataset.names_by_year(1950)
  ORDER BY total DESC
  LIMIT 5)

Mencantumkan fungsi tabel

Fungsi tabel adalah jenis rutinitas. Untuk mencantumkan semua rutinitas dalam set data, lihat Mencantumkan rutinitas.

Menghapus fungsi tabel

Untuk menghapus fungsi tabel, gunakan pernyataan DROP TABLE FUNCTION:

DROP TABLE FUNCTION mydataset.names_by_year

Memberi otorisasi kepada rutinitas

Anda dapat mengizinkan fungsi tabel sebagai rutinitas. Rutinitas yang diotorisasi memungkinkan Anda membagikan hasil kueri kepada pengguna atau grup tertentu tanpa memberi mereka akses ke tabel dasar yang membuat hasil tersebut. Misalnya, rutinitas yang diizinkan dapat menghitung agregasi atas data atau mencari nilai tabel dan menggunakan nilai tersebut dalam komputasi. Untuk mengetahui informasi selengkapnya, lihat Rutinitas yang diotorisasi.

Batasan

  • Parameter harus berupa nilai skalar. Fungsi tabel di BigQuery tidak dapat menganggap tabel sebagai parameter input.

  • Isi kueri harus berupa pernyataan SELECT dan tidak dapat mengubah apa pun. Misalnya, pernyataan bahasa definisi data (DDL) dan bahasa manipulasi data (DML) tidak diizinkan dalam fungsi tabel. Jika Anda memerlukan efek samping, sebaiknya tulis prosedur.

  • Fungsi tabel harus disimpan di lokasi yang sama dengan tabel yang dirujuknya.

Kuota

Untuk mengetahui informasi selengkapnya tentang kuota dan batas fungsi tabel, lihat Kuota dan batas.