Menjadwalkan kueri

Halaman ini menjelaskan cara menjadwalkan kueri berulang di BigQuery.

Anda dapat menjadwalkan kueri untuk dijalankan secara berulang. Kueri terjadwal harus ditulis dalam GoogleSQL, yang dapat mencakup pernyataan bahasa definisi data (DDL) dan bahasa manipulasi data (DML). Anda dapat mengatur hasil kueri menurut tanggal dan waktu dengan membuat parameter string kueri dan tabel tujuan.

Saat Anda membuat atau memperbarui jadwal kueri, waktu yang dijadwalkan untuk kueri akan dikonversi dari waktu lokal Anda ke UTC. UTC tidak terpengaruh oleh waktu musim panas.

Sebelum memulai

Izin yang diperlukan

Untuk menjadwalkan kueri, Anda memerlukan izin IAM berikut:

  • Untuk membuat transfer, Anda harus memiliki izin bigquery.transfers.update dan bigquery.datasets.get, atau izin bigquery.jobs.create, bigquery.transfers.get, dan bigquery.datasets.get.

  • Untuk menjalankan kueri terjadwal, Anda harus memiliki:

    • Izin bigquery.datasets.get pada set data target
    • bigquery.jobs.create

Untuk mengubah atau menghapus kueri terjadwal, Anda memerlukan salah satu izin IAM berikut:

  • bigquery.transfers.update
  • bigquery.jobs.create dan kepemilikan atas kueri terjadwal

Peran IAM roles/bigquery.admin yang telah ditetapkan mencakup izin yang Anda perlukan untuk menjadwalkan atau mengubah kueri.

Untuk mengetahui informasi selengkapnya tentang peran IAM di BigQuery, lihat Peran dan izin yang telah ditentukan sebelumnya.

Untuk membuat atau memperbarui kueri terjadwal yang dijalankan oleh akun layanan, Anda harus memiliki akses ke akun layanan tersebut. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran akun layanan kepada pengguna, lihat Peran pengguna Akun Layanan. Untuk memilih akun layanan di UI kueri terjadwal Google Cloud Console, Anda memerlukan izin IAM berikut:

  • iam.serviceAccounts.list

Opsi konfigurasi

String kueri

String kueri harus valid dan ditulis di GoogleSQL. Setiap kueri terjadwal yang dijalankan dapat menerima parameter kueri berikut.

Untuk menguji string kueri secara manual dengan parameter @run_time dan @run_date sebelum menjadwalkan kueri, gunakan alat command line bq.

Parameter yang tersedia

Parameter Jenis GoogleSQL Nilai
@run_time TIMESTAMP Direpresentasikan dalam waktu UTC. Untuk kueri yang dijadwalkan secara rutin, run_time mewakili waktu eksekusi yang diinginkan. Misalnya, jika kueri terjadwal ditetapkan ke "setiap 24 jam", perbedaan run_time antara dua kueri berturut-turut adalah 24 jam, meskipun waktu eksekusi yang sebenarnya mungkin sedikit berbeda.
@run_date DATE Mewakili tanggal kalender logis.

Contoh

Parameter @run_time adalah bagian dari string kueri dalam contoh ini, yang mengkueri set data publik bernama hacker_news.stories.

SELECT @run_time AS time,
  title,
  author,
  text
FROM `bigquery-public-data.hacker_news.stories`
LIMIT
  1000

Tabel tujuan

Jika tabel tujuan untuk hasil Anda tidak ada saat Anda menyiapkan kueri terjadwal, BigQuery akan mencoba membuat tabel untuk Anda.

Jika Anda menggunakan kueri DDL atau DML, maka di konsol Google Cloud, pilih Processing location atau region. Lokasi pemrosesan diperlukan untuk kueri DDL atau DML yang membuat tabel tujuan.

Jika tabel tujuan sudah ada dan Anda menggunakan preferensi tulis WRITE_APPEND, BigQuery akan menambahkan data ke tabel tujuan dan mencoba memetakan skema. BigQuery secara otomatis mengizinkan penambahan dan pengurutan ulang kolom, serta mengakomodasi kolom opsional yang tidak ada. Jika skema tabel berubah begitu banyak antara satu operasi dan operasi berikutnya sehingga BigQuery tidak dapat memproses perubahan tersebut secara otomatis, kueri terjadwal akan gagal.

Kueri dapat mereferensikan tabel dari berbagai project dan set data yang berbeda. Saat mengonfigurasi kueri terjadwal, Anda tidak perlu menyertakan set data tujuan di nama tabel. Anda menentukan set data tujuan secara terpisah.

Set data dan tabel tujuan untuk kueri terjadwal harus berada dalam project yang sama dengan kueri terjadwal.

Preferensi penulisan

Preferensi penulisan yang Anda pilih menentukan cara hasil kueri ditulis ke tabel tujuan yang ada.

  • WRITE_TRUNCATE: Jika tabel itu ada, BigQuery akan menimpa data tabel.
  • WRITE_APPEND: Jika tabel itu ada, BigQuery akan menambahkan data ke tabel tersebut.

Jika menggunakan kueri DDL atau DML, Anda tidak dapat menggunakan opsi preferensi tulis.

Pembuatan, pemotongan, atau penambahan tabel tujuan hanya terjadi jika BigQuery berhasil menyelesaikan kueri. Tindakan pembuatan, pemotongan, atau penambahan terjadi sebagai satu update atomik setelah tugas selesai.

Pengelompokan

Kueri terjadwal hanya dapat membuat pengelompokan pada tabel baru jika tabel dibuat dengan pernyataan CREATE TABLE AS SELECT DDL. Lihat Membuat tabel yang dikelompokkan dari hasil kueri di halaman Menggunakan pernyataan bahasa definisi data.

Opsi partisi

Kueri terjadwal dapat membuat tabel tujuan yang dipartisi atau tidak dipartisi. Partisi tersedia di konsol Google Cloud, alat command line bq, dan metode penyiapan API. Jika Anda menggunakan kueri DDL atau DML dengan partisi, kosongkan kolom Destination table partitioning.

Anda dapat menggunakan jenis partisi tabel berikut di BigQuery:

Untuk membuat tabel yang dipartisi menggunakan kueri terjadwal di Google Cloud Console, gunakan opsi berikut:

  • Untuk menggunakan partisi rentang bilangan bulat, kosongkan kolom Destination table partitioning.

  • Untuk menggunakan partisi kolom unit waktu, tentukan nama kolom di kolom Destination table partitioning saat menyiapkan kueri terjadwal.

  • Untuk menggunakan partisi waktu penyerapan, kosongkan kolom Destination table partitioning dan tunjukkan partisi tanggal di nama tabel tujuan. Contoh, mytable${run_date}. Untuk informasi selengkapnya, lihat Sintaksis template parameter.

