Mengelola tabel

Dokumen ini menjelaskan cara mengelola tabel di BigQuery. Anda dapat mengelola tabel BigQuery dengan cara berikut:

Untuk informasi selengkapnya tentang cara membuat dan menggunakan tabel, termasuk mendapatkan informasi tabel, mencantumkan tabel, dan mengontrol akses ke data tabel, lihat Membuat dan menggunakan tabel.

Sebelum memulai

Berikan peran Identity and access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini. Izin yang diperlukan untuk melakukan tugas (jika ada) tercantum di bagian "Izin yang diperlukan" pada tugas.

Memperbarui properti tabel

Anda dapat memperbarui elemen tabel berikut:

Izin yang diperlukan

Untuk mendapatkan izin yang diperlukan guna memperbarui properti tabel, minta administrator untuk memberi Anda peran IAM Data Editor (roles/bigquery.dataEditor) pada tabel. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk memperbarui properti tabel. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk memperbarui properti tabel:

  • bigquery.tables.update
  • bigquery.tables.get

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Selain itu, jika memiliki izin bigquery.datasets.create, Anda dapat memperbarui properti tabel set data yang Anda buat.

Memperbarui deskripsi tabel

Anda dapat memperbarui deskripsi tabel dengan cara berikut:

  • Menggunakan Konsol Google Cloud.
  • Menggunakan pernyataan ALTER TABLE bahasa definisi data (DDL).
  • Menggunakan perintah bq update alat command line bq.
  • Memanggil metode API tables.patch.
  • Menggunakan library klien.

Untuk memperbarui deskripsi tabel:

Konsol

Anda tidak dapat menambahkan deskripsi saat membuat tabel menggunakan Konsol Google Cloud. Setelah tabel dibuat, Anda dapat menambahkan deskripsi di halaman Details.

  1. Di panel Explorer, luaskan project dan set data Anda, lalu pilih tabel.

  2. Di panel detail, klik Details.

  3. Di bagian Description, klik ikon pensil untuk mengedit deskripsi.

    Edit deskripsi.

  4. Masukkan deskripsi di kotak, lalu klik Update untuk menyimpan.

SQL

Gunakan pernyataan ALTER TABLE SET OPTIONS. Contoh berikut memperbarui deskripsi tabel bernama mytable:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        description = 'Description of mytable');

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Jalankan perintah bq update dengan flag --description. Jika Anda memperbarui tabel dalam project selain project default, tambahkan project ID ke nama set data dalam format berikut: project_id:dataset.

    bq update \
    --description "description" \
    project_id:dataset.table

    Ganti yang berikut ini:

    • description: teks yang menjelaskan tabel dalam tanda kutip
    • project_id: project ID Anda.
    • dataset: nama set data yang berisi tabel yang Anda perbarui
    • table: nama tabel yang Anda perbarui

    Contoh:

    Untuk mengubah deskripsi tabel mytable dalam set data mydataset menjadi "Deskripsi tabel saya", masukkan perintah berikut. Set data mydataset berada di project default Anda.

    bq update --description "Description of mytable" mydataset.mytable
    

    Untuk mengubah deskripsi tabel mytable dalam set data mydataset menjadi "Deskripsi tabel saya", masukkan perintah berikut. Set data mydataset berada di project myotherproject, bukan di project default Anda.

    bq update \
    --description "Description of mytable" \
    myotherproject:mydataset.mytable
    

API

Panggil metode tables.patch dan gunakan properti description di resource tabel untuk memperbarui deskripsi tabel. Karena metode tables.update menggantikan seluruh resource tabel, metode tables.patch akan lebih disarankan.

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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		Description: "Updated description.",
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;

public class UpdateTableDescription {

  public static void runUpdateTableDescription() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String newDescription = "this is the new table description";
    updateTableDescription(datasetName, tableName, newDescription);
  }

  public static void updateTableDescription(
      String datasetName, String tableName, String newDescription) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Table table = bigquery.getTable(datasetName, tableName);
      bigquery.update(table.toBuilder().setDescription(newDescription).build());
      System.out.println("Table description updated successfully to " + newDescription);
    } catch (BigQueryException e) {
      System.out.println("Table description was not updated \n" + e.toString());
    }
  }
}

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.

Konfigurasikan properti Table.description dan panggil Client.update_table() untuk mengirim pembaruan ke API.
# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

Memperbarui waktu habis masa berlaku tabel

Anda dapat menetapkan waktu habis masa berlaku tabel default di tingkat set data, atau menetapkan waktu habis masa berlaku tabel saat tabel dibuat. Waktu habis masa berlaku tabel sering disebut sebagai "time to live" atau TTL.

Ketika masa berlaku berakhir, tabel akan dihapus bersama dengan semua data yang ada di dalamnya. Jika perlu, Anda dapat membatalkan penghapusan tabel yang telah habis masa berlakunya dalam periode perjalanan waktu yang ditentukan untuk set data. Lihat Memulihkan tabel yang dihapus untuk informasi selengkapnya.

Jika Anda menetapkan masa berlaku saat tabel dibuat, masa berlaku tabel default set data akan diabaikan. Jika Anda tidak menetapkan tanggal habis masa berlaku tabel default di tingkat set data, dan tidak menetapkan tanggal habis masa berlaku tabel saat tabel dibuat, tabel tidak akan memiliki tanggal habis masa berlaku dan Anda harus menghapus tabel secara manual.

Kapan pun setelah tabel dibuat, Anda dapat memperbarui waktu habis masa berlaku tabel dengan cara berikut:

  • Menggunakan Konsol Google Cloud.
  • Menggunakan pernyataan ALTER TABLE bahasa definisi data (DDL).
  • Menggunakan perintah bq update alat command line bq.
  • Memanggil metode API tables.patch.
  • Menggunakan library klien.

Untuk memperbarui waktu habis masa berlaku tabel:

Konsol

Anda tidak dapat menambahkan waktu habis masa berlaku saat membuat tabel menggunakan Konsol Google Cloud. Setelah tabel dibuat, Anda dapat menambahkan atau memperbarui masa berlaku tabel di halaman Table Details.

  1. Di panel Explorer, luaskan project dan set data Anda, lalu pilih tabel.

  2. Di panel detail, klik Details.

  3. Klik ikon pensil di samping Table info

  4. Untuk Table expiration, pilih Specify date. Kemudian, pilih tanggal habis masa berlaku menggunakan widget kalender.

  5. Klik Update untuk menyimpan. Waktu habis masa berlaku yang diperbarui akan muncul di bagian Table info.

SQL

