Mengelola data tabel

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

  • Memuat data ke dalam tabel
  • Menambahkan atau menimpa data tabel
  • Menjelajahi (atau melihat pratinjau) data tabel
  • Membuat kueri data tabel
  • Mengubah data tabel menggunakan bahasa pengolahan data (DML)
  • Menyalin data tabel
  • Mengekspor data tabel

Untuk mengetahui informasi tentang cara mengelola skema tabel, lihat Mengubah skema tabel.

Sebelum memulai

Berikan peran yang memberikan izin yang diperlukan kepada pengguna yang perlu melakukan setiap tugas dalam dokumen ini. Izin yang diperlukan (jika ada) untuk melakukan tugas tercantum di bagian "Izin yang diperlukan" untuk tugas tersebut.

Memuat data ke tabel

Anda dapat memuat data saat membuat tabel, atau Anda dapat membuat tabel kosong dan memuat data nanti. Saat memuat data, Anda dapat menggunakan deteksi otomatis skema untuk format data yang didukung, atau Anda dapat menentukan skema.

Untuk informasi selengkapnya tentang pemuatan data, lihat dokumentasi untuk format dan lokasi data sumber Anda:

Menambahkan ke dan menimpa data tabel

Anda dapat menimpa data tabel menggunakan operasi kueri atau pemuatan. Anda dapat menambahkan data lain ke tabel yang ada dengan melakukan operasi penambahan muatan atau dengan menambahkan hasil kueri ke tabel.

Untuk informasi selengkapnya tentang cara menambahkan atau menimpa tabel saat memuat data, lihat dokumentasi untuk format data sumber Anda:

Untuk menambah atau menimpa tabel menggunakan hasil kueri, tentukan tabel tujuan dan tetapkan disposisi tulis ke:

  • Menambah tabel — Menambahkan hasil kueri ke tabel yang ada.
  • Menimpa tabel — Menimpa tabel yang ada dengan nama yang sama menggunakan hasil kueri.

Anda dapat menggunakan kueri berikut untuk menambahkan data dari satu tabel ke tabel lainnya:

  INSERT INTO <projectID>.<datasetID>.<table1> (
    <column2>,
    <column3>) (SELECT * FROM <projectID>.<datasetID>.<table2>)

Untuk informasi selengkapnya tentang penggunaan hasil kueri untuk menambah atau menimpa data, lihat Menulis hasil kueri.

Menjelajahi data tabel

Anda dapat menjelajahi data tabel dengan:

  • Menggunakan konsol Google Cloud
  • Menggunakan perintah bq head alat command line bq
  • Memanggil metode API tabledata.list
  • Menggunakan library klien

Izin yang diperlukan

Untuk menjelajahi data tabel dan partisi, Anda memerlukan izin Identity and Access Management (IAM) bigquery.tables.getData.

Setiap peran IAM yang telah ditetapkan berikut menyertakan izin yang diperlukan untuk menjelajahi data tabel dan partisi:

  • roles/bigquery.dataViewer
  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Jika memiliki izin bigquery.datasets.create, Anda dapat menjelajahi data dalam tabel dan partisi dari set data yang Anda buat.

Untuk mengetahui informasi lebih lanjut tentang peran dan izin IAM di BigQuery, lihat Peran dan izin yang telah ditetapkan.

Menjelajahi data tabel

Untuk menjelajahi data tabel:

Konsol

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di panel Explorer, luaskan project Anda dan pilih set data.

  3. Klik tabel dalam daftar.

  4. Klik Detail dan catat nilai dalam Jumlah baris. Anda mungkin memerlukan nilai ini untuk mengontrol titik awal hasil menggunakan alat command line bq atau API.

  5. Klik Pratinjau. Contoh set data akan ditampilkan.

    Pratinjau tabel

Command line

Berikan perintah bq head dengan flag --max_rows untuk mencantumkan semua kolom dalam jumlah baris tabel tertentu. Jika --max_rows tidak ditentukan, defaultnya adalah 100.

Untuk menjelajahi subset kolom dalam tabel (termasuk kolom bertingkat dan berulang), gunakan flag --selected_fields, lalu masukkan kolom sebagai daftar yang dipisahkan koma.

Untuk menentukan jumlah baris yang akan dilewati sebelum menampilkan data tabel, gunakan flag --start_row=integer (atau pintasan -s). Nilai defaultnya adalah 0. Anda dapat mengambil jumlah baris dalam tabel menggunakan perintah bq show untuk mengambil informasi tabel.

Jika tabel yang Anda cari berada dalam project selain project default Anda, tambahkan project ID ke perintah dalam format berikut: project_id:dataset.table.

bq head \
--max_rows integer1 \
--start_row integer2 \
--selected_fields "columns" \
project_id:dataset.table