Parameter yang tersedia

Saat menyiapkan kueri terjadwal, Anda dapat menentukan cara mempartisi tabel tujuan dengan parameter runtime.

Parameter Jenis Template Nilai
run_time Stempel waktu terformat Dalam waktu UTC, sesuai jadwal. Untuk kueri yang dijadwalkan secara rutin, run_time mewakili waktu eksekusi yang diinginkan. Misalnya, jika kueri terjadwal disetel ke "setiap 24 jam", perbedaan run_time antara dua kueri berturut-turut adalah 24 jam, meskipun waktu eksekusi sebenarnya mungkin sedikit berbeda.

Lihat TransferRun.runTime.
run_date String tanggal Tanggal parameter run_time dalam format berikut: %Y-%m-%d; misalnya, 2018-01-01. Format ini kompatibel dengan tabel berpartisi berdasarkan waktu penyerapan.

Sistem template

Kueri terjadwal mendukung parameter runtime dalam nama tabel tujuan dengan sintaksis template.

Sintaksis template parameter

Sintaksis template mendukung template string dasar dan offset waktu. Parameter direferensikan dalam format berikut:

  • {run_date}
  • {run_time[+\-offset]|"time_format"}
Parameter Tujuan
run_date Parameter ini diganti dengan tanggal dalam format YYYYMMDD.
run_time Parameter ini mendukung properti berikut:


offset
Selisih waktu dinyatakan dalam jam (j), menit (m), dan detik (d) sesuai dengan urutan tersebut.
Hari (d) tidak didukung.
Desimal diizinkan, misalnya: 1.5h.

time_format
String pemformatan. Parameter pemformatan yang paling umum adalah tahun (%Y), bulan (%m), dan hari (%d).
Untuk tabel yang dipartisi, YYYYMMDD adalah akhiran yang diperlukan - ini setara dengan "%Y%m%d".

Baca selengkapnya tentang memformat elemen tanggal dan waktu.

Catatan penggunaan:
  • Tidak ada spasi kosong yang diizinkan antara run_time, selisih, dan format waktu.
  • Untuk menyertakan tanda kurung kurawal literal dalam string, Anda dapat meng-escape tanda kurung tersebut sebagai '\{' and '\}'.
  • Untuk menyertakan tanda kutip literal atau batang vertikal dalam time_format, seperti "YYYY|MM|DD", Anda dapat meng-escape karakter tersebut dalam string format seperti: '\"' atau '\|'.

Contoh template parameter

Contoh ini menunjukkan cara menentukan nama tabel tujuan dengan format waktu yang berbeda-beda, dan mengimbangi waktu proses.
run_time (UTC) Parameter dengan template Nama tabel tujuan output
15-02-2018 00:00:00 mytable mytable
15-02-2018 00:00:00 mytable_{run_time|"%Y%m%d"} mytable_20180215
15-02-2018 00:00:00 mytable_{run_time+25h|"%Y%m%d"} mytable_20180216
15-02-2018 00:00:00 mytable_{run_time-1h|"%Y%m%d"} mytable_20180214
15-02-2018 00:00:00 mytable_{run_time+1.5h|"%Y%m%d%H"}
atau
mytable_{run_time+90m|"%Y%m%d%H"}
mytable_2018021501
2018-02-15 00:00:00 {run_time+97s|"%Y%m%d"}_mytable_{run_time+97s|"%H%M%S"} 20180215_mytable_000137

Menggunakan akun layanan

Anda dapat menyiapkan kueri terjadwal untuk mengautentikasi sebagai akun layanan. Akun layanan adalah Akun Google yang terkait dengan project Google Cloud Anda. Akun layanan dapat menjalankan tugas, seperti kueri terjadwal atau pipeline batch processing, dengan kredensial layanannya sendiri, bukan kredensial pengguna akhir.

Baca selengkapnya tentang cara melakukan autentikasi dengan akun layanan di bagian Pengantar autentikasi.

Menentukan kunci enkripsi dengan kueri terjadwal

Anda dapat menentukan kunci enkripsi yang dikelola pelanggan (CMEK) guna mengenkripsi data untuk proses transfer. Anda dapat menggunakan CMEK untuk mendukung transfer dari kueri terjadwal.

Saat Anda menentukan CMEK dengan transfer, BigQuery Data Transfer Service akan menerapkan CMEK ke cache perantara data yang diserap dalam disk, sehingga seluruh alur kerja transfer data mematuhi CMEK.

Anda tidak dapat memperbarui transfer yang sudah ada untuk menambahkan CMEK jika transfer tersebut awalnya tidak dibuat dengan CMEK. Misalnya, Anda tidak dapat mengubah tabel tujuan yang awalnya dienkripsi secara default menjadi kini dienkripsi dengan CMEK. Sebaliknya, Anda juga tidak dapat mengubah tabel tujuan yang dienkripsi CMEK agar memiliki jenis enkripsi yang berbeda.

Anda dapat memperbarui CMEK untuk transfer jika konfigurasi transfer awalnya dibuat dengan enkripsi CMEK. Saat Anda memperbarui CMEK untuk konfigurasi transfer, BigQuery Data Transfer Service akan menyebarkan CMEK ke tabel tujuan pada proses transfer berikutnya. Di sini, BigQuery Data Transfer Service akan mengganti CMEK yang sudah usang dengan CMEK baru selama proses transfer. Untuk informasi selengkapnya, lihat Memperbarui transfer.

Anda juga dapat menggunakan kunci default project. Saat Anda menentukan kunci default project dengan transfer, BigQuery Data Transfer Service akan menggunakan kunci default project sebagai kunci default untuk setiap konfigurasi transfer baru.

Menyiapkan kueri terjadwal

Untuk deskripsi sintaksis jadwal, lihat Memformat jadwal. Untuk mengetahui detail tentang sintaksis jadwal, lihat Referensi: TransferConfig.

