Menulis hasil kueri
Dokumen ini menjelaskan cara menulis hasil kueri ke tabel sementara atau permanen.
Tabel sementara dan permanen
BigQuery menyimpan semua hasil kueri ke tabel, yang dapat bersifat permanen atau sementara.
BigQuery menggunakan tabel sementara untuk menyimpan hasil kueri yang tidak ditulis ke tabel permanen. Tabel dibuat dalam set data khusus dan diberi nama secara acak. Anda juga dapat membuat tabel sementara untuk penggunaan Anda sendiri dalam kueri multi-pernyataan dan sesi.
Setelah kueri selesai, tabel sementara akan ada hingga 24 jam. Untuk melihat struktur dan data tabel, buka konsol BigQuery, klik Histori pribadi, lalu pilih kueri yang membuat tabel sementara. Kemudian, di baris Tabel tujuan, klik Tabel sementara.
Akses ke data tabel sementara dibatasi untuk pengguna atau akun layanan yang membuat tugas kueri.
Anda tidak dapat membagikan tabel sementara, dan tabel tersebut tidak terlihat menggunakan daftar standar atau metode manipulasi tabel lainnya. Tabel sementara dibuat di region yang sama dengan tabel yang dikueri.
Tabel permanen dapat berupa tabel baru atau yang sudah ada di set data apa pun yang aksesnya Anda miliki. Jika menulis hasil kueri ke tabel baru, Anda akan dikenai biaya untuk menyimpan data. Saat Anda menulis hasil kueri ke tabel permanen, tabel yang Anda kuerikan harus berada di lokasi yang sama dengan set data yang berisi tabel tujuan.
Anda tidak dapat menyimpan hasil kueri dalam tabel sementara saat kebijakan organisasi yang dibatasi domain diaktifkan. Sebagai solusi, nonaktifkan kebijakan organisasi yang dibatasi domain untuk sementara, jalankan kueri, lalu aktifkan kembali kebijakan tersebut. Atau, Anda dapat menyimpan hasil kueri di tabel tujuan.
Izin yang diperlukan
Setidaknya, untuk menulis hasil kueri ke tabel, Anda harus diberi izin berikut:
bigquery.tables.create
izin untuk membuat tabel barubigquery.tables.updateData
untuk menulis data ke tabel baru, menimpa tabel, atau menambahkan data ke tabelbigquery.jobs.create
untuk menjalankan tugas kueri
Izin tambahan seperti bigquery.tables.getData
mungkin diperlukan untuk
mengakses data yang Anda minta.
Peran IAM yang telah ditetapkan berikut mencakup izin bigquery.tables.create
dan bigquery.tables.updateData
:
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
Peran IAM yang telah ditetapkan berikut mencakup izin bigquery.jobs.create
:
bigquery.user
bigquery.jobUser
bigquery.admin
Selain itu, jika pengguna memiliki izin bigquery.datasets.create
, saat
pengguna tersebut membuat set data, dia diberi akses bigquery.dataOwner
.
Akses bigquery.dataOwner
memberi pengguna kemampuan untuk membuat dan
memperbarui tabel dalam set data.
Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, lihat Peran dan izin yang telah ditetapkan.
Menulis hasil kueri ke tabel permanen
Saat menulis hasil kueri ke tabel permanen, Anda dapat membuat tabel baru, menambahkan hasil ke tabel yang sudah ada, atau menimpa tabel yang sudah ada.
Menulis hasil kueri
Gunakan prosedur berikut untuk menulis hasil kueri Anda ke tabel permanen. Untuk membantu mengontrol biaya, Anda dapat melihat pratinjau data sebelum menjalankan kueri.
Konsol
Buka halaman BigQuery di konsol Google Cloud.
Di panel Explorer, luaskan project Anda dan pilih set data.
Masukkan kueri SQL yang valid.
Klik Lainnya lalu pilih Setelan kueri.
Pilih opsi Tetapkan tabel tujuan untuk hasil kueri.
Di bagian Tujuan, pilih Set data tempat Anda ingin membuat tabel, lalu pilih ID Tabel.
Di bagian Preferensi tulis tabel tujuan, pilih salah satu dari berikut ini:
- Tulis jika kosong — Menulis hasil kueri ke tabel hanya jika tabel kosong.
- Append to table — Menambahkan hasil kueri ke tabel yang ada.
- Overwrite table — Menimpa tabel yang ada dengan nama yang sama menggunakan hasil kueri.
Opsional: Untuk Lokasi data, pilih lokasi Anda.
Untuk memperbarui setelan kueri, klik Simpan.
Klik Jalankan. Ini akan membuat tugas kueri yang menulis hasil kueri ke tabel yang Anda tentukan.
Atau, jika lupa menentukan tabel tujuan sebelum menjalankan kueri, Anda dapat menyalin tabel hasil yang di-cache ke tabel permanen dengan mengklik tombol Simpan Hasil di atas editor.
SQL
Contoh berikut menggunakan
pernyataan CREATE TABLE
untuk membuat tabel trips
dari data di tabel
bikeshare_trips
publik:
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE TABLE mydataset.trips AS ( SELECT bike_id, start_time, duration_minutes FROM bigquery-public-data.austin_bikeshare.bikeshare_trips );
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
Untuk mengetahui informasi selengkapnya, lihat Membuat tabel baru dari tabel yang ada.
bq
-
Di konsol Google Cloud, aktifkan Cloud Shell.
Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.
Masukkan perintah
bq query
dan tentukan flag--destination_table
untuk membuat tabel permanen berdasarkan hasil kueri. Tentukan flaguse_legacy_sql=false
untuk menggunakan sintaksis GoogleSQL. Untuk menulis hasil kueri ke tabel yang tidak ada dalam project default Anda, tambahkan ID project ke nama set data dalam format berikut:project_id:dataset
.Opsional: Berikan flag
--location
dan tetapkan nilainya ke lokasi Anda.Untuk mengontrol disposisi tulis untuk tabel tujuan yang ada, tentukan salah satu flag opsional berikut:
--append_table
: Jika tabel tujuan ada, hasil kueri akan ditambahkan ke tabel tujuan tersebut.--replace
: Jika ada, tabel tujuan akan ditimpa dengan hasil kueri.bq --location=location query \ --destination_table project_id:dataset.table \ --use_legacy_sql=false 'query'
Ganti kode berikut:
location
adalah nama lokasi yang digunakan untuk memproses kueri. Flag--location
bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag keasia-northeast1
. Anda dapat menetapkan nilai default untuk lokasi menggunakan file.bigqueryrc
.project_id
adalah project ID Anda.dataset
adalah nama set data yang berisi tabel tempat Anda menulis hasil kueri.table
adalah nama tabel tempat Anda menulis hasil kueri.query
adalah kueri dalam sintaksis GoogleSQL.Jika flag disposisi tulis tidak ditentukan, perilaku default-nya adalah menulis hasil ke tabel hanya jika kosong. Jika tabel ada dan tidak kosong, error berikut akan ditampilkan:
BigQuery error in query operation: Error processing job project_id:bqjob_123abc456789_00000e1234f_1: Already Exists: Table project_id:dataset.table
.Contoh:
Masukkan perintah berikut untuk menulis hasil kueri ke tabel tujuan bernama
mytable
dimydataset
. Set data ada dalam project default Anda. Karena tidak ada flag disposisi tulis yang ditentukan dalam perintah, tabel harus baru atau kosong. Jika tidak, errorAlready exists
akan ditampilkan. Kueri ini mengambil data dari set data publik Data Nama AS.bq query \ --destination_table mydataset.mytable \ --use_legacy_sql=false \ 'SELECT name, number FROM `bigquery-public-data`.usa_names.usa_1910_current WHERE gender = "M" ORDER BY number DESC'
Masukkan perintah berikut untuk menggunakan hasil kueri guna menimpa tabel tujuan bernama
mytable
dimydataset
. Set data berada dalam project default Anda. Perintah ini menggunakan flag--replace
untuk menimpa tabel tujuan.bq query \ --destination_table mydataset.mytable \ --replace \ --use_legacy_sql=false \ 'SELECT name, number FROM `bigquery-public-data`.usa_names.usa_1910_current WHERE gender = "M" ORDER BY number DESC'
Masukkan perintah berikut untuk menambahkan hasil kueri ke tabel tujuan bernama
mytable
dimydataset
. Set data berada dimy-other-project
, bukan di project default Anda. Perintah ini menggunakan flag--append_table
untuk menambahkan hasil kueri ke tabel tujuan.bq query \ --append_table \ --use_legacy_sql=false \ --destination_table my-other-project:mydataset.mytable \ 'SELECT name, number FROM `bigquery-public-data`.usa_names.usa_1910_current WHERE gender = "M" ORDER BY number DESC'
Output untuk setiap contoh ini terlihat seperti berikut. Agar mudah dibaca, beberapa output akan terpotong.
Waiting on bqjob_r123abc456_000001234567_1 ... (2s) Current status: DONE +---------+--------+ | name | number | +---------+--------+ | Robert | 10021 | | John | 9636 | | Robert | 9297 | | ... | +---------+--------+
API
Untuk menyimpan hasil kueri ke tabel permanen, panggil metode
jobs.insert
, konfigurasi tugas query
, dan sertakan nilai untuk propertidestinationTable
. Untuk mengontrol disposisi tulis untuk tabel tujuan yang ada, konfigurasi properti writeDisposition
.
Guna mengontrol lokasi pemrosesan untuk tugas kueri, tentukan properti location
di bagian jobReference
pada resource tugas.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Untuk menyimpan hasil kueri ke tabel permanen, tetapkan tabel tujuan ke TableId yang diinginkan di QueryJobConfiguration.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Untuk menyimpan hasil kueri ke tabel permanen, buat QueryJobConfig dan tetapkan tujuan ke TableReference yang diinginkan. Teruskan konfigurasi tugas ke metode kueri.Menulis hasil kueri yang besar
Biasanya, kueri memiliki ukuran respons maksimum. Jika berencana menjalankan kueri yang mungkin menampilkan hasil lebih besar, Anda dapat melakukan salah satu hal berikut:
- Di GoogleSQL, tentukan tabel tujuan untuk hasil kueri.
- Di SQL lama, tentukan tabel tujuan dan tetapkan opsi
allowLargeResults
.
Saat menentukan tabel tujuan untuk hasil kueri yang besar, Anda dikenai biaya untuk menyimpan data.
Batasan
Dalam legacy SQL, penulisan hasil yang besar tunduk pada batasan berikut:
- Anda harus menentukan tabel tujuan.
- Anda tidak dapat menentukan klausa
ORDER BY
,TOP
, atauLIMIT
tingkat teratas. Tindakan tersebut akan meniadakan manfaat penggunaanallowLargeResults
, karena output kueri tidak lagi dapat dihitung secara paralel. - Fungsi jendela dapat menampilkan
hasil kueri yang besar hanya jika digunakan bersama dengan klausa
PARTITION BY
.
Menulis hasil besar menggunakan legacy SQL
Untuk menulis set hasil yang besar menggunakan legacy SQL:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Klik Compose New Query.
Masukkan kueri SQL yang valid di area teks Editor kueri. Gunakan awalan
#legacySQL
atau pastikan Anda telah mencentang Gunakan SQL Lama di setelan kueri.Klik Lainnya, lalu pilih Setelan kueri.
Untuk Tujuan, centang Tetapkan tabel tujuan untuk hasil kueri.
Untuk Set data, pilih set data yang akan menyimpan tabel.
Di kolom ID Tabel, masukkan nama tabel.
Jika menulis hasil besar yang ditetapkan ke tabel yang sudah ada, Anda dapat menggunakan opsi Preferensi penulisan tabel tujuan untuk mengontrol disposisi tulis tabel tujuan:
- Tulis jika kosong: Menulis hasil kueri ke tabel hanya jika tabel kosong.
- Tambahkan ke tabel: Menambahkan hasil kueri ke tabel yang ada.
- Timpa tabel: Menimpa tabel yang ada dengan nama yang sama menggunakan hasil kueri.
Untuk Hasil Ukuran, centang Izinkan hasil besar (tanpa batas ukuran).
Opsional: Untuk Lokasi data, pilih lokasi data Anda.
Klik Simpan untuk mengubah setelan kueri.
Klik Jalankan. Tindakan ini akan membuat tugas kueri yang menulis hasil besar yang ditetapkan ke tabel yang Anda tentukan.
bq
Gunakan tanda --allow_large_results
dengan tanda --destination_table
untuk
membuat tabel tujuan untuk menyimpan kumpulan hasil besar. Karena
opsi --allow_large_results
hanya berlaku untuk SQL lama, Anda juga harus
menentukan flag --use_legacy_sql=true
. Untuk menulis hasil kueri ke tabel yang tidak ada dalam project default Anda, tambahkan project ID ke nama set data dalam format berikut: PROJECT_ID:DATASET
.
Berikan flag --location
dan tetapkan nilai ke lokasi Anda.
Untuk mengontrol disposisi tulis untuk tabel tujuan yang ada, tentukan salah satu flag opsional berikut:
--append_table
: Jika tabel tujuan ada, hasil kueri akan ditambahkan ke tabel tujuan tersebut.--replace
: Jika ada, tabel tujuan akan ditimpa dengan hasil kueri.
bq --location=location query \ --destination_table PROJECT_ID:DATASET.TABLE \ --use_legacy_sql=true \ --allow_large_results "QUERY"
Ganti kode berikut:
LOCATION
adalah nama lokasi yang digunakan untuk memproses kueri. Flag--location
bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag keasia-northeast1
. Anda dapat menetapkan nilai default untuk lokasi menggunakan file.bigqueryrc
.PROJECT_ID
adalah project ID Anda.DATASET
adalah nama set data yang berisi tabel tempat Anda menulis hasil kueri.TABLE
adalah nama tabel tempat Anda menulis hasil kueri.QUERY
adalah kueri dalam sintaksis legacy SQL.
Contoh:
Masukkan perintah berikut untuk menulis hasil kueri yang besar ke tabel tujuan bernama mytable
di mydataset
. Set data berada dalam project
default Anda. Karena tidak ada flag disposisi tulis yang ditentukan dalam perintah, tabel harus baru atau kosong. Jika tidak, error Already exists
akan ditampilkan. Kueri tersebut mengambil data dari set data publik Data Nama USA.
Kueri ini hanya digunakan sebagai contoh. Kumpulan hasil yang ditampilkan tidak melebihi ukuran respons maksimum.
bq query \
--destination_table mydataset.mytable \
--use_legacy_sql=true \
--allow_large_results \
"SELECT
name,
number
FROM
[bigquery-public-data:usa_names.usa_1910_current]
WHERE
gender = 'M'
ORDER BY
number DESC"
Masukkan perintah berikut untuk menggunakan hasil kueri berukuran besar guna menimpa
tabel tujuan bernama mytable
di mydataset
. Set data berada di myotherproject
, bukan
di project default Anda. Perintah ini menggunakan flag --replace
untuk menimpa tabel tujuan.
bq query \
--destination_table mydataset.mytable \
--replace \
--use_legacy_sql=true \
--allow_large_results \
"SELECT
name,
number
FROM
[bigquery-public-data:usa_names.usa_1910_current]
WHERE
gender = 'M'
ORDER BY
number DESC"
Masukkan perintah berikut untuk menambahkan hasil kueri berukuran besar ke tabel tujuan bernama mytable
di mydataset
. Set data berada di myotherproject
,
bukan project default Anda. Perintah ini menggunakan flag --append_table
untuk menambahkan hasil kueri ke tabel tujuan.
bq query \
--destination_table myotherproject:mydataset.mytable \
--append_table \
--use_legacy_sql=true \
--allow_large_results \
"SELECT
name,
number
FROM
[bigquery-public-data:usa_names.usa_1910_current]
WHERE
gender = 'M'
ORDER BY
number DESC"
API
Untuk menulis hasil yang besar ke tabel tujuan, panggil
jobs.insert
tradisional, mengonfigurasiquery
tugas, dan tetapkanallowLargeResults
properti kepadatrue
singkat ini.
Tentukan tabel tujuan menggunakan properti destinationTable
. Untuk mengontrol disposisi tulis untuk tabel tujuan yang ada, konfigurasi properti writeDisposition
.
Tentukan lokasi Anda di
properti location
di bagian jobReference
di resource tugas.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Untuk mengaktifkan hasil besar, tetapkan memungkinkan hasil yang besar ke true
dan tetapkan tabel tujuan ke situs
ID Tabel dalam
QueryJobConfiguration.TableId
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Mendownload dan menyimpan hasil kueri dari konsol Google Cloud
Setelah menjalankan kueri SQL menggunakan konsol Google Cloud, Anda dapat menyimpan hasilnya ke lokasi lain. Anda dapat menggunakan konsol Google Cloud untuk mendownload hasil kueri ke file lokal, Google Spreadsheet, atau Google Drive. Jika Anda pertama kali mengurutkan hasil kueri berdasarkan kolom, urutan tersebut akan dipertahankan dalam data yang didownload. Menyimpan hasil ke file lokal, Google Spreadsheet, atau Google Drive tidak didukung oleh alat command line bq atau API.
Batasan
Mendownload dan menyimpan hasil kueri memiliki batasan berikut:
- Anda dapat mendownload hasil kueri secara lokal dalam format CSV atau format JSON yang dibatasi baris baru.
- Anda tidak dapat menyimpan hasil kueri yang berisi data bertingkat dan berulang ke Google Spreadsheet.
- Untuk menyimpan hasil kueri ke Google Drive menggunakan Google Cloud Console, hasil yang ditetapkan harus berukuran 1 GB atau kurang. Jika hasil Anda lebih besar, Anda dapat menyimpannya ke tabel.
- Saat menyimpan hasil kueri ke file CSV lokal, ukuran download maksimum adalah
10 MB.
Ukuran download maksimum didasarkan pada ukuran setiap baris yang ditampilkan dalam respons metode
tabledata.list
, dan dapat bervariasi berdasarkan skema hasil kueri. Akibatnya, ukuran file CSV yang didownload dapat bervariasi, dan mungkin kurang dari batas ukuran download maksimum. - Anda hanya dapat menyimpan hasil kueri ke Google Drive dalam format CSV atau format JSON yang dibatasi baris baru.
Langkah berikutnya
- Pelajari cara mengekspor tabel ke file JSON secara terprogram.
- Pelajari kuota untuk tugas kueri.
- Pelajari harga penyimpanan BigQuery.