Dengan keterangan:

  • integer1 adalah jumlah baris yang akan ditampilkan.
  • integer2 adalah jumlah baris yang akan dilewati sebelum menampilkan data.
  • columns adalah daftar kolom yang dipisahkan koma.
  • project_id adalah project ID Anda.
  • dataset adalah nama set data yang berisi tabel.
  • table adalah nama tabel yang akan dijelajahi.

Contoh:

Masukkan perintah berikut untuk mencantumkan semua kolom di 10 baris pertama dalam mydataset.mytable. mydataset berada di project default Anda.

bq head --max_rows=10 mydataset.mytable

Masukkan perintah berikut untuk mencantumkan semua kolom di 100 baris pertama dalam mydataset.mytable. mydataset ada di myotherproject, bukan project default Anda.

bq head myotherproject:mydataset.mytable

Masukkan perintah berikut untuk menampilkan field1 dan field2 saja di mydataset.mytable. Perintah ini menggunakan flag --start_row untuk langsung menuju ke baris 100. mydataset.mytable berada di project default Anda.

bq head --start_row 100 --selected_fields "field1,field2" mydataset.mytable

Karena perintah bq head tidak membuat tugas kueri, perintah bq head tidak muncul dalam histori kueri, dan Anda tidak dikenai biaya untuk perintah tersebut.

API

Jelajahi data tabel dengan memanggil tabledata.list. Tentukan nama tabel di parameter tableId.

Konfigurasikan parameter opsional ini untuk mengontrol output:

  • maxResults — Jumlah hasil maksimum yang akan ditampilkan
  • selectedFields — Daftar kolom yang dipisahkan koma yang akan ditampilkan. Jika tidak ditentukan, semua kolom akan ditampilkan
  • startIndex — Indeks berbasis nol dari baris awal yang akan dibaca

Nilai akan ditampilkan dan digabungkan dalam objek JSON yang harus Anda uraikan, seperti dijelaskan dalam dokumentasi referensi tabledata.list.

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.Api.Gax;
using Google.Apis.Bigquery.v2.Data;
using Google.Cloud.BigQuery.V2;
using System;
using System.Linq;

public class BigQueryBrowseTable
{
    public void BrowseTable(
        string projectId = "your-project-id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        TableReference tableReference = new TableReference()
        {
            TableId = "shakespeare",
            DatasetId = "samples",
            ProjectId = "bigquery-public-data"
        };
        // Load all rows from a table
        PagedEnumerable<TableDataList, BigQueryRow> result = client.ListRows(
            tableReference: tableReference,
            schema: null
        );
        // Print the first 10 rows
        foreach (BigQueryRow row in result.Take(10))
        {
            Console.WriteLine($"{row["corpus"]}: {row["word_count"]}");
        }
    }
}

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.

Library Klien Cloud untuk Go akan melakukan penomoran halaman secara otomatis secara default, sehingga Anda tidak perlu menerapkan penomoran halaman sendiri, misalnya:

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// browseTable demonstrates reading data from a BigQuery table directly without the use of a query.
// For large tables, we also recommend the BigQuery Storage API.
func browseTable(w io.Writer, 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)
	it := table.Read(ctx)
	for {
		var row []bigquery.Value
		err := it.Next(&row)
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintln(w, row)
	}
	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.BigQuery.TableDataListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableResult;

// Sample to directly browse a table with optional paging
public class BrowseTable {

  public static void runBrowseTable() {
    // TODO(developer): Replace these variables before running the sample.
    String table = "MY_TABLE_NAME";
    String dataset = "MY_DATASET_NAME";
    browseTable(dataset, table);
  }