Konsol

  1. Buka halaman BigQuery di konsol Google Cloud.

    Buka BigQuery

  2. Jalankan kueri yang Anda inginkan. Jika sudah puas dengan hasilnya, klik Schedule.

    Buat kueri terjadwal baru di konsol Google Cloud.

  3. Opsi kueri terjadwal akan terbuka di panel Newschedule query.

    Panel kueri terjadwal baru.

  4. Di panel New schedule query:

    • Untuk Name for the scheduled query, masukkan nama seperti My scheduled query. Nama kueri terjadwal dapat berupa nilai apa pun yang dapat Anda identifikasi nanti jika perlu mengubah kueri.
    • Opsional: Secara default, kueri dijadwalkan untuk berjalan Harian. Anda dapat mengubah jadwal default dengan memilih opsi dari menu drop-down Repeats:

      • Untuk menentukan frekuensi kustom, pilih Custom, lalu masukkan spesifikasi waktu Cron di kolom Custom schedule—misalnya, every mon 23:30 atau every 6 hours. Untuk mengetahui detail tentang jadwal yang valid termasuk interval kustom, lihat kolom schedule di bagian Referensi: TransferConfig.

        Memformat kueri terjadwal kustom.

      • Untuk mengubah waktu mulai, pilih opsi Start at set time, masukkan tanggal dan waktu mulai yang diinginkan.

      • Untuk menentukan waktu berakhir, pilih opsi Schedule end time, masukkan tanggal dan waktu akhir yang diinginkan.

      • Untuk menyimpan kueri tanpa jadwal agar Anda dapat menjalankannya secara on demand, pilih On-demand di menu Repeats.

  5. Untuk kueri SELECT GoogleSQL, pilih opsi Set a destination table for query results, lalu berikan informasi berikut tentang set data tujuan.

    • Untuk Dataset name, pilih set data tujuan yang sesuai.
    • Untuk Table name, masukkan nama tabel tujuan.
    • Untuk Ddestination table write preference, pilih Append to table untuk menambahkan data ke tabel atau Overwrite table untuk menimpa tabel tujuan.

      Tujuan kueri terjadwal baru.

  6. Pilih Jenis Lokasi.

    • Jika telah mengaktifkan tabel tujuan untuk hasil kueri, Anda dapat memilih Automatic location selection untuk otomatis memilih lokasi tempat tabel tujuan berada.

    • Jika tidak, pilih lokasi tempat data yang dikueri berada.

  7. Advanced options

    • Opsional: CMEK Jika menggunakan kunci enkripsi yang dikelola pelanggan, Anda dapat memilih Customer-managed key di bagian Advanced options. Daftar CMEK yang tersedia akan muncul dan dapat Anda pilih. Untuk mengetahui informasi cara kerja kunci enkripsi yang dikelola pelanggan (CMEK) dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan kueri terjadwal.

    • Lakukan autentikasi sebagai akun layanan. Jika memiliki satu atau beberapa akun layanan yang terkait dengan project Google Cloud, Anda dapat mengaitkan akun layanan dengan kueri terjadwal, bukan menggunakan kredensial pengguna. Di bagian Scheduled query credential, klik menu untuk melihat daftar akun layanan yang tersedia. Akun layanan diperlukan jika Anda login sebagai identitas gabungan.

      Opsi lanjutan kueri terjadwal.

  8. Konfigurasi tambahan:

    • Opsional: Centang Send email notifications untuk mengizinkan pengiriman notifikasi email tentang kegagalan operasi transfer.

    • Opsional: Untuk Pub/Sub topic, masukkan nama topik Pub/Sub Anda, misalnya: projects/myproject/topics/mytopic.

      DDL dan DML kueri terjadwal baru.

  9. Klik Simpan.

bq

Opsi 1: Gunakan perintah bq query.

Untuk membuat kueri terjadwal, tambahkan opsi destination_table (atau target_dataset), --schedule, dan --display_name ke perintah bq query Anda.

bq query \
--display_name=name \
--destination_table=table \
--schedule=interval

Ganti kode berikut:

  • name. Nama tampilan untuk kueri terjadwal. Nama tampilan dapat berupa nilai apa pun yang dapat diidentifikasi nanti jika Anda perlu mengubah kueri.
  • table. Tabel tujuan untuk hasil kueri.
    • --target_dataset adalah cara alternatif untuk memberi nama set data target untuk hasil kueri, saat digunakan dengan kueri DDL dan DML.
    • Gunakan salah satu dari --destination_table atau --target_dataset, tetapi jangan keduanya.
  • interval. Saat digunakan dengan bq query, akan membuat kueri menjadi kueri terjadwal berulang. Jadwal untuk seberapa sering kueri harus dijalankan. Untuk mengetahui detail tentang jadwal yang valid termasuk interval kustom, lihat kolom schedule di bagian Referensi: TransferConfig. Contoh:
    • --schedule='every 24 hours'
    • --schedule='every 3 hours'
    • --schedule='every monday 09:00'
    • --schedule='1st sunday of sep,oct,nov 00:00'

Flag opsional:

  • --project_id adalah project ID Anda. Jika --project_id tidak ditentukan, maka project default akan digunakan.

  • --replace menimpa tabel tujuan dengan hasil kueri setelah setiap kueri terjadwal dijalankan. Semua data yang ada akan dihapus. Untuk tabel yang tidak dipartisi, skema juga akan dihapus.

  • --append_table menambahkan hasil ke tabel tujuan.

  • Untuk kueri DDL dan DML, Anda juga dapat memberikan flag --location untuk menentukan region tertentu untuk pemrosesan. Jika --location tidak ditentukan, lokasi Google Cloud terdekat akan digunakan.

Misalnya, perintah berikut membuat kueri terjadwal bernama My Scheduled Query menggunakan kueri sederhana SELECT 1 from mydataset.test. Tabel tujuan adalah mytable dalam set data mydataset. Kueri terjadwal dibuat di project default:

    bq query \
    --use_legacy_sql=false \
    --destination_table=mydataset.mytable \
    --display_name='My Scheduled Query' \
    --schedule='every 24 hours' \
    --replace=true \
    'SELECT
      1
    FROM
      mydataset.test'


Opsi 2: Gunakan perintah bq mk.

Kueri terjadwal adalah sejenis transfer. Untuk menjadwalkan kueri, Anda dapat menggunakan alat command line bq untuk membuat konfigurasi transfer.

Kueri harus dalam dialek StandardSQL agar dapat dijadwalkan.

Masukkan perintah bq mk dan berikan flag yang diperlukan berikut ini:

  • --transfer_config
  • --data_source
  • --target_dataset (opsional untuk kueri DDL dan DML)
  • --display_name
  • --params

Flag opsional:

  • --project_id adalah project ID Anda. Jika --project_id tidak ditentukan, maka project default akan digunakan.

  • --schedule adalah seberapa sering Anda ingin kueri dijalankan. Jika --schedule tidak ditentukan, defaultnya adalah 'setiap 24 jam' berdasarkan waktu pembuatan.

  • Untuk kueri DDL dan DML, Anda juga dapat memberikan flag --location untuk menentukan region tertentu untuk pemrosesan. Jika --location tidak ditentukan, lokasi Google Cloud terdekat akan digunakan.

  • --service_account_name digunakan untuk mengautentikasi kueri terjadwal dengan akun layanan, bukan akun pengguna perorangan Anda.

  • --destination_kms_key menentukan ID resource kunci untuk kunci jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk transfer ini. Untuk informasi tentang cara kerja CMEK dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan kueri terjadwal.