Gunakan pernyataan ALTER TABLE SET OPTIONS. Contoh berikut memperbarui waktu habis masa berlaku tabel bernama mytable:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    ALTER TABLE mydataset.mytable
      SET OPTIONS (
        -- Sets table expiration to timestamp 2025-02-03 12:34:56
        expiration_timestamp = TIMESTAMP '2025-02-03 12:34:56');

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Jalankan perintah bq update dengan flag --expiration. Jika Anda memperbarui tabel dalam project selain project default, tambahkan project ID ke nama set data dalam format berikut: project_id:dataset.

    bq update \
    --expiration integer \
    project_id:dataset.table

    Ganti yang berikut ini:

    • integer: masa aktif default (dalam detik) untuk tabel. Nilai minimum adalah 3.600 detik (satu jam). Waktu habis masa berlaku mengevaluasi waktu saat ini ditambah dengan nilai bilangan bulat. Jika Anda menentukan 0, masa berlaku tabel akan dihapus, dan tabel tidak akan pernah berakhir masa berlakunya. Tabel tanpa masa berlaku harus dihapus secara manual.
    • project_id: project ID Anda.
    • dataset: nama set data yang berisi tabel yang Anda perbarui.
    • table: nama tabel yang Anda perbarui.

    Contoh:

    Untuk memperbarui waktu habis masa berlaku tabel mytable di set data mydataset menjadi 5 hari (432.000 detik), masukkan perintah berikut. Set data mydataset berada di project default Anda.

    bq update --expiration 432000 mydataset.mytable
    

    Untuk memperbarui waktu habis masa berlaku tabel mytable di set data mydataset menjadi 5 hari (432.000 detik), masukkan perintah berikut. Set data mydataset berada di project myotherproject, bukan di project default Anda.

    bq update --expiration 432000 myotherproject:mydataset.mytable
    

API

Panggil metode tables.patch dan gunakan properti expirationTime di resource tabel untuk memperbarui masa berlaku tabel dalam milidetik. Karena metode tables.update menggantikan seluruh resource tabel, metode tables.patch akan direkomendasikan.

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.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;
import java.util.concurrent.TimeUnit;

public class UpdateTableExpiration {

  public static void runUpdateTableExpiration() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    // Update table expiration to one day.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(1, TimeUnit.DAYS);
    updateTableExpiration(datasetName, tableName, newExpiration);
  }

  public static void updateTableExpiration(
      String datasetName, String tableName, Long newExpiration) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Table table = bigquery.getTable(datasetName, tableName);
      bigquery.update(table.toBuilder().setExpirationTime(newExpiration).build());

      System.out.println("Table expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Table expiration was not updated \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

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.

Konfigurasikan properti Table.expires dan panggil Client.update_table() untuk mengirim pembaruan ke API.
# Copyright 2022 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

import datetime


def update_table_expiration(table_id, expiration):
    orig_table_id = table_id
    orig_expiration = expiration

    from google.cloud import bigquery

    client = bigquery.Client()

    # TODO(dev): Change table_id to the full name of the table you want to update.
    table_id = "your-project.your_dataset.your_table_name"

    # TODO(dev): Set table to expire for desired days days from now.
    expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
        days=5
    )

    table_id = orig_table_id
    expiration = orig_expiration

    table = client.get_table(table_id)  # Make an API request.
    table.expires = expiration
    table = client.update_table(table, ["expires"])  # API request

    print(f"Updated {table_id}, expires {table.expires}.")

Untuk memperbarui waktu habis masa berlaku partisi set data default:

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import java.util.concurrent.TimeUnit;

// Sample to update partition expiration on a dataset.
public class UpdateDatasetPartitionExpiration {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    // Set the default partition expiration (applies to new tables, only) in
    // milliseconds. This example sets the default expiration to 90 days.
    Long newExpiration = TimeUnit.MILLISECONDS.convert(90, TimeUnit.DAYS);
    updateDatasetPartitionExpiration(datasetName, newExpiration);
  }

  public static void updateDatasetPartitionExpiration(String datasetName, Long newExpiration) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      Dataset dataset = bigquery.getDataset(datasetName);
      bigquery.update(dataset.toBuilder().setDefaultPartitionExpirationMs(newExpiration).build());
      System.out.println(
          "Dataset default partition expiration updated successfully to " + newExpiration);
    } catch (BigQueryException e) {
      System.out.println("Dataset partition expiration was not updated \n" + e.toString());
    }
  }
}

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.

# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


def update_dataset_default_partition_expiration(dataset_id: str) -> None:

    from google.cloud import bigquery

    # Construct a BigQuery client object.
    client = bigquery.Client()

    # TODO(developer): Set dataset_id to the ID of the dataset to fetch.
    # dataset_id = 'your-project.your_dataset'

    dataset = client.get_dataset(dataset_id)  # Make an API request.

    # Set the default partition expiration (applies to new tables, only) in
    # milliseconds. This example sets the default expiration to 90 days.
    dataset.default_partition_expiration_ms = 90 * 24 * 60 * 60 * 1000

    dataset = client.update_dataset(
        dataset, ["default_partition_expiration_ms"]
    )  # Make an API request.

    print(
        "Updated dataset {}.{} with new default partition expiration {}".format(
            dataset.project, dataset.dataset_id, dataset.default_partition_expiration_ms
        )
    )

Mengupdate mode pembulatan tabel

Anda dapat mengupdate mode pembulatan default tabel menggunakan pernyataan DDL ALTER TABLE SET OPTIONS. Contoh berikut mengupdate mode pembulatan default untuk mytable menjadi ROUND_HALF_EVEN:

ALTER TABLE mydataset.mytable
SET OPTIONS (
  default_rounding_mode = "ROUND_HALF_EVEN");

Jika Anda menambahkan kolom NUMERIC atau BIGNUMERIC ke tabel dan tidak menentukan mode pembulatan, mode pembulatan akan otomatis ditetapkan ke mode pembulatan default tabel. Mengubah mode pembulatan default tabel tidak mengubah mode pembulatan kolom yang ada.

Mengupdate definisi skema tabel

Untuk informasi selengkapnya tentang cara mengupdate definisi skema tabel, lihat Mengubah skema tabel.

Mengganti nama tabel

Anda dapat mengganti nama tabel setelah dibuat menggunakan pernyataan ALTER TABLE RENAME TO. Contoh berikut mengganti nama mytable menjadi mynewtable:

ALTER TABLE mydataset.mytable
RENAME TO mynewtable;

Batasan terkait penggantian nama tabel

  • Jika ingin mengganti nama tabel yang berisi streaming data, Anda harus menghentikan streaming, melakukan streaming yang tertunda, dan menunggu BigQuery menunjukkan bahwa streaming sedang tidak digunakan.
  • Meskipun nama tabel biasanya dapat diganti namanya 5 jam setelah operasi streaming terakhir, tetapi mungkin memerlukan waktu lebih lama.
  • ACL tabel dan kebijakan akses baris yang ada akan dipertahankan, tetapi pembaruan ACL tabel dan kebijakan akses baris yang dilakukan selama penggantian nama tabel tidak akan dipertahankan.
  • Anda tidak dapat mengganti nama tabel secara serentak dan menjalankan pernyataan DML pada tabel tersebut.
  • Mengganti nama tabel akan menghapus semua tag Data Catalog di tabel.
  • Anda tidak dapat mengganti nama tabel eksternal.