  public static void browseTable(String dataset, String table) {
    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();

      // Identify the table itself
      TableId tableId = TableId.of(dataset, table);

      // Page over 100 records. If you don't need pagination, remove the pageSize parameter.
      TableResult result = bigquery.listTableData(tableId, TableDataListOption.pageSize(100));

      // Print the records
      result
          .iterateAll()
          .forEach(
              row -> {
                row.forEach(fieldValue -> System.out.print(fieldValue.toString() + ", "));
                System.out.println();
              });

      System.out.println("Query ran successfully");
    } catch (BigQueryException e) {
      System.out.println("Query failed to run \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.

Library Klien Cloud untuk Node.js akan diberi nomor halaman secara otomatis secara default, sehingga Anda tidak perlu menerapkan penomoran halaman sendiri, misalnya:


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

async function browseRows() {
  // Displays rows from "my_table" in "my_dataset".

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

  // List rows in the table
  const [rows] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .getRows();

  console.log('Rows:');
  rows.forEach(row => console.log(row));
}

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.

Penomoran halaman terjadi secara otomatis di Library Klien Cloud untuk PHP menggunakan fungsi generator rows, yang mengambil halaman hasil berikutnya selama iterasi.

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';
// $maxResults = 10;

$maxResults = 10;
$startIndex = 0;

$options = [
    'maxResults' => $maxResults,
    'startIndex' => $startIndex
];
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$numRows = 0;
foreach ($table->rows($options) as $row) {
    print('---');
    foreach ($row as $column => $value) {
        printf('%s: %s' . PHP_EOL, $column, $value);
    }
    $numRows++;
}

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 browse data rows.
# table_id = "your-project.your_dataset.your_table_name"

# Download all rows from a table.
rows_iter = client.list_rows(table_id)  # Make an API request.

# Iterate over rows to make the API requests to fetch row data.
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Download at most 10 rows.
rows_iter = client.list_rows(table_id, max_results=10)
rows = list(rows_iter)
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Specify selected fields to limit the results to certain columns.
table = client.get_table(table_id)  # Make an API request.
fields = table.schema[:2]  # First two columns.
rows_iter = client.list_rows(table_id, selected_fields=fields, max_results=10)
rows = list(rows_iter)
print("Selected {} columns from table {}.".format(len(rows_iter.schema), table_id))
print("Downloaded {} rows from table {}".format(len(rows), table_id))

# Print row data in tabular format.
rows = client.list_rows(table, max_results=10)
format_string = "{!s:<16} " * len(rows.schema)
field_names = [field.name for field in rows.schema]
print(format_string.format(*field_names))  # Prints column headers.
for row in rows:
    print(format_string.format(*row))  # Prints row data.

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.

Penomoran halaman dilakukan secara otomatis di Library Klien Cloud untuk Ruby menggunakan Table#data dan Data#next.

require "google/cloud/bigquery"

def browse_table
  bigquery = Google::Cloud::Bigquery.new project_id: "bigquery-public-data"
  dataset  = bigquery.dataset "samples"
  table    = dataset.table "shakespeare"

  # Load all rows from a table
  rows = table.data

  # Load the first 10 rows
  rows = table.data max: 10

  # Print row data
  rows.each { |row| puts row }
end

Membuat kueri data tabel

Anda dapat membuat kueri data BigQuery menggunakan salah satu jenis tugas kueri berikut:

  • Tugas kueri interaktif. Secara default, BigQuery menjalankan tugas kueri interaktif (sesuai permintaan) sesegera mungkin.
  • Tugas kueri berkelanjutan (Pratinjau). Dengan tugas ini, kueri berjalan terus-menerus, sehingga Anda dapat menganalisis data yang masuk di BigQuery secara real time, lalu menulis hasilnya ke tabel BigQuery, atau mengekspor hasilnya ke Bigtable atau Pub/Sub. Anda dapat menggunakan kemampuan ini untuk melakukan tugas yang sensitif terhadap waktu, seperti membuat dan segera menindaklanjuti insight, menerapkan inferensi machine learning (ML) real-time, dan membangun pipeline data berbasis peristiwa.

  • Tugas kueri batch. Dengan tugas ini, BigQuery akan mengantrekan setiap kueri batch atas nama Anda, lalu memulai kueri tersebut saat resource tanpa aktivitas tersedia, biasanya dalam beberapa menit.

Anda dapat menjalankan tugas kueri menggunakan metode berikut:

Untuk informasi lebih lanjut tentang cara membuat kueri tabel BigQuery, lihat Pengantar cara membuat kueri data BigQuery.

Selain membuat kueri pada data yang disimpan di tabel BigQuery, Anda dapat melakukan kueri pada data yang disimpan secara eksternal. Untuk informasi selengkapnya, lihat Pengantar sumber data eksternal.

Memodifikasi data tabel

Anda dapat mengubah data dalam tabel menggunakan pernyataan bahasa pengolahan data (DML) di SQL. Pernyataan DML memungkinkan Anda memperbarui, menggabungkan, menyisipkan, dan menghapus baris dalam tabel. Untuk referensi sintaksis dan contoh setiap jenis pernyataan DML, lihat Pernyataan bahasa manipulasi data di GoogleSQL.

Dialek legacy SQL tidak mendukung pernyataan DML. Untuk memperbarui atau menghapus data menggunakan legacy SQL, Anda harus menghapus tabel, lalu membuatnya ulang dengan data baru. Atau, Anda dapat menulis kueri yang mengubah data dan menulis hasil kueri ke tabel tujuan baru.

Menyalin data tabel

Anda dapat menyalin tabel dengan:

Untuk informasi selengkapnya tentang cara menyalin tabel, lihat Menyalin tabel.

Mengekspor data tabel

Anda dapat mengekspor data tabel ke bucket Cloud Storage dalam format CSV, JSON, Avro, atau Parquet (Pratinjau). Mengekspor ke komputer lokal Anda tidak didukung. Namun, Anda dapat mendownload dan menyimpan hasil kueri menggunakan konsol Google Cloud.

Untuk informasi selengkapnya, lihat Mengekspor data tabel.

Keamanan tabel

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

Langkah selanjutnya