bq mk \
--transfer_config \
--target_dataset=dataset \
--display_name=name \
--params='parameters' \
--data_source=data_source

Ganti kode berikut:

  • dataset. Set data target untuk konfigurasi transfer.
    • Parameter ini bersifat opsional untuk kueri DDL dan DML. Kolom ini wajib diisi untuk semua kueri lainnya.
  • name. Nama tampilan untuk konfigurasi transfer. Nama tampilan dapat berupa nilai apa pun yang dapat diidentifikasi nanti jika Anda perlu mengubah kueri.
  • parameters. Berisi parameter untuk konfigurasi transfer yang dibuat dalam format JSON. Sebagai contoh: --params='{"param":"param_value"}'.
    • Untuk kueri terjadwal, Anda harus memberikan parameter query.
    • Parameter destination_table_name_template adalah nama tabel tujuan Anda.
      • Parameter ini bersifat opsional untuk kueri DDL dan DML. Kolom ini wajib diisi untuk semua kueri lainnya.
    • Untuk parameter write_disposition, Anda dapat memilih WRITE_TRUNCATE untuk memotong (menimpa) tabel tujuan atau WRITE_APPEND untuk menambahkan hasil kueri ke tabel tujuan.
      • Parameter ini bersifat opsional untuk kueri DDL dan DML. Kolom ini wajib diisi untuk semua kueri lainnya.
  • data_source. Sumber data: scheduled_query.
  • Opsional: Flag --service_account_name digunakan untuk mengautentikasi dengan akun layanan, bukan akun pengguna perorangan.
  • Opsional: --destination_kms_key menentukan ID resource kunci untuk kunci Cloud KMS—misalnya, projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name.

Misalnya, perintah berikut membuat konfigurasi transfer kueri terjadwal bernama My Scheduled Query menggunakan kueri sederhana SELECT 1 from mydataset.test. Tabel tujuan mytable akan terpotong untuk setiap penulisan, dan set data target adalah mydataset. Kueri terjadwal dibuat dalam project default, dan diautentikasi sebagai akun layanan:

bq mk \
--transfer_config \
--target_dataset=mydataset \
--display_name='My Scheduled Query' \
--params='{"query":"SELECT 1 from mydataset.test","destination_table_name_template":"mytable","write_disposition":"WRITE_TRUNCATE"}' \
--data_source=scheduled_query \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com

Saat pertama kali menjalankan perintah, Anda akan menerima pesan seperti berikut:

[URL omitted] Please copy and paste the above URL into your web browser and follow the instructions to retrieve an authentication code.

Ikuti petunjuk dalam pesan, lalu tempel kode autentikasi pada command line.

API

Gunakan metode projects.locations.transferConfigs.create dan berikan instance resource TransferConfig.

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create a scheduled query
public class CreateScheduledQuery {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String datasetId = "MY_DATASET_ID";
    final String query =
        "SELECT CURRENT_TIMESTAMP() as current_time, @run_time as intended_run_time, "
            + "@run_date as intended_run_date, 17 as some_integer";
    Map<String, Value> params = new HashMap<>();
    params.put("query", Value.newBuilder().setStringValue(query).build());
    params.put(
        "destination_table_name_template",
        Value.newBuilder().setStringValue("my_destination_table_{run_date}").build());
    params.put("write_disposition", Value.newBuilder().setStringValue("WRITE_TRUNCATE").build());
    params.put("partitioning_field", Value.newBuilder().build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Scheduled Query Name")
            .setDataSourceId("scheduled_query")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createScheduledQuery(projectId, transferConfig);
  }

  public static void createScheduledQuery(String projectId, TransferConfig transferConfig)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println("\nScheduled query created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("\nScheduled query was not created." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

# The project where the query job runs is the same as the project
# containing the destination dataset.
project_id = "your-project-id"
dataset_id = "your_dataset_id"

# This service account will be used to execute the scheduled queries. Omit
# this request parameter to run the query as the user with the credentials
# associated with this client.
service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"

# Use standard SQL syntax for the query.
query_string = """
SELECT
  CURRENT_TIMESTAMP() as current_time,
  @run_time as intended_run_time,
  @run_date as intended_run_date,
  17 as some_integer
"""

parent = transfer_client.common_project_path(project_id)

transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=dataset_id,
    display_name="Your Scheduled Query Name",
    data_source_id="scheduled_query",
    params={
        "query": query_string,
        "destination_table_name_template": "your_table_{run_date}",
        "write_disposition": "WRITE_TRUNCATE",
        "partitioning_field": "",
    },
    schedule="every 24 hours",
)

transfer_config = transfer_client.create_transfer_config(
    bigquery_datatransfer.CreateTransferConfigRequest(
        parent=parent,
        transfer_config=transfer_config,
        service_account_name=service_account_name,
    )
)

print("Created scheduled query '{}'".format(transfer_config.name))

Menyiapkan kueri terjadwal dengan akun layanan

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.CreateTransferConfigRequest;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.protobuf.Struct;
import com.google.protobuf.Value;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

// Sample to create a scheduled query with service account
public class CreateScheduledQueryWithServiceAccount {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    final String datasetId = "MY_DATASET_ID";
    final String serviceAccount = "MY_SERVICE_ACCOUNT";
    final String query =
        "SELECT CURRENT_TIMESTAMP() as current_time, @run_time as intended_run_time, "
            + "@run_date as intended_run_date, 17 as some_integer";
    Map<String, Value> params = new HashMap<>();
    params.put("query", Value.newBuilder().setStringValue(query).build());
    params.put(
        "destination_table_name_template",
        Value.newBuilder().setStringValue("my_destination_table_{run_date}").build());
    params.put("write_disposition", Value.newBuilder().setStringValue("WRITE_TRUNCATE").build());
    params.put("partitioning_field", Value.newBuilder().build());
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setDestinationDatasetId(datasetId)
            .setDisplayName("Your Scheduled Query Name")
            .setDataSourceId("scheduled_query")
            .setParams(Struct.newBuilder().putAllFields(params).build())
            .setSchedule("every 24 hours")
            .build();
    createScheduledQueryWithServiceAccount(projectId, transferConfig, serviceAccount);
  }