Menyalin tabel

Bagian ini menjelaskan cara membuat salinan tabel lengkap. Untuk informasi tentang jenis salinan tabel lainnya, lihat clone tabel dan snapshot tabel.

Anda dapat menyalin tabel dengan cara berikut:

  • Menggunakan Konsol Google Cloud
  • Menggunakan perintah bq cp.
  • Menggunakan pernyataan CREATE TABLE COPY bahasa definisi data (DDL).
  • Memanggil metode API jobs.insert dan mengonfigurasi tugas copy.
  • Menggunakan library klien.

Batasan terkait penyalinan tabel

Tugas penyalinan tabel tunduk pada batasan berikut:

  • Saat Anda menyalin tabel, nama tabel tujuan harus mematuhi konvensi penamaan yang sama seperti saat Anda membuat tabel.
  • Salinan tabel tunduk pada batasan BigQuery terkait tugas penyalinan.
  • Konsol Google Cloud hanya mendukung penyalinan satu tabel dalam satu waktu. Anda tidak dapat menimpa tabel yang sudah ada di set data tujuan. Tabel harus memiliki nama unik di set data tujuan.
  • Menyalin beberapa tabel sumber ke tabel tujuan tidak didukung oleh Konsol Google Cloud.
  • Saat menyalin beberapa tabel sumber ke tabel tujuan menggunakan API, alat command line bq, atau library klien, semua tabel sumber harus memiliki skema yang identik, termasuk partisi atau pengelompokan.

    Pembaruan skema tabel tertentu, seperti menghapus atau mengganti nama kolom, dapat menyebabkan tabel memiliki skema yang tampaknya identik, tetapi representasi internalnya berbeda. Hal ini dapat menyebabkan tugas penyalinan tabel gagal dengan error Maximum limit on diverging physical schemas reached. Dalam hal ini, Anda dapat menggunakan pernyataan CREATE TABLE LIKE untuk memastikan bahwa skema tabel sumber cocok dengan skema tabel tujuan.

  • Waktu yang diperlukan BigQuery untuk menyalin tabel dapat sangat bervariasi di berbagai operasi karena penyimpanan yang mendasarinya dikelola secara dinamis.

  • Anda tidak dapat menyalin dan menambahkan tabel sumber ke tabel tujuan yang memiliki lebih banyak kolom daripada tabel sumber, dan kolom tambahan memiliki nilai default. Sebagai gantinya, Anda dapat menjalankan INSERT destination_table SELECT * FROM source_table untuk menyalin data.

  • Jika operasi salin menimpa tabel yang ada, akses tingkat tabel untuk tabel yang ada akan dipertahankan. Tag dari tabel sumber tidak disalin ke tabel yang ditimpa, sedangkan tag di tabel yang ada akan dipertahankan. Namun, saat Anda menyalin tabel di seluruh region, tag pada tabel yang ada akan dihapus.

  • Jika operasi salin membuat tabel baru, akses tingkat tabel untuk tabel baru tersebut ditentukan oleh kebijakan akses dari set data tempat tabel baru dibuat. Selain itu, tag disalin dari tabel sumber ke tabel baru.

  • Saat Anda menyalin beberapa tabel sumber ke tabel tujuan, semua tabel sumber harus memiliki tag yang sama.

Peran yang diperlukan

Untuk melakukan tugas dalam dokumen ini, Anda memerlukan izin berikut.

Peran untuk menyalin tabel dan partisi

Untuk mendapatkan izin yang diperlukan guna menyalin tabel dan partisi, minta administrator untuk memberi Anda peran IAM Data Editor (roles/bigquery.dataEditor) pada set data sumber dan tujuan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menyalin tabel dan partisi. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menyalin tabel dan partisi:

  • bigquery.tables.getData pada set data sumber dan tujuan
  • bigquery.tables.get pada set data sumber dan tujuan
  • bigquery.tables.create pada set data tujuan
  • bigquery.tables.update pada set data tujuan

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Izin untuk menjalankan tugas penyalinan

Untuk mendapatkan izin yang diperlukan guna menjalankan tugas penyalinan, minta administrator untuk memberi Anda peran IAM Job User (roles/bigquery.jobUser) pada set data sumber dan tujuan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin bigquery.jobs.create, yang diperlukan untuk menjalankan tugas penyalinan.

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Menyalin satu tabel sumber

Anda dapat menyalin satu tabel dengan cara berikut:

  • Menggunakan Konsol Google Cloud.
  • Menggunakan perintah bq cp alat command line bq.
  • Menggunakan pernyataan CREATE TABLE COPY bahasa definisi data (DDL).
  • Memanggil metode API jobs.insert, mengonfigurasi tugas copy, dan menentukan properti sourceTable.
  • Menggunakan library klien.

Konsol Google Cloud dan pernyataan CREATE TABLE COPY hanya mendukung satu tabel sumber dan satu tabel tujuan dalam tugas penyalinan. Untuk menyalin beberapa file sumber ke tabel tujuan, Anda harus menggunakan alat command line bq atau API.

Untuk menyalin satu tabel sumber:

Konsol

  1. Di panel Explorer, luaskan project dan set data Anda, lalu pilih tabel.

  2. Di panel detail, klik Copy table.

  3. Di dialog Copy table, di bagian Destination:

    • Untuk Project name, pilih project yang akan menyimpan tabel yang disalin.
    • Untuk Dataset name, pilih set data tempat Anda ingin menyimpan tabel yang disalin. Set data sumber dan tujuan harus berada di lokasi yang sama.
    • Untuk Table name, masukkan nama tabel baru. Nama di set data tujuan harus unik. Anda tidak dapat menimpa tabel yang sudah ada di set data tujuan menggunakan Konsol Google Cloud. Untuk informasi selengkapnya tentang persyaratan nama tabel, lihat Penamaan tabel.
  4. Klik Copy untuk memulai tugas penyalinan.

SQL

Gunakan pernyataan CREATE TABLE COPY untuk menyalin tabel bernama table1 ke tabel baru bernama table1copy:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    CREATE TABLE myproject.mydataset.table1copy
    COPY myproject.mydataset.table1;

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Berikan perintah bq cp. Flag opsional dapat digunakan untuk mengontrol disposisi tulis tabel tujuan:

    • -a atau --append_table menambahkan data dari tabel sumber ke tabel yang ada di set data tujuan.
    • -f atau --force menimpa tabel yang ada di set data tujuan dan tidak meminta konfirmasi Anda.
    • -n atau --no_clobber menampilkan pesan error berikut jika tabel ada di set data tujuan: Table 'project_id:dataset.table' already exists, skipping. Jika -n tidak ditentukan, perilaku defaultnya adalah meminta Anda untuk memilih apakah akan mengganti tabel tujuan.
    • --destination_kms_key adalah kunci Cloud KMS yang dikelola pelanggan yang digunakan untuk mengenkripsi tabel tujuan.

    --destination_kms_key tidak ditunjukkan di sini. Lihat bagian Melindungi data dengan kunci Cloud Key Management Service untuk informasi selengkapnya.

    Jika set data sumber atau tujuan berada di project selain project default Anda, tambahkan project ID ke nama set data dalam format berikut: project_id:dataset.

    (Opsional) Berikan flag --location dan tetapkan nilainya ke lokasi Anda.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table \
    project_id:dataset.destination_table

    Ganti kode berikut:

    • location: nama lokasi Anda. Flag --location bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag ke asia-northeast1. Anda dapat menetapkan nilai default untuk lokasi menggunakan file .bigqueryrc.
    • project_id: project ID Anda.
    • dataset: nama set data sumber atau tujuan.
    • source_table: tabel yang Anda salin.
    • destination_table: nama tabel dalam set data tujuan.

    Contoh:

    Untuk menyalin tabel mydataset.mytable ke tabel mydataset2.mytable2, masukkan perintah berikut. Kedua set data berada di project default Anda.

    bq cp mydataset.mytable mydataset2.mytable2
    

    Untuk menyalin tabel mydataset.mytable dan menimpa tabel tujuan dengan nama yang sama, masukkan perintah berikut. Set data sumber berada di project default Anda. Set data tujuan berada di project myotherproject. Pintasan -f digunakan untuk menimpa tabel tujuan tanpa prompt.

    bq cp -f \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Untuk menyalin tabel mydataset.mytable dan menampilkan error jika set data tujuan berisi tabel dengan nama yang sama, masukkan perintah berikut. Set data sumber berada di project default Anda. Set data tujuan berada di project myotherproject. Pintasan -n digunakan untuk mencegah penimpaan tabel dengan nama yang sama.

    bq cp -n \
    mydataset.mytable \
    myotherproject:myotherdataset.mytable

    Untuk menyalin tabel mydataset.mytable dan menambahkan data ke tabel tujuan dengan nama yang sama, masukkan perintah berikut. Set data sumber berada di project default Anda. Set data tujuan berada di project myotherproject. Pintasan - a digunakan untuk melakukan penambahan ke tabel tujuan.

    bq cp -a mydataset.mytable myotherproject:myotherdataset.mytable
    

API

Anda dapat menyalin tabel yang ada melalui API dengan memanggil metode bigquery.jobs.insert, dan mengonfigurasi tugas copy. Tentukan lokasi Anda di properti location di bagian jobReference di resource tugas.

Anda harus menentukan nilai berikut dalam konfigurasi tugas:

"copy": {
      "sourceTable": {       // Required
        "projectId": string, // Required
        "datasetId": string, // Required
        "tableId": string    // Required
      },
      "destinationTable": {  // Required
        "projectId": string, // Required
        "datasetId": string, // Required
        "tableId": string    // Required
      },
      "createDisposition": string,  // Optional
      "writeDisposition": string,   // Optional
    },

Dengan sourceTable memberikan informasi tentang tabel yang akan disalin, destinationTable memberikan informasi tentang tabel baru, createDisposition menentukan apakah akan membuat tabel jika tidak ada, dan writeDisposition menentukan apakah akan menimpa atau menambahkan tabel yang ada.

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery C# API.

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