  public static void createScheduledQueryWithServiceAccount(
      String projectId, TransferConfig transferConfig, String serviceAccount) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      CreateTransferConfigRequest request =
          CreateTransferConfigRequest.newBuilder()
              .setParent(parent.toString())
              .setTransferConfig(transferConfig)
              .setServiceAccountName(serviceAccount)
              .build();
      TransferConfig config = dataTransferServiceClient.createTransferConfig(request);
      System.out.println(
          "\nScheduled query with service account created successfully :" + config.getName());
    } catch (ApiException ex) {
      System.out.print("\nScheduled query with service account was not created." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

# The project where the query job runs is the same as the project
# containing the destination dataset.
project_id = "your-project-id"
dataset_id = "your_dataset_id"

# This service account will be used to execute the scheduled queries. Omit
# this request parameter to run the query as the user with the credentials
# associated with this client.
service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"

# Use standard SQL syntax for the query.
query_string = """
SELECT
  CURRENT_TIMESTAMP() as current_time,
  @run_time as intended_run_time,
  @run_date as intended_run_date,
  17 as some_integer
"""

parent = transfer_client.common_project_path(project_id)

transfer_config = bigquery_datatransfer.TransferConfig(
    destination_dataset_id=dataset_id,
    display_name="Your Scheduled Query Name",
    data_source_id="scheduled_query",
    params={
        "query": query_string,
        "destination_table_name_template": "your_table_{run_date}",
        "write_disposition": "WRITE_TRUNCATE",
        "partitioning_field": "",
    },
    schedule="every 24 hours",
)

transfer_config = transfer_client.create_transfer_config(
    bigquery_datatransfer.CreateTransferConfigRequest(
        parent=parent,
        transfer_config=transfer_config,
        service_account_name=service_account_name,
    )
)

print("Created scheduled query '{}'".format(transfer_config.name))

Lihat status kueri terjadwal

Konsol

Untuk melihat status kueri terjadwal, klik Scheculed queries di panel navigasi. Muat ulang halaman untuk melihat status terbaru dari kueri terjadwal Anda. Klik kueri terjadwal untuk mendapatkan detail selengkapnya tentangnya.

Menampilkan daftar kueri terjadwal.

bq

Kueri terjadwal adalah sejenis transfer. Untuk menampilkan detail kueri terjadwal, Anda dapat menggunakan alat command line bq terlebih dahulu untuk mencantumkan konfigurasi transfer.

Masukkan perintah bq ls dan berikan flag transfer --transfer_config. Flag berikut juga diperlukan:

  • --transfer_location

Contoh:

bq ls \
--transfer_config \
--transfer_location=us

Untuk menampilkan detail satu kueri terjadwal, masukkan perintah bq show dan berikan transfer_path untuk konfigurasi transfer/kueri terjadwal tersebut.

Contoh:

bq show \
--transfer_config \
projects/862514376110/locations/us/transferConfigs/5dd12f26-0000-262f-bc38-089e0820fe38

API

Gunakan metode projects.locations.transferConfigs.list dan berikan instance resource TransferConfig.

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ListTransferConfigsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ProjectName;
import java.io.IOException;

// Sample to get list of transfer config
public class ListTransferConfigs {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    final String projectId = "MY_PROJECT_ID";
    listTransferConfigs(projectId);
  }

  public static void listTransferConfigs(String projectId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      ProjectName parent = ProjectName.of(projectId);
      ListTransferConfigsRequest request =
          ListTransferConfigsRequest.newBuilder().setParent(parent.toString()).build();
      dataTransferServiceClient
          .listTransferConfigs(request)
          .iterateAll()
          .forEach(config -> System.out.print("Success! Config ID :" + config.getName() + "\n"));
    } catch (ApiException ex) {
      System.out.println("Config list not found due to error." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

project_id = "my-project"
parent = transfer_client.common_project_path(project_id)

configs = transfer_client.list_transfer_configs(parent=parent)
print("Got the following configs:")
for config in configs:
    print(f"\tID: {config.name}, Schedule: {config.schedule}")

Perbarui kueri terjadwal

Konsol

Untuk memperbarui kueri terjadwal, ikuti langkah-langkah berikut:

  1. Di panel navigasi, klik Scheduled queries.
  2. Dalam daftar kueri terjadwal, klik nama kueri yang ingin diubah.
  3. Di halaman Scheduled query details yang terbuka, klik Edit. Edit detail kueri terjadwal.
  4. Opsional: Ubah teks kueri di panel pengeditan kueri.
  5. Klik Schedule query, lalu pilih Update shceduled query.
  6. Opsional: Ubah opsi penjadwalan lainnya untuk kueri.
  7. Klik Perbarui.

bq

Kueri terjadwal adalah sejenis transfer. Untuk memperbarui kueri terjadwal, Anda dapat menggunakan alat command line bq untuk membuat konfigurasi transfer.

Masukkan perintah bq update dengan flag --transfer_config yang diperlukan.

Flag opsional:

  • --project_id adalah project ID Anda. Jika --project_id tidak ditentukan, maka project default akan digunakan.

  • --schedule adalah seberapa sering Anda ingin kueri dijalankan. Jika --schedule tidak ditentukan, defaultnya adalah 'setiap 24 jam' berdasarkan waktu pembuatan.

  • --service_account_name hanya berlaku jika --update_credentials juga ditetapkan. Untuk informasi selengkapnya, lihat Memperbarui kredensial kueri terjadwal.

  • --target_dataset (opsional untuk kueri DDL dan DML) adalah cara alternatif untuk memberi nama set data target untuk hasil kueri, saat digunakan dengan kueri DDL dan DML.

  • --display_name adalah nama untuk kueri terjadwal.

  • --params parameter untuk konfigurasi transfer yang dibuat dalam format JSON. Misalnya: --params='{"param":"param_value"}'.

  • --destination_kms_key menentukan ID resource kunci untuk kunci Cloud KMS jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk transfer ini. Untuk mengetahui informasi tentang cara kerja kunci enkripsi yang dikelola pelanggan (CMEK) dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan kueri terjadwal.

bq update \
--target_dataset=dataset \
--display_name=name \
--params='parameters'
--transfer_config \
RESOURCE_NAME

Ganti kode berikut:

  • dataset. Set data target untuk konfigurasi transfer. Parameter ini bersifat opsional untuk kueri DDL dan DML. Wajib diisi untuk semua kueri lainnya.
  • name. Nama tampilan untuk konfigurasi transfer. Nama tampilan dapat berupa nilai apa pun yang dapat diidentifikasi nanti jika Anda perlu mengubah kueri.
  • parameters. Berisi parameter untuk konfigurasi transfer yang dibuat dalam format JSON. Sebagai contoh: --params='{"param":"param_value"}'.
    • Untuk kueri terjadwal, Anda harus memberikan parameter query.
    • Parameter destination_table_name_template adalah nama tabel tujuan Anda. Parameter ini bersifat opsional untuk kueri DDL dan DML. Kolom ini wajib diisi untuk semua kueri lainnya.
    • Untuk parameter write_disposition, Anda dapat memilih WRITE_TRUNCATE untuk memotong (menimpa) tabel tujuan atau WRITE_APPEND untuk menambahkan hasil kueri ke tabel tujuan. Parameter ini bersifat opsional untuk kueri DDL dan DML. Kolom ini wajib diisi untuk semua kueri lainnya.
  • Opsional: --destination_kms_key menentukan ID resource kunci untuk kunci Cloud KMS—misalnya, projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name.
  • RESOURCE_NAME: Nama resource transfer (juga disebut sebagai konfigurasi transfer). Jika Anda tidak mengetahui nama resource transfer, cari nama resource dengan: bq ls --transfer_config --transfer_location=location.

Misalnya, perintah berikut memperbarui konfigurasi transfer kueri terjadwal bernama My Scheduled Query menggunakan kueri sederhana SELECT 1 from mydataset.test. Tabel tujuan mytable akan terpotong untuk setiap penulisan, dan set data target adalah mydataset:

bq update \
--target_dataset=mydataset \
--display_name='My Scheduled Query' \
--params='{"query":"SELECT 1 from mydataset.test","destination_table_name_template":"mytable","write_disposition":"WRITE_TRUNCATE"}'
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

API

Gunakan metode projects.transferConfigs.patch dan berikan Nama Resource transfer menggunakan parameter transferConfig.name. Jika Anda tidak mengetahui Nama Resource transfer, gunakan perintah bq ls --transfer_config --transfer_location=location untuk mencantumkan semua transfer atau panggil projects.locations.transferConfigs.list dan berikan project ID menggunakan parameter parent.

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update transfer config.
public class UpdateTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    TransferConfig transferConfig =
        TransferConfig.newBuilder()
            .setName(configId)
            .setDisplayName("UPDATED_DISPLAY_NAME")
            .build();
    FieldMask updateMask = FieldMaskUtil.fromString("display_name");
    updateTransferConfig(transferConfig, updateMask);
  }

  public static void updateTransferConfig(TransferConfig transferConfig, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .build();
      TransferConfig updateConfig = dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Transfer config updated successfully :" + updateConfig.getDisplayName());
    } catch (ApiException ex) {
      System.out.print("Transfer config was not updated." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
new_display_name = "My Transfer Config"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)
transfer_config.display_name = new_display_name

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["display_name"]),
    }
)

print(f"Updated config: '{transfer_config.name}'")
print(f"New display name: '{transfer_config.display_name}'")

Memperbarui kueri terjadwal dengan batasan kepemilikan

Jika Anda mencoba mengupdate kueri terjadwal yang bukan milik Anda, update mungkin gagal dengan pesan error berikut:

Cannot modify restricted parameters without taking ownership of the transfer configuration.

Pemilik kueri terjadwal adalah pengguna yang terkait dengan kueri terjadwal atau pengguna yang memiliki akses ke akun layanan yang terkait dengan kueri terjadwal. Pengguna terkait dapat dilihat dalam detail konfigurasi kueri terjadwal. Untuk mengetahui informasi tentang cara memperbarui kueri terjadwal agar mengambil alih kepemilikan, lihat Memperbarui kredensial kueri terjadwal. Untuk memberi pengguna akses ke akun layanan, Anda harus memiliki peran pengguna Akun Layanan.

Setiap pengguna yang bukan pemilik kueri terjadwal, tetapi memiliki akses ke semua resource yang disebutkan oleh kueri, mungkin masih diizinkan untuk memperbarui kueri. Skenario ini hanya didukung jika kueri dapat divalidasi dalam waktu satu atau dua menit. Jika tidak, Anda akan mendapatkan pesan error yang sama seperti yang disebutkan sebelumnya. Jika kueri terlalu kompleks, Anda dapat memperbarui kredensial kueri terjadwal untuk mengambil kepemilikan langsung atas kueri terjadwal atau menggunakan akun layanan.

Memperbarui kredensial kueri terjadwal

Jika menjadwalkan kueri yang ada, Anda mungkin perlu memperbarui kredensial pengguna pada kueri. Kredensial otomatis diperbarui untuk kueri terjadwal yang baru.

Beberapa situasi lain yang mungkin memerlukan pembaruan kredensial meliputi hal berikut:

  • Anda ingin membuat kueri data Google Drive dalam kueri terjadwal.
  • Anda akan menerima error INVALID_USER saat mencoba menjadwalkan kueri:

    Error code 5 : Authentication failure: User Id not found. Error code: INVALID_USERID

  • Anda menerima error parameter yang dibatasi berikut saat mencoba memperbarui kueri:

    Cannot modify restricted parameters without taking ownership of the transfer configuration.

Konsol

Untuk memperbarui kredensial yang ada pada kueri terjadwal:

  1. Temukan dan lihat status kueri terjadwal.

  2. Klik tombol MORE dan pilih Update credentials.

    Perbarui kredensial kueri terjadwal.

  3. Tunggu 10 hingga 20 menit agar perubahan diterapkan. Anda mungkin perlu menghapus cache browser.

bq

Kueri terjadwal adalah sejenis transfer. Untuk memperbarui kredensial kueri terjadwal, Anda dapat menggunakan alat command line bq untuk memperbarui konfigurasi transfer.

Masukkan perintah bq update dan berikan flag transfer --transfer_config. Flag berikut juga diperlukan:

  • --update_credentials

Flag opsional:

  • --service_account_name digunakan untuk mengautentikasi kueri terjadwal dengan akun layanan, bukan akun pengguna perorangan Anda.

Misalnya, perintah berikut memperbarui konfigurasi transfer kueri terjadwal untuk melakukan autentikasi sebagai akun layanan:

bq update \
--update_credentials \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com
--transfer_config \
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.TransferConfig;
import com.google.cloud.bigquery.datatransfer.v1.UpdateTransferConfigRequest;
import com.google.protobuf.FieldMask;
import com.google.protobuf.util.FieldMaskUtil;
import java.io.IOException;

// Sample to update credentials in transfer config.
public class UpdateCredentials {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    String serviceAccount = "MY_SERVICE_ACCOUNT";
    TransferConfig transferConfig = TransferConfig.newBuilder().setName(configId).build();
    FieldMask updateMask = FieldMaskUtil.fromString("service_account_name");
    updateCredentials(transferConfig, serviceAccount, updateMask);
  }

  public static void updateCredentials(
      TransferConfig transferConfig, String serviceAccount, FieldMask updateMask)
      throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      UpdateTransferConfigRequest request =
          UpdateTransferConfigRequest.newBuilder()
              .setTransferConfig(transferConfig)
              .setUpdateMask(updateMask)
              .setServiceAccountName(serviceAccount)
              .build();
      dataTransferServiceClient.updateTransferConfig(request);
      System.out.println("Credentials updated successfully");
    } catch (ApiException ex) {
      System.out.print("Credentials was not updated." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery_datatransfer
from google.protobuf import field_mask_pb2

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

service_account_name = "abcdef-test-sa@abcdef-test.iam.gserviceaccount.com"
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"

transfer_config = bigquery_datatransfer.TransferConfig(name=transfer_config_name)

transfer_config = transfer_client.update_transfer_config(
    {
        "transfer_config": transfer_config,
        "update_mask": field_mask_pb2.FieldMask(paths=["service_account_name"]),
        "service_account_name": service_account_name,
    }
)

print("Updated config: '{}'".format(transfer_config.name))

Menyiapkan proses manual pada tanggal histori

Selain menjadwalkan kueri untuk dijalankan di masa mendatang, Anda juga dapat memicu eksekusi langsung secara manual. Memicu run langsung akan diperlukan jika kueri Anda menggunakan parameter run_date, dan terdapat masalah selama eksekusi sebelumnya.

Misalnya, setiap hari pada pukul 09.00 Anda mengkueri tabel sumber untuk baris yang cocok dengan tanggal saat ini. Namun, Anda mendapati bahwa data tidak ditambahkan ke tabel sumber selama tiga hari terakhir. Dalam situasi ini, Anda dapat menetapkan kueri untuk dijalankan pada data historis dalam rentang tanggal yang Anda tentukan. Kueri Anda berjalan menggunakan kombinasi parameter run_date dan run_time yang sesuai dengan tanggal yang Anda konfigurasikan dalam kueri terjadwal.

Setelah menyiapkan kueri terjadwal, berikut cara menjalankan kueri menggunakan rentang tanggal historis:

Konsol

Setelah mengklik Schedule untuk menyimpan kueri terjadwal, Anda dapat mengklik tombol Scheduled queries untuk melihat daftar kueri yang saat ini dijadwalkan. Klik nama tampilan untuk melihat detail jadwal kueri. Di kanan atas halaman, klik Schedule backfill untuk menentukan rentang tanggal historis.

Tombol Jadwalkan pengisian ulang.

Runtime yang dipilih semuanya berada dalam rentang yang Anda pilih, termasuk tanggal pertama dan mengecualikan tanggal terakhir.

atur tanggal historis

Contoh 1

Kueri terjadwal Anda disetel untuk menjalankan every day 09:00 Waktu Pasifik. Anda tidak memiliki data dari 1 Januari, 2 Januari, dan 3 Januari. Pilih rentang tanggal historis berikut:

Start Time = 1/1/19
End Time = 1/4/19

Kueri Anda berjalan menggunakan parameter run_date dan run_time yang sesuai dengan waktu berikut:

  • 1/1/19 09:00 Waktu Pasifik
  • 1/2/19 09:00 Waktu Pasifik
  • 1/3/19 09:00 Waktu Pasifik

Contoh 2

Kueri terjadwal Anda disetel untuk menjalankan every day 23:00 Waktu Pasifik. Anda tidak memiliki data dari 1 Januari, 2 Januari, dan 3 Januari. Pilih rentang tanggal historis berikut (tanggal lebih baru dipilih karena UTC memiliki tanggal yang berbeda pada pukul 23.00 Waktu Pasifik):

Start Time = 1/2/19
End Time = 1/5/19

Kueri Anda berjalan menggunakan parameter run_date dan run_time yang sesuai dengan waktu berikut:

  • 2/1/19 06.00 UTC, atau 1/1/2019 23.00 Waktu Pasifik
  • 3/1/19 06.00 UTC, atau 2/1/2019 23.00 Waktu Pasifik
  • 4/1/19 06.00 UTC, atau 3/1/2019 23.00 Waktu Pasifik

Setelah menyiapkan operasi manual, muat ulang halaman untuk melihatnya dalam daftar run.

bq

Untuk menjalankan kueri secara manual pada rentang tanggal historis:

Masukkan perintah bq mk dan berikan flag operasi transfer --transfer_run. Flag berikut juga diperlukan:

  • --start_time
  • --end_time
bq mk \
--transfer_run \
--start_time='start_time' \
--end_time='end_time' \
resource_name

Ganti kode berikut:

  • start_time dan end_time. Stempel waktu yang berakhiran Z atau berisi offset zona waktu yang valid. Contoh:
    • 2017-08-19T12:11:35.00Z
    • 2017-05-25T00:00:00+00:00
  • resource_name. Nama Resource (atau transfer) kueri terjadwal. Nama Resource juga dikenal sebagai konfigurasi transfer.

Misalnya, perintah berikut menjadwalkan pengisian ulang untuk resource kueri terjadwal (atau konfigurasi transfer): projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7.

  bq mk \
  --transfer_run \
  --start_time 2017-05-25T00:00:00Z \
  --end_time 2017-05-25T00:00:00Z \
  projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7

Untuk informasi selengkapnya, lihat bq mk --transfer_run.

API

Gunakan metode projects.locations.transferConfigs.scheduleRun dan berikan jalur resource TransferConfig.

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsRequest;
import com.google.cloud.bigquery.datatransfer.v1.ScheduleTransferRunsResponse;
import com.google.protobuf.Timestamp;
import java.io.IOException;
import org.threeten.bp.Clock;
import org.threeten.bp.Instant;
import org.threeten.bp.temporal.ChronoUnit;

// Sample to run schedule back fill for transfer config
public class ScheduleBackFill {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String configId = "MY_CONFIG_ID";
    Clock clock = Clock.systemDefaultZone();
    Instant instant = clock.instant();
    Timestamp startTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(5, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(5, ChronoUnit.DAYS).getNano())
            .build();
    Timestamp endTime =
        Timestamp.newBuilder()
            .setSeconds(instant.minus(2, ChronoUnit.DAYS).getEpochSecond())
            .setNanos(instant.minus(2, ChronoUnit.DAYS).getNano())
            .build();
    scheduleBackFill(configId, startTime, endTime);
  }

  public static void scheduleBackFill(String configId, Timestamp startTime, Timestamp endTime)
      throws IOException {
    try (DataTransferServiceClient client = DataTransferServiceClient.create()) {
      ScheduleTransferRunsRequest request =
          ScheduleTransferRunsRequest.newBuilder()
              .setParent(configId)
              .setStartTime(startTime)
              .setEndTime(endTime)
              .build();
      ScheduleTransferRunsResponse response = client.scheduleTransferRuns(request);
      System.out.println("Schedule backfill run successfully :" + response.getRunsCount());
    } catch (ApiException ex) {
      System.out.print("Schedule backfill was not run." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import datetime

from google.cloud.bigquery_datatransfer_v1 import (
    DataTransferServiceClient,
    StartManualTransferRunsRequest,
)

# Create a client object
client = DataTransferServiceClient()

# Replace with your transfer configuration name
transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
now = datetime.datetime.now(datetime.timezone.utc)
start_time = now - datetime.timedelta(days=5)
end_time = now - datetime.timedelta(days=2)

# Some data sources, such as scheduled_query only support daily run.
# Truncate start_time and end_time to midnight time (00:00AM UTC).
start_time = datetime.datetime(
    start_time.year, start_time.month, start_time.day, tzinfo=datetime.timezone.utc
)
end_time = datetime.datetime(
    end_time.year, end_time.month, end_time.day, tzinfo=datetime.timezone.utc
)

requested_time_range = StartManualTransferRunsRequest.TimeRange(
    start_time=start_time,
    end_time=end_time,
)

# Initialize request argument(s)
request = StartManualTransferRunsRequest(
    parent=transfer_config_name,
    requested_time_range=requested_time_range,
)

# Make the request
response = client.start_manual_transfer_runs(request=request)

# Handle the response
print("Started manual transfer runs:")
for run in response.runs:
    print(f"backfill: {run.run_time} run: {run.name}")

Hapus kueri terjadwal

Konsol

Untuk menghapus kueri terjadwal melalui konsol:

  1. Di panel navigasi, klik Scheduled queries.

  2. Dalam daftar kueri terjadwal, klik nama kueri terjadwal yang ingin dihapus.

  3. Di halaman Detail kueri terjadwal yang terbuka, klik Hapus. Perbarui kredensial kueri terjadwal.

Java

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Java BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.api.gax.rpc.ApiException;
import com.google.cloud.bigquery.datatransfer.v1.DataTransferServiceClient;
import com.google.cloud.bigquery.datatransfer.v1.DeleteTransferConfigRequest;
import java.io.IOException;

// Sample to delete a transfer config
public class DeleteTransferConfig {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    // i.e projects/{project_id}/transferConfigs/{config_id}` or
    // `projects/{project_id}/locations/{location_id}/transferConfigs/{config_id}`
    String configId = "MY_CONFIG_ID";
    deleteTransferConfig(configId);
  }

  public static void deleteTransferConfig(String configId) throws IOException {
    try (DataTransferServiceClient dataTransferServiceClient = DataTransferServiceClient.create()) {
      DeleteTransferConfigRequest request =
          DeleteTransferConfigRequest.newBuilder().setName(configId).build();
      dataTransferServiceClient.deleteTransferConfig(request);
      System.out.println("Transfer config deleted successfully");
    } catch (ApiException ex) {
      System.out.println("Transfer config was not deleted." + ex.toString());
    }
  }
}

Python

Untuk mempelajari cara menginstal dan menggunakan library klien untuk BigQuery, lihat library klien BigQuery. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi API Python BigQuery.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import google.api_core.exceptions
from google.cloud import bigquery_datatransfer

transfer_client = bigquery_datatransfer.DataTransferServiceClient()

transfer_config_name = "projects/1234/locations/us/transferConfigs/abcd"
try:
    transfer_client.delete_transfer_config(name=transfer_config_name)
except google.api_core.exceptions.NotFound:
    print("Transfer config not found.")
else:
    print(f"Deleted transfer config: {transfer_config_name}")

Kuota

Kueri terjadwal dijalankan dengan kredensial dan project pembuat, seolah-olah Anda mengeksekusi kueri sendiri. Kueri terjadwal selalu dijalankan sebagai tugas kueri batch.

Meskipun kueri terjadwal menggunakan fitur BigQuery Data Transfer Service, kueri tersebut bukan transfer dan tidak tunduk pada kuota tugas pemuatan. Kueri terjadwal tunduk pada kuota dan batas BigQuery yang sama seperti kueri manual.

Harga

Harga kueri terjadwal sama dengan kueri BigQuery manual.

Region yang didukung

Kueri terjadwal didukung di lokasi berikut.

Region

Tabel berikut mencantumkan region di Amerika tempat BigQuery tersedia.
Deskripsi region Nama region Detail
Columbus, Ohio us-east5
Dallas us-south1 ikon daun CO Rendah2
Iowa us-central1 ikon daun CO2 Rendah
Las Vegas us-west4
Los Angeles us-west2
Montréal northamerica-northeast1 ikon daun CO2 Rendah
Northern Virginia us-east4
Oregon us-west1 ikon daun CO2 Rendah
Salt Lake City us-west3
Sao Paulo southamerica-east1 ikon daun CO Rendah2
Santiago southamerica-west1 ikon daun CO Rendah2
South Carolina us-east1
Toronto northamerica-northeast2 ikon daun CO2 Rendah
Tabel berikut mencantumkan region di Asia Pasifik tempat BigQuery tersedia.
Deskripsi region Nama region Detail
Delhi asia-south2
Hong Kong asia-east2
Jakarta asia-southeast2
Melbourne australia-southeast2
Mumbai asia-south1
Osaka asia-northeast2
Seoul asia-northeast3
Singapura asia-southeast1
Sydney australia-southeast1
Taiwan asia-east1
Tokyo asia-northeast1
Tabel berikut mencantumkan region di Eropa tempat BigQuery tersedia.
Deskripsi region Nama region Detail
Belgia europe-west1 ikon daun CO Rendah2
Berlin europe-west10 ikon daun CO2 Rendah
Finlandia europe-north1 ikon daun CO Rendah2
Frankfurt europe-west3 ikon daun CO Rendah2
London europe-west2 ikon daun CO Rendah2
Madrid europe-southwest1 ikon daun CO Rendah2
Milan europe-west8
Belanda europe-west4 ikon daun CO Rendah2
Paris europe-west9 ikon daun CO2 Rendah
Turin europe-west12
Warsawa europe-central2
Zürich europe-west6 ikon daun CO2 Rendah
Tabel berikut mencantumkan region di Timur Tengah tempat BigQuery tersedia.
Deskripsi region Nama region Detail
Dammam me-central2
Doha me-central1
Tel Aviv me-west1
Tabel berikut mencantumkan region di Afrika tempat BigQuery tersedia.
Deskripsi region Nama region Detail
Johannesburg africa-south1

Multi-region

Tabel berikut mencantumkan multi-region tempat BigQuery tersedia.
Deskripsi multi-region Nama multi-region
Pusat data di negara anggota Uni Eropa1 EU
Pusat data di Amerika Serikat2 US

1 Data yang berada di multi-region EU hanya disimpan di salah satu lokasi berikut: europe-west1 (Belgia) atau europe-west4 (Belanda). Lokasi persis tempat data disimpan dan diproses ditentukan secara otomatis oleh BigQuery.

2 Data yang berada di multi-region US hanya disimpan di salah satu lokasi berikut: us-central1 (Iowa), us-west1 (Oregon), atau us-central2 (Oklahoma). Lokasi tepat tempat data disimpan dan diproses ditentukan secara otomatis oleh BigQuery.

Langkah selanjutnya