using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryCopyTable
{
    public void CopyTable(
        string projectId = "your-project-id",
        string destinationDatasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference sourceTableRef = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        TableReference destinationTableRef = client.GetTableReference(
            destinationDatasetId, "destination_table");
        BigQueryJob job = client.CreateCopyJob(
            sourceTableRef, destinationTableRef)
            .PollUntilCompleted() // Wait for the job to complete.
            .ThrowOnAnyError();

        // Retrieve destination table
        BigQueryTable destinationTable = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Copied {destinationTable.Resource.NumRows} rows from table "
            + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
            + $"to {destinationTable.FullyQualifiedId}."
        );
    }
}

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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyTable demonstrates copying a table from a source to a destination, and
// allowing the copy to overwrite existing data by using truncation.
func copyTable(projectID, datasetID, srcID, dstID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// srcID := "sourcetable"
	// dstID := "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	dataset := client.Dataset(datasetID)
	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

public class CopyTable {

  public static void runCopyTable() {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
    String destinationTableId = "MY_DESTINATION_TABLE_NAME";
    String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
    String sourceTableId = "MY_SOURCE_TABLE_NAME";

    copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
  }

  public static void copyTable(
      String sourceDatasetName,
      String sourceTableId,
      String destinationDatasetName,
      String destinationTableId) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTable() {
  // Copies src_dataset:src_table to dest_dataset:dest_table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const srcDatasetId = "my_src_dataset";
  // const srcTableId = "my_src_table";
  // const destDatasetId = "my_dest_dataset";
  // const destTableId = "my_dest_table";

  // Copy the table contents into another table
  const [job] = await bigquery
    .dataset(srcDatasetId)
    .table(srcTableId)
    .copy(bigquery.dataset(destDatasetId).table(destTableId));

  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $sourceTableId   = 'The BigQuery table ID to copy from';
// $destinationTableId = 'The BigQuery table ID to copy to';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$sourceTable = $dataset->table($sourceTableId);
$destinationTable = $dataset->table($destinationTableId);
$copyConfig = $sourceTable->copy($destinationTable);
$job = $sourceTable->runJob($copyConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Table copied successfully' . PHP_EOL);
}

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.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"

# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"

job = client.copy_table(source_table_id, destination_table_id)
job.result()  # Wait for the job to complete.

print("A copy of the table created.")

Menyalin beberapa tabel sumber

Anda dapat menyalin beberapa tabel sumber ke tabel tujuan dengan cara berikut:

  • Menggunakan perintah bq cp alat command line bq.
  • Memanggil metode jobs.insert, mengonfigurasi tugas copy, dan menentukan properti sourceTables.
  • Menggunakan library klien.

Semua tabel sumber harus memiliki skema dan tag yang identik, dan hanya satu tabel tujuan yang diizinkan.

Tabel sumber harus ditetapkan sebagai daftar yang dipisahkan koma. Anda tidak dapat menggunakan karakter pengganti saat menyalin beberapa tabel sumber.

Untuk menyalin beberapa tabel sumber, pilih salah satu pilihan berikut:

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Berikan perintah bq cp dan sertakan beberapa tabel sumber sebagai daftar yang dipisahkan koma. Flag opsional dapat digunakan untuk mengontrol disposisi tulis tabel tujuan:

    • -a atau --append_table menambahkan data dari tabel sumber ke tabel yang ada di set data tujuan.
    • -f atau --force menimpa tabel tujuan yang ada di set data tujuan dan tidak meminta konfirmasi Anda.
    • -n atau --no_clobber menampilkan pesan error berikut jika tabel ada di set data tujuan: Table 'project_id:dataset.table' already exists, skipping. Jika -n tidak ditentukan, perilaku defaultnya adalah meminta Anda untuk memilih apakah akan mengganti tabel tujuan.
    • --destination_kms_key adalah kunci Cloud Key Management Service yang dikelola pelanggan yang digunakan untuk mengenkripsi tabel tujuan.

    --destination_kms_key tidak ditunjukkan di sini. Lihat bagian Melindungi data dengan kunci Cloud Key Management Service untuk informasi selengkapnya.

    Jika set data sumber atau tujuan berada di project selain project default Anda, tambahkan project ID ke nama set data dalam format berikut: project_id:dataset.

    (Opsional) Berikan flag --location dan tetapkan nilainya ke lokasi Anda.

    bq --location=location cp \
    -a -f -n \
    project_id:dataset.source_table,project_id:dataset.source_table \
    project_id:dataset.destination_table

    Ganti kode berikut:

    • location: nama lokasi Anda. Flag --location bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag ke asia-northeast1. Anda dapat menetapkan nilai default untuk lokasi menggunakan file .bigqueryrc.
    • project_id: project ID Anda.
    • dataset: nama set data sumber atau tujuan.
    • source_table: tabel yang Anda salin.
    • destination_table: nama tabel dalam set data tujuan.

    Contoh:

    Untuk menyalin tabel mydataset.mytable dan tabel mydataset.mytable2 ke tabel mydataset2.tablecopy, masukkan perintah berikut . Semua set data berada di project default Anda.

    bq cp \
    mydataset.mytable,mydataset.mytable2 \
    mydataset2.tablecopy

    Untuk menyalin tabel mydataset.mytable dan tabel mydataset.mytable2 ke tabel myotherdataset.mytable dan untuk menimpa tabel tujuan dengan nama yang sama, masukkan perintah berikut. Set data tujuan berada di project myotherproject, bukan di project default Anda. Pintasan -f digunakan untuk menimpa tabel tujuan tanpa perintah.

    bq cp -f \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Untuk menyalin tabel myproject:mydataset.mytable dan tabel myproject:mydataset.mytable2 serta menampilkan error jika set data tujuan berisi tabel dengan nama yang sama, masukkan perintah berikut. Set data tujuan berada di project myotherproject. Pintasan -n digunakan untuk mencegah menimpa tabel dengan nama yang sama.

    bq cp -n \
    myproject:mydataset.mytable,myproject:mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

    Untuk menyalin tabel mydataset.mytable dan tabel mydataset.mytable2 serta menambahkan data ke tabel tujuan dengan nama yang sama, masukkan perintah berikut. Set data sumber berada di project default Anda. Set data tujuan berada di project myotherproject. Pintasan -a digunakan untuk ditambahkan ke tabel tujuan.

    bq cp -a \
    mydataset.mytable,mydataset.mytable2 \
    myotherproject:myotherdataset.mytable

API

Untuk menyalin beberapa tabel menggunakan API, panggil metode jobs.insert, konfigurasikan tugas tabel copy, dan tentukan properti sourceTables.

Tentukan region Anda di 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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyMultiTable demonstrates using a copy job to copy multiple source tables into a single destination table.
func copyMultiTable(projectID, srcDatasetID string, srcTableIDs []string, dstDatasetID, dstTableID string) error {
	// projectID := "my-project-id"
	// srcDatasetID := "sourcedataset"
	// srcTableIDs := []string{"table1","table2"}
	// dstDatasetID = "destinationdataset"
	// dstTableID = "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	srcDataset := client.Dataset(srcDatasetID)
	dstDataset := client.Dataset(dstDatasetID)
	var tableRefs []*bigquery.Table
	for _, v := range srcTableIDs {
		tableRefs = append(tableRefs, srcDataset.Table(v))
	}
	copier := dstDataset.Table(dstTableID).CopierFrom(tableRefs...)
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;
import java.util.Arrays;

public class CopyMultipleTables {

  public static void runCopyMultipleTables() {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DATASET_NAME";
    String destinationTableId = "MY_TABLE_NAME";
    copyMultipleTables(destinationDatasetName, destinationTableId);
  }

  public static void copyMultipleTables(String destinationDatasetName, String destinationTableId) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(
                  destinationTable,
                  Arrays.asList(
                      TableId.of(destinationDatasetName, "table1"),
                      TableId.of(destinationDatasetName, "table2")))
              .build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy tables due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTableMultipleSource() {
  // Copy multiple source tables to a given destination.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // sourceTable = 'my_table';
  // destinationTable = 'testing';

  // Create a client
  const dataset = bigquery.dataset(datasetId);

  const metadata = {
    createDisposition: 'CREATE_NEVER',
    writeDisposition: 'WRITE_TRUNCATE',
  };

  // Create table references
  const table = dataset.table(sourceTable);
  const yourTable = dataset.table(destinationTable);

  // Copy table
  const [apiResponse] = await table.copy(yourTable, metadata);
  console.log(apiResponse.configuration.copy);
}

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.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dest_table_id to the ID of the destination table.
# dest_table_id = "your-project.your_dataset.your_table_name"

# TODO(developer): Set table_ids to the list of the IDs of the original tables.
# table_ids = ["your-project.your_dataset.your_table_name", ...]

job = client.copy_table(table_ids, dest_table_id)  # Make an API request.
job.result()  # Wait for the job to complete.

print("The tables {} have been appended to {}".format(table_ids, dest_table_id))

Menyalin tabel di seluruh region

Anda dapat menyalin tabel, snapshot tabel, atau clone tabel dari satu region BigQuery atau multi-region ke region lainnya. Hal ini mencakup semua tabel yang menerapkan Cloud KMS (CMEK) yang dikelola pelanggan. Tindakan ini akan menimbulkan biaya tambahan sesuai dengan harga BigQuery.

Untuk menyalin tabel di seluruh region, pilih salah satu opsi berikut:

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Jalankan perintah bq cp:

   bq cp \
   -f -n \
   SOURCE_PROJECT:SOURCE_DATASET.SOURCE_TABLE \
   DESTINATION_PROJECT:DESTINATION_DATASET.DESTINATION_TABLE
   

Ganti kode berikut:

  • SOURCE_PROJECT: project ID sumber. Jika set data sumber berada dalam project selain project default Anda, tambahkan project ID ke nama set data sumber.

  • DESTINATION_PROJECT: project ID tujuan. Jika set data tujuan berada dalam project selain project default Anda, tambahkan project ID ke nama set data tujuan.

  • SOURCE_DATASET: nama set data sumber.

  • DESTINATION_DATASET: nama set data tujuan.

  • SOURCE_TABLE: tabel yang Anda salin.

  • DESTINATION_TABLE: nama tabel dalam set data tujuan.

    Contoh:

    Untuk menyalin tabel mydataset_us.mytable dari multi-region us ke tabel mydataset_eu.mytable2 di multi-region eu, masukkan perintah berikut. Kedua set data berada di project default Anda.

    bq cp --sync=false mydataset_us.mytable mydataset_eu.mytable2
    

    Untuk menyalin tabel yang mengaktifkan CMEK, Anda dapat membuat kunci menggunakan Cloud KMS dan menentukan kunci dalam perintah bq cp atau menggunakan set data tujuan dengan CMEK default yang dikonfigurasi. Contoh berikut menentukan CMEK tujuan dalam perintah bq cp.

    bq cp --destination_kms_key=projects/testing/locations/us/keyRings/us_key/cryptoKeys/eu_key mydataset_us.mytable mydataset_eu.mytable2
    

API

Untuk menyalin tabel di seluruh region menggunakan API, panggil metode jobs.insert dan konfigurasikan tugas copy tabel.

Tentukan region Anda di properti location di bagian jobReference pada resource tugas.

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery C# API.

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


using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryCopyTable
{
    public void CopyTable(
        string projectId = "your-project-id",
        string destinationDatasetId = "your_dataset_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference sourceTableRef = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        TableReference destinationTableRef = client.GetTableReference(
            destinationDatasetId, "destination_table");
        BigQueryJob job = client.CreateCopyJob(
            sourceTableRef, destinationTableRef)
            .PollUntilCompleted() // Wait for the job to complete.
            .ThrowOnAnyError();

        // Retrieve destination table
        BigQueryTable destinationTable = client.GetTable(destinationTableRef);
        Console.WriteLine(
            $"Copied {destinationTable.Resource.NumRows} rows from table "
            + $"{sourceTableRef.DatasetId}.{sourceTableRef.TableId} "
            + $"to {destinationTable.FullyQualifiedId}."
        );
    }
}

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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// copyTable demonstrates copying a table from a source to a destination, and
// allowing the copy to overwrite existing data by using truncation.
func copyTable(projectID, datasetID, srcID, dstID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// srcID := "sourcetable"
	// dstID := "destinationtable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	dataset := client.Dataset(datasetID)
	copier := dataset.Table(dstID).CopierFrom(dataset.Table(srcID))
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

public class CopyTable {

  public static void runCopyTable() {
    // TODO(developer): Replace these variables before running the sample.
    String destinationDatasetName = "MY_DESTINATION_DATASET_NAME";
    String destinationTableId = "MY_DESTINATION_TABLE_NAME";
    String sourceDatasetName = "MY_SOURCE_DATASET_NAME";
    String sourceTableId = "MY_SOURCE_TABLE_NAME";

    copyTable(sourceDatasetName, sourceTableId, destinationDatasetName, destinationTableId);
  }

  public static void copyTable(
      String sourceDatasetName,
      String sourceTableId,
      String destinationDatasetName,
      String destinationTableId) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId sourceTable = TableId.of(sourceDatasetName, sourceTableId);
      TableId destinationTable = TableId.of(destinationDatasetName, destinationTableId);

      // For more information on CopyJobConfiguration see:
      // https://googleapis.dev/java/google-cloud-clients/latest/com/google/cloud/bigquery/JobConfiguration.html
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(destinationTable, sourceTable).build();

      // For more information on Job see:
      // https://googleapis.dev/java/google-cloud-clients/latest/index.html?com/google/cloud/bigquery/package-summary.html
      Job job = bigquery.create(JobInfo.of(configuration));

      // Blocks until this job completes its execution, either failing or succeeding.
      Job completedJob = job.waitFor();
      if (completedJob == null) {
        System.out.println("Job not executed since it no longer exists.");
        return;
      } else if (completedJob.getStatus().getError() != null) {
        System.out.println(
            "BigQuery was unable to copy table due to an error: \n" + job.getStatus().getError());
        return;
      }
      System.out.println("Table copied successfully.");
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table copying job was interrupted. \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function copyTable() {
  // Copies src_dataset:src_table to dest_dataset:dest_table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const srcDatasetId = "my_src_dataset";
  // const srcTableId = "my_src_table";
  // const destDatasetId = "my_dest_dataset";
  // const destTableId = "my_dest_table";

  // Copy the table contents into another table
  const [job] = await bigquery
    .dataset(srcDatasetId)
    .table(srcTableId)
    .copy(bigquery.dataset(destDatasetId).table(destTableId));

  console.log(`Job ${job.id} completed.`);

  // Check the job's status for errors
  const errors = job.status.errors;
  if (errors && errors.length > 0) {
    throw errors;
  }
}

PHP

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.

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

use Google\Cloud\BigQuery\BigQueryClient;
use Google\Cloud\Core\ExponentialBackoff;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $sourceTableId   = 'The BigQuery table ID to copy from';
// $destinationTableId = 'The BigQuery table ID to copy to';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$sourceTable = $dataset->table($sourceTableId);
$destinationTable = $dataset->table($destinationTableId);
$copyConfig = $sourceTable->copy($destinationTable);
$job = $sourceTable->runJob($copyConfig);

// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    print('Waiting for job to complete' . PHP_EOL);
    $job->reload();
    if (!$job->isComplete()) {
        throw new Exception('Job has not yet completed', 500);
    }
});
// check if the job has errors
if (isset($job->info()['status']['errorResult'])) {
    $error = $job->info()['status']['errorResult']['message'];
    printf('Error running job: %s' . PHP_EOL, $error);
} else {
    print('Table copied successfully' . PHP_EOL);
}

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.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set source_table_id to the ID of the original table.
# source_table_id = "your-project.source_dataset.source_table"

# TODO(developer): Set destination_table_id to the ID of the destination table.
# destination_table_id = "your-project.destination_dataset.destination_table"

job = client.copy_table(source_table_id, destination_table_id)
job.result()  # Wait for the job to complete.

print("A copy of the table created.")

Batasan

Menyalin tabel di seluruh wilayah tunduk pada batasan berikut:

  • Anda tidak dapat menyalin tabel menggunakan konsol Google Cloud atau pernyataan TABLE COPY DDL.
  • Anda tidak dapat menyalin tabel jika ada tag kebijakan di tabel sumber.
  • Anda tidak dapat menyalin tabel jika tabel sumber lebih besar dari 20 TiB fisik. Lihat mendapatkan informasi tentang tabel untuk mengetahui ukuran fisik tabel sumber.
  • Anda tidak dapat menyalin kebijakan IAM yang terkait dengan tabel. Anda dapat menerapkan kebijakan yang sama ke tujuan setelah penyalinan selesai.
  • Jika operasi salinan menimpa tabel yang ada, tag pada tabel yang ada akan dihapus.
  • Anda tidak dapat menyalin beberapa tabel sumber ke dalam satu tabel tujuan.
  • Anda tidak dapat menyalin tabel dalam mode tambahan.
  • Informasi perjalanan waktu tidak disalin ke region tujuan.
  • Saat Anda menyalin clone atau snapshot tabel ke region baru, salinan lengkap tabel akan dibuat. Hal ini akan menimbulkan biaya penyimpanan tambahan.

Melihat penggunaan kuota saat ini

Anda dapat melihat penggunaan tugas kueri, pemuatan, ekstrak, atau penyalinan saat ini dengan menjalankan kueri INFORMATION_SCHEMA untuk melihat metadata tentang tugas yang dijalankan selama jangka waktu yang ditentukan. Anda dapat membandingkan penggunaan saat ini dengan batas kuota untuk menentukan penggunaan kuota jenis tugas tertentu. Contoh kueri berikut menggunakan tabel virtual INFORMATION_SCHEMA.JOBS untuk mencantumkan jumlah tugas kueri, pemuatan, ekstrak, dan penyalinan menurut project:

SELECT
  sum(case  when job_type="QUERY" then 1 else 0 end) as QRY_CNT,
  sum(case  when job_type="LOAD" then 1 else 0 end) as LOAD_CNT,
  sum(case  when job_type="EXTRACT" then 1 else 0 end) as EXT_CNT,
  sum(case  when job_type="COPY" then 1 else 0 end) as CPY_CNT
FROM `region-eu`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE date(creation_time)= CURRENT_DATE()

Untuk melihat batas kuota tugas penyalinan, lihat Kuota dan batas - Tugas penyalinan.

Menghapus tabel

Anda dapat menghapus tabel dengan cara berikut:

  • Menggunakan Konsol Google Cloud.
  • Menggunakan pernyataan DROP TABLE bahasa definisi data (DDL).
  • Menggunakan perintah bq rm alat command line bq.
  • Memanggil metode API tables.delete.
  • Menggunakan library klien.

Untuk menghapus semua tabel dalam set data, hapus set data.

Saat Anda menghapus tabel, semua data di tabel tersebut juga dihapus. Untuk menghapus tabel secara otomatis setelah jangka waktu tertentu, tetapkan masa berlaku tabel default untuk set data atau tetapkan waktu habis masa berlaku saat Anda membuat tabel.

Menghapus tabel juga akan menghapus semua izin yang terkait dengan tabel ini. Saat membuat ulang tabel yang dihapus, Anda juga harus mengonfigurasi ulang izin akses apa pun yang sebelumnya terkait dengan tabel tersebut secara manual.

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan guna menghapus tabel, minta administrator untuk memberi Anda peran IAM Data Editor (roles/bigquery.dataEditor) pada set data. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk menghapus tabel. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk menghapus tabel:

  • bigquery.tables.delete
  • bigquery.tables.get

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Menghapus tabel

Untuk menghapus tabel:

Konsol

  1. Di panel Explorer, luaskan project dan set data Anda, lalu pilih tabel.

  2. Di panel detail, klik Delete table.

  3. Ketik "delete" dalam dialog, lalu klik Delete untuk mengonfirmasinya.

SQL

Gunakan pernyataan DROP TABLE. Contoh berikut menghapus tabel bernama mytable:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    DROP TABLE mydataset.mytable;

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Gunakan perintah bq rm dengan flag --table (atau pintasan -t) untuk menghapus tabel. Saat menggunakan alat command line bq untuk menghapus tabel, Anda harus mengonfirmasi tindakan tersebut. Anda dapat menggunakan flag --force (atau pintasan -f) untuk melewati konfirmasi.

    Jika tabel berada di set data dalam project selain project default Anda, tambahkan project ID ke nama set data dalam format berikut: project_id:dataset.

    bq rm \
    -f \
    -t \
    project_id:dataset.table

    Ganti yang berikut ini:

    • project_id: project ID Anda.
    • dataset: nama set data yang berisi tabel
    • table: nama tabel yang Anda hapus

    Contoh:

    Untuk menghapus tabel mytable dari set data mydataset, masukkan perintah berikut. Set data mydataset berada di project default Anda.

    bq rm -t mydataset.mytable
    

    Untuk menghapus tabel mytable dari set data mydataset, masukkan perintah berikut. Set data mydataset berada di project myotherproject, bukan di project default Anda.

    bq rm -t myotherproject:mydataset.mytable
    

    Untuk menghapus tabel mytable dari set data mydataset, masukkan perintah berikut. Set data mydataset berada di project default Anda. Perintah ini menggunakan pintasan -f untuk mengabaikan konfirmasi.

    bq rm -f -t mydataset.mytable
    

API

Panggil metode API tables.delete dan tentukan tabel yang akan dihapus menggunakan parameter tableId.

C#

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery C# API.

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


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

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.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

public class DeleteTable {

  public static void runDeleteTable() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    deleteTable(datasetName, tableName);
  }

  public static void deleteTable(String datasetName, String tableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();
      boolean success = bigquery.delete(TableId.of(datasetName, tableName));
      if (success) {
        System.out.println("Table deleted successfully");
      } else {
        System.out.println("Table was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Table was not deleted. \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.

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

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

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.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Ruby

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Ruby API.

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

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

Memulihkan tabel yang dihapus

Anda dapat membatalkan penghapusan tabel dalam periode perjalanan waktu yang ditentukan untuk set data, termasuk penghapusan eksplisit dan penghapusan implisit karena akhir masa berlaku tabel. Anda dapat mengonfigurasi periode perjalanan waktu. Untuk membatalkan penghapusan seluruh set data, lihat Membatalkan penghapusan set data.

Periode perjalanan waktu dapat memiliki durasi antara dua dan tujuh hari. Setelah periode perjalanan waktu berakhir, BigQuery menyediakan periode fail-safe tempat data yang dihapus otomatis disimpan selama tujuh hari lagi. Setelah periode pengamanan gagal berlalu, Anda tidak dapat membatalkan penghapusan tabel menggunakan metode apa pun, termasuk membuka tiket dukungan.

Saat Anda memulihkan tabel dari data historis, tag dari tabel sumber tidak disalin ke tabel tujuan.

Anda dapat memulihkan tabel yang telah dihapus, tetapi masih dalam jangka waktu perjalanan dengan menyalin tabel tersebut ke tabel baru, menggunakan dekorator waktu @<time>. Untuk menyalin tabel, Anda dapat menggunakan alat command line bq atau library klien:

Konsol

Anda tidak dapat membatalkan penghapusan tabel menggunakan Konsol Google Cloud.

bq

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Untuk memulihkan tabel, tentukan terlebih dahulu stempel waktu UNIX saat tabel ada (dalam milidetik). Anda dapat menggunakan perintah date Linux untuk membuat stempel waktu Unix dari nilai stempel waktu reguler:

    date -d '2023-08-04 16:00:34.456789Z' +%s000
    
  3. Kemudian, gunakan perintah bq copy dengan dekorator perjalanan waktu @<time> untuk melakukan operasi penyalinan tabel.

    Misalnya, masukkan perintah berikut untuk menyalin tabel mydataset.mytable pada saat 1418864998000 ke tabel baru mydataset.newtable.

    bq cp mydataset.mytable@1418864998000 mydataset.newtable
    

    (Opsional) Berikan flag --location dan tetapkan nilainya ke lokasi Anda.

    Anda juga dapat menentukan offset relatif. Contoh berikut menyalin versi tabel dari satu jam yang lalu:

    bq cp mydataset.mytable@-3600000 mydataset.newtable
    

    Untuk informasi selengkapnya, lihat Memulihkan tabel dari titik waktu.

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.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// deleteAndUndeleteTable demonstrates how to recover a deleted table by copying it from a point in time
// that predates the deletion event.
func deleteAndUndeleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ds := client.Dataset(datasetID)
	if _, err := ds.Table(tableID).Metadata(ctx); err != nil {
		return err
	}
	// Record the current time.  We'll use this as the snapshot time
	// for recovering the table.
	snapTime := time.Now()

	// "Accidentally" delete the table.
	if err := client.Dataset(datasetID).Table(tableID).Delete(ctx); err != nil {
		return err
	}

	// Construct the restore-from tableID using a snapshot decorator.
	snapshotTableID := fmt.Sprintf("%s@%d", tableID, snapTime.UnixNano()/1e6)
	// Choose a new table ID for the recovered table data.
	recoverTableID := fmt.Sprintf("%s_recovered", tableID)

	// Construct and run a copy job.
	copier := ds.Table(recoverTableID).CopierFrom(ds.Table(snapshotTableID))
	copier.WriteDisposition = bigquery.WriteTruncate
	job, err := copier.Run(ctx)
	if err != nil {
		return err
	}
	status, err := job.Wait(ctx)
	if err != nil {
		return err
	}
	if err := status.Err(); err != nil {
		return err
	}

	ds.Table(recoverTableID).Delete(ctx)
	return nil
}

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.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.CopyJobConfiguration;
import com.google.cloud.bigquery.Job;
import com.google.cloud.bigquery.JobInfo;
import com.google.cloud.bigquery.TableId;

// Sample to undeleting a table
public class UndeleteTable {

  public static void runUndeleteTable() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_TABLE";
    String recoverTableName = "MY_RECOVER_TABLE_TABLE";
    undeleteTable(datasetName, tableName, recoverTableName);
  }

  public static void undeleteTable(String datasetName, String tableName, String recoverTableName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // "Accidentally" delete the table.
      bigquery.delete(TableId.of(datasetName, tableName));

      // Record the current time.  We'll use this as the snapshot time
      // for recovering the table.
      long snapTime = System.currentTimeMillis();

      // Construct the restore-from tableID using a snapshot decorator.
      String snapshotTableId = String.format("%s@%d", tableName, snapTime);

      // Construct and run a copy job.
      CopyJobConfiguration configuration =
          CopyJobConfiguration.newBuilder(
                  // Choose a new table ID for the recovered table data.
                  TableId.of(datasetName, recoverTableName),
                  TableId.of(datasetName, snapshotTableId))
              .build();

      Job job = bigquery.create(JobInfo.of(configuration));
      job = job.waitFor();
      if (job.isDone() && job.getStatus().getError() == null) {
        System.out.println("Undelete table recovered successfully.");
      } else {
        System.out.println(
            "BigQuery was unable to copy the table due to an error: \n"
                + job.getStatus().getError());
        return;
      }
    } catch (BigQueryException | InterruptedException e) {
      System.out.println("Table not found. \n" + e.toString());
    }
  }
}

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.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function undeleteTable() {
  // Undeletes "my_table_to_undelete" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table_to_undelete";
  // const recoveredTableId = "my_recovered_table";

  /**
   * TODO(developer): Choose an appropriate snapshot point as epoch milliseconds.
   * For this example, we choose the current time as we're about to delete the
   * table immediately afterwards.
   */
  const snapshotEpoch = Date.now();

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);

  // Construct the restore-from table ID using a snapshot decorator.
  const snapshotTableId = `${tableId}@${snapshotEpoch}`;

  // Construct and run a copy job.
  await bigquery
    .dataset(datasetId)
    .table(snapshotTableId)
    .copy(bigquery.dataset(datasetId).table(recoveredTableId));

  console.log(
    `Copied data from deleted table ${tableId} to ${recoveredTableId}`
  );
}

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.

import time

from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Choose a table to recover.
# table_id = "your-project.your_dataset.your_table"

# TODO(developer): Choose a new table ID for the recovered table data.
# recovered_table_id = "your-project.your_dataset.your_table_recovered"

# TODO(developer): Choose an appropriate snapshot point as epoch
# milliseconds. For this example, we choose the current time as we're about
# to delete the table immediately afterwards.
snapshot_epoch = int(time.time() * 1000)

# ...

# "Accidentally" delete the table.
client.delete_table(table_id)  # Make an API request.

# Construct the restore-from table ID using a snapshot decorator.
snapshot_table_id = "{}@{}".format(table_id, snapshot_epoch)

# Construct and run a copy job.
job = client.copy_table(
    snapshot_table_id,
    recovered_table_id,
    # Must match the source and destination tables location.
    location="US",
)  # Make an API request.

job.result()  # Wait for the job to complete.

print(
    "Copied data from deleted table {} to {}".format(table_id, recovered_table_id)
)

Jika mengantisipasi bahwa Anda mungkin ingin memulihkan tabel lebih lama dari yang diizinkan oleh periode perjalanan waktu, buat snapshot tabel dari tabel tersebut. Untuk informasi selengkapnya, lihat Snapshot tabel.

Keamanan tabel

Untuk mengontrol akses ke tabel di BigQuery, lihat Pengantar kontrol akses tabel.

Langkah berikutnya