Data pemuatan batch

Anda dapat memuat data ke BigQuery dari Cloud Storage atau dari file lokal sebagai operasi batch. Data sumber dapat menggunakan salah satu format berikut:

  • Avro
  • Nilai yang dipisahkan koma (CSV)
  • JSON (dibatasi baris baru)
  • ORC
  • Parquet
  • Ekspor Firestore disimpan di Cloud Storage.

Anda juga dapat menggunakan BigQuery Data Transfer Service untuk menyiapkan pemuatan berulang dari Cloud Storage ke BigQuery.

Cobalah sendiri

Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa BigQuery dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.

Coba BigQuery gratis

Sebelum memulai

Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini, dan buat set data untuk menyimpan data Anda.

Izin yang diperlukan

Untuk memuat data ke BigQuery, Anda memerlukan izin IAM untuk menjalankan tugas pemuatan dan memuat data ke dalam tabel dan partisi BigQuery. Jika memuat data dari Cloud Storage, Anda juga memerlukan izin IAM untuk mengakses bucket yang berisi data Anda.

Izin untuk memuat data ke BigQuery

Untuk memuat data ke dalam tabel atau partisi BigQuery baru, atau menambahkan atau menimpa tabel atau partisi yang sudah ada, Anda memerlukan izin IAM berikut:

  • bigquery.tables.create
  • bigquery.tables.updateData
  • bigquery.tables.update
  • bigquery.jobs.create

Setiap peran IAM yang telah ditetapkan berikut mencakup izin yang diperlukan untuk memuat data ke dalam tabel atau partisi BigQuery:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin (termasuk izin bigquery.jobs.create)
  • bigquery.user (termasuk izin bigquery.jobs.create)
  • bigquery.jobUser (termasuk izin bigquery.jobs.create)

Selain itu, jika memiliki izin bigquery.datasets.create, Anda dapat membuat dan memperbarui tabel menggunakan tugas pemuatan dalam set data yang Anda buat.

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

Izin untuk memuat data dari Cloud Storage

Untuk mendapatkan izin yang Anda perlukan untuk memuat data dari bucket Cloud Storage, minta administrator Anda untuk memberi Anda peran IAM Storage Admin (roles/storage.admin) di bucket. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.

Peran yang telah ditentukan ini berisi izin yang diperlukan untuk memuat data dari bucket Cloud Storage. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk memuat data dari bucket Cloud Storage:

  • storage.buckets.get
  • storage.objects.get
  • storage.objects.list (required if you are using a URI wildcard)

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran lainnya yang telah ditetapkan sebelumnya.

Membuat set data

Membuat set data BigQuery untuk menyimpan data Anda.

Memuat data dari Cloud Storage

BigQuery mendukung pemuatan data dari salah satu kelas penyimpanan Cloud Storage berikut:

  • Standar
  • Nearline
  • Coldline
  • Archive

Untuk mempelajari cara memuat data ke BigQuery, lihat halaman untuk format data Anda:

Untuk mempelajari cara mengonfigurasi pemuatan berulang dari Cloud Storage ke BigQuery, lihat Transfer Cloud Storage.

Pertimbangan lokasi

Saat Anda memuat data dari Cloud Storage menggunakan tabel eksternal BigLake atau non-BigLake, data yang Anda muat harus ditempatkan bersama dengan set data BigQuery Anda.

  • Anda dapat memuat data dari bucket Cloud Storage yang berada di lokasi mana pun jika set data BigQuery Anda berada di multi-region US."

  • Bucket multi-region: Jika bucket Cloud Storage yang ingin Anda muat terletak di bucket multi-region, maka set data BigQuery dapat berada di bucket multi-region yang sama atau satu region yang disertakan dalam bucket multi-region yang sama. Misalnya, jika bucket Cloud Storage berada di region EU, maka set data BigQuery Anda dapat berada di multi-region EU atau satu region mana pun di EU.
  • Bucket dual-region: Jika bucket Cloud Storage yang ingin Anda muat terletak di bucket dual-region, maka set data BigQuery dapat ditemukan di region yang disertakan di bucket dual-region, atau di multi-region yang mencakup dual-region. Misalnya, jika bucket Cloud Storage terletak di region EUR4, maka set data BigQuery Anda dapat berlokasi di Finlandia (europe-north1) satu region, Belanda (europe-west4) satu region, atau multi-region EU.

    Untuk mengetahui informasi selengkapnya, lihat Membuat bucket dual-region.

  • Bucket satu region: Jika bucket Cloud Storage yang ingin Anda muat berada di satu region, set data BigQuery bisa berada di satu region yang sama, atau di multi-region yang mencakup satu region. Misalnya, jika bucket Cloud Storage Anda berada di region Finlandia (europe-north1), set data BigQuery Anda dapat berada di Finlandia atau multi-region EU.

  • Satu pengecualian adalah jika set data BigQuery Anda berada di region asia-northeast1, bucket Cloud Storage Anda dapat berada di multi-region EU.

Untuk mengetahui informasi selengkapnya tentang lokasi Cloud Storage, lihat Lokasi bucket dalam dokumentasi Cloud Storage.

Anda tidak dapat mengubah lokasi set data setelah dibuat, tetapi Anda dapat membuat salinan set data atau memindahkannya secara manual. Untuk informasi selengkapnya, lihat:

Mengambil Cloud Storage URI

Untuk memuat data dari sumber data Cloud Storage, Anda harus menyediakan Cloud Storage URI.

Jalur resource Cloud Storage berisi nama bucket dan objek (nama file) Anda. Misalnya, jika bucket Cloud Storage bernama mybucket dan file datanya bernama myfile.csv, jalur resource-nya adalah gs://mybucket/myfile.csv.

BigQuery tidak mendukung jalur resource Cloud Storage yang mencakup beberapa garis miring berturut-turut setelah garis miring ganda di awal. Nama objek Cloud Storage dapat berisi beberapa karakter garis miring ("/") berturut-turut. Namun, BigQuery mengonversi beberapa garis miring berturut-turut menjadi satu garis miring. Misalnya, jalur resource berikut, meskipun valid di Cloud Storage, tidak berfungsi di BigQuery: gs://bucket/my//object//name.

Untuk mengambil jalur resource Cloud Storage:

  1. Buka Konsol Cloud Storage.

    Konsol Cloud Storage

  2. Jelajahi lokasi objek (file) yang berisi data sumber.

  3. Klik nama objek.

    Halaman Detail objek akan terbuka.

  4. Salin nilai yang diberikan di kolom gsutil URI, yang dimulai dengan gs://.

Untuk ekspor Google Datastore, hanya satu URI yang dapat ditentukan, dan harus diakhiri dengan .backup_info atau .export_metadata.

Dukungan karakter pengganti untuk Cloud Storage URI

Jika data dipisahkan menjadi beberapa file, Anda dapat menggunakan karakter pengganti tanda bintang (*) untuk memilih beberapa file. Penggunaan karakter pengganti tanda bintang harus mengikuti aturan berikut:

  • Tanda bintang dapat muncul di dalam nama objek atau di akhir nama objek.
  • Menggunakan beberapa tanda bintang tidak didukung. Misalnya, jalur gs://mybucket/fed-*/temp/*.csv tidak valid.
  • Penggunaan tanda bintang dengan nama bucket tidak didukung.

Contoh:

  • Contoh berikut menunjukkan cara memilih semua file di semua folder yang dimulai dengan awalan gs://mybucket/fed-samples/fed-sample:

    gs://mybucket/fed-samples/fed-sample*
    
  • Contoh berikut menunjukkan cara memilih file dengan ekstensi .csv saja di folder bernama fed-samples dan subfolder fed-samples apa pun:

    gs://mybucket/fed-samples/*.csv
    
  • Contoh berikut menunjukkan cara memilih file dengan pola penamaan fed-sample*.csv dalam folder bernama fed-samples. Contoh ini tidak memilih file di subfolder fed-samples.

    gs://mybucket/fed-samples/fed-sample*.csv
    

Saat menggunakan alat command line bq, Anda mungkin perlu meng-escape tanda bintang di beberapa platform.

Anda tidak dapat menggunakan karakter pengganti tanda bintang saat memuat data ekspor Datastore atau Firestore dari Cloud Storage.

Batasan

Anda harus tunduk kepada batasan berikut saat memuat data ke BigQuery dari bucket Cloud Storage:

  • Jika lokasi set data Anda ditetapkan ke nilai selain multi-region US, bucket Cloud Storage harus berada di region yang sama atau berada dalam multi-region yang sama dengan set data tersebut.
  • BigQuery tidak menjamin konsistensi data untuk sumber data eksternal. Perubahan pada data yang mendasari saat kueri berjalan dapat menyebabkan perilaku yang tidak terduga.
  • BigQuery tidak mendukung pembuatan versi objek Cloud Storage. Jika Anda menyertakan nomor pembuatan dalam Cloud Storage URI, tugas pemuatan akan gagal.

Bergantung pada format data sumber Cloud Storage Anda, mungkin ada batasan tambahan. Untuk informasi selengkapnya, lihat:

Memuat data dari file lokal

Anda dapat memuat data dari sumber data yang dapat dibaca (seperti komputer lokal) dengan menggunakan salah satu hal berikut:

  • Konsol Google Cloud
  • Perintah bq load alat command line bq
  • API
  • Library klien

Saat Anda memuat data menggunakan Konsol Google Cloud atau alat command line bq, tugas pemuatan akan otomatis dibuat.

Untuk memuat data dari sumber data lokal:

Konsol

  1. Buka halaman BigQuery di konsol Google Cloud.

    Buka halaman BigQuery

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

  3. Luaskan opsi Actions dan klik Open.

  4. Di panel detail, klik Create table .

  5. Di halaman Buat Tabel, di bagian Sumber:

    • Untuk Buat tabel dari, pilih Upload.
    • Untuk Pilih file, klik Browse.
    • Cari file, lalu klik Buka. Perhatikan bahwa karakter pengganti dan daftar yang dipisahkan koma tidak didukung untuk file lokal.
    • Untuk Format file, pilih CSV, JSON (newline delimited), Avro, Parquet , atau ORC.
  6. Di halaman Buat Tabel, di bagian Sumber:

    • Untuk Project, pilih project yang sesuai.
    • Untuk Set data, pilih set data yang sesuai.
    • Pada kolom Tabel, masukkan nama tabel yang Anda buat di BigQuery.
    • Pastikan Jenis Tabel disetel ke Native table.
  7. Di bagian Schema, masukkan definisi schema.

    • Untuk file CSV dan JSON, Anda dapat mencentang opsi Deteksi otomatis untuk mengaktifkan deteksi otomatis skema. Informasi skema dijelaskan sendiri dalam data sumber untuk jenis file lain yang didukung.

    • Anda juga dapat memasukkan informasi skema secara manual dengan:

      • Mengklik Edit sebagai teks dan memasukkan skema tabel sebagai array JSON:

      • Menggunakan Tambahkan Kolom untuk memasukkan skema secara manual.

  8. Pilih item yang berlaku di bagian Opsi lanjutan. Untuk mengetahui informasi tentang opsi yang tersedia, lihat opsi CSV dan opsi JSON.

  9. Opsional: Di Opsi lanjutan, pilih disposisi tulis:

    • Tulis jika kosong: Menulis data hanya jika tabel kosong.
    • Tambahkan ke tabel: Menambahkan data ke akhir tabel. Setelan ini adalah default.
    • Timpa tabel: Menghapus semua data yang ada di tabel sebelum menulis data baru.
  10. Klik Buat Tabel.

bq

Gunakan perintah bq load, tentukan source_format, dan sertakan jalur ke file lokal.

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

Jika Anda memuat data dalam project selain project default Anda, tambahkan project ID ke set data dalam format berikut: PROJECT_ID:DATASET.

bq --location=LOCATION load \
--source_format=FORMAT \
PROJECT_ID:DATASET.TABLE \
PATH_TO_SOURCE \
SCHEMA

Ganti kode berikut:

  • LOCATION: lokasi Anda. Flag --location bersifat opsional. Misalnya, jika Anda menggunakan BigQuery di region Tokyo, tetapkan nilai flag ke asia-northeast1. Anda dapat menetapkan nilai default untuk lokasi menggunakan file .bigqueryrc.
  • FORMAT: CSV, AVRO, PARQUET, ORC, atau NEWLINE_DELIMITED_JSON.
  • project_id: project ID Anda.
  • dataset: set data yang sudah ada.
  • table: nama tabel tempat Anda memuat data.
  • path_to_source: jalur ke file lokal.
  • schema: skema yang valid. Skema dapat berupa file JSON lokal, atau dapat diketik secara inline sebagai bagian dari perintah. Anda juga dapat menggunakan flag --autodetect alih-alih memberikan definisi skema.

Selain itu, Anda dapat menambahkan flag untuk opsi yang memungkinkan Anda mengontrol cara BigQuery mengurai data Anda. Misalnya, Anda dapat menggunakan tanda --skip_leading_rows untuk mengabaikan baris header dalam file CSV. Untuk mengetahui informasi selengkapnya, lihat opsi CSV dan opsi JSON.

Contoh:

Perintah berikut memuat file JSON lokal yang dibatasi baris baru (mydata.json) ke tabel bernama mytable di mydataset dalam project default Anda. Skema ditetapkan dalam file skema lokal bernama myschema.json.

    bq load \
    --source_format=NEWLINE_DELIMITED_JSON \
    mydataset.mytable \
    ./mydata.json \
    ./myschema.json

Perintah berikut memuat file CSV lokal (mydata.csv) ke tabel bernama mytable dalam mydataset di myotherproject. Skema ditentukan sebagai bagian dalam format FIELD:DATA_TYPE, FIELD:DATA_TYPE.

    bq load \
    --source_format=CSV \
    myotherproject:mydataset.mytable \
    ./mydata.csv \
    qtr:STRING,sales:FLOAT,year:STRING

Perintah berikut memuat file CSV lokal (mydata.csv) ke tabel bernama mytable di mydataset dalam project default Anda. Skema ditentukan menggunakan deteksi otomatis skema.

    bq load \
    --autodetect \
    --source_format=CSV \
    mydataset.mytable \
    ./mydata.csv

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal format lain, gunakan class opsi update untuk format yang sesuai dari class dasar JobCreationOptions, bukan UploadCsvOptions.


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

public class BigQueryLoadFromFile
{
    public void LoadFromFile(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id",
        string filePath = "path/to/file.csv"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        // Create job configuration
        var uploadCsvOptions = new UploadCsvOptions()
        {
            SkipLeadingRows = 1,  // Skips the file headers
            Autodetect = true
        };
        using (FileStream stream = File.Open(filePath, FileMode.Open))
        {
            // Create and run job
            // Note that there are methods available for formats other than CSV
            BigQueryJob job = client.UploadCsv(
                datasetId, tableId, null, stream, uploadCsvOptions);
            job = job.PollUntilCompleted().ThrowOnAnyError();  // Waits for the job to complete.

            // Display the number of rows uploaded
            BigQueryTable table = client.GetTable(datasetId, tableId);
            Console.WriteLine(
                $"Loaded {table.Resource.NumRows} rows to {table.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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal format lain, setel properti DataFormat dari NewReaderSource ke format yang sesuai.

import (
	"context"
	"fmt"
	"os"

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

// importCSVFromFile demonstrates loading data into a BigQuery table using a file on the local filesystem.
func importCSVFromFile(projectID, datasetID, tableID, filename 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()

	f, err := os.Open(filename)
	if err != nil {
		return err
	}
	source := bigquery.NewReaderSource(f)
	source.AutoDetect = true   // Allow BigQuery to determine schema.
	source.SkipLeadingRows = 1 // CSV has a single header line.

	loader := client.Dataset(datasetID).Table(tableID).LoaderFrom(source)

	job, err := loader.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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal dengan format lain, setel FormatOptions ke format yang sesuai.

TableId tableId = TableId.of(datasetName, tableName);
WriteChannelConfiguration writeChannelConfiguration =
    WriteChannelConfiguration.newBuilder(tableId).setFormatOptions(FormatOptions.csv()).build();
// The location must be specified; other fields can be auto-detected.
JobId jobId = JobId.newBuilder().setLocation(location).build();
TableDataWriteChannel writer = bigquery.writer(jobId, writeChannelConfiguration);
// Write data to writer
try (OutputStream stream = Channels.newOutputStream(writer)) {
  Files.copy(csvPath, stream);
}
// Get load job
Job job = writer.getJob();
job = job.waitFor();
LoadStatistics stats = job.getStatistics();
return stats.getOutputRows();

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal format lain, tetapkan parameter metadata fungsi load ke format yang sesuai.

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

async function loadLocalFile() {
  // Imports a local file into a table.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const filename = '/path/to/file.csv';
  // const datasetId = 'my_dataset';
  // const tableId = 'my_table';

  // Load data from a local file into the table
  const [job] = await bigquery
    .dataset(datasetId)
    .table(tableId)
    .load(filename);

  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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal dengan format lain, setel sourceFormat ke format yang sesuai.

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';
// $tableId    = 'The BigQuery table ID';
// $source     = 'The path to the CSV source file to import';

// instantiate the bigquery table service
$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
// create the import job
$loadConfig = $table->load(fopen($source, 'r'))->sourceFormat('CSV');

$job = $table->runJob($loadConfig);
// poll the job until it is complete
$backoff = new ExponentialBackoff(10);
$backoff->execute(function () use ($job) {
    printf('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('Data imported 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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal dalam format lain, tetapkan properti LoadJobConfig.source_format ke format yang sesuai.

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

job_config = bigquery.LoadJobConfig(
    source_format=bigquery.SourceFormat.CSV, skip_leading_rows=1, autodetect=True,
)

with open(file_path, "rb") as source_file:
    job = client.load_table_from_file(source_file, table_id, job_config=job_config)

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

table = client.get_table(table_id)  # Make an API request.
print(
    "Loaded {} rows and {} columns to {}".format(
        table.num_rows, len(table.schema), 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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

Kode berikut menunjukkan cara memuat file CSV lokal ke tabel BigQuery yang baru. Untuk memuat file lokal format lain, tetapkan parameter format metode Table#load_job ke format yang sesuai.

require "google/cloud/bigquery"

def load_from_file dataset_id = "your_dataset_id",
                   file_path  = "path/to/file.csv"

  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table_id = "new_table_id"

  # Infer the config.location based on the location of the referenced dataset.
  load_job = dataset.load_job table_id, file_path do |config|
    config.skip_leading = 1
    config.autodetect   = true
  end
  load_job.wait_until_done! # Waits for table load to complete.

  table = dataset.table table_id
  puts "Loaded #{table.rows_count} rows into #{table.id}"
end

Batasan

Pemuatan data dari sumber data lokal tunduk pada batasan berikut:

  • Karakter pengganti dan daftar yang dipisahkan koma tidak didukung saat Anda memuat file dari sumber data lokal. File harus dimuat satu per satu.
  • Saat menggunakan konsol Google Cloud, file yang dimuat dari sumber data lokal tidak boleh melebihi 100 MB. Untuk file yang lebih besar, muat file dari Cloud Storage.

Memuat data yang dikompresi dan tidak dikompresi

Untuk format Avro, Parquet, dan ORC, BigQuery mendukung pemuatan file dengan data file yang telah dikompresi menggunakan codec yang didukung. Namun, BigQuery tidak mendukung pemuatan file dalam format yang telah dikompresi sendiri, misalnya dengan menggunakan aplikasi utilitas gzip.

Format biner Avro adalah format yang lebih disukai untuk memuat data yang dikompresi dan tidak dikompresi. Data Avro lebih cepat dimuat karena data dapat dibaca secara paralel, bahkan saat blok data dikompresi. Untuk daftar codec kompresi yang didukung, lihat Kompresi avro.

Format biner Parquet juga merupakan pilihan yang bagus karena encoding per kolom Parquet yang efisien biasanya menghasilkan rasio kompresi yang lebih baik dan file yang lebih kecil. File Parquet juga memanfaatkan teknik kompresi yang memungkinkan file dimuat secara paralel. Untuk daftar codec kompresi yang didukung, lihat Kompresi Parquet.

Format biner ORC menawarkan manfaat yang mirip dengan manfaat format Parquet. Data dalam file ORC dapat dimuat dengan cepat karena jalur data dapat dibaca secara paralel. Baris di setiap jalur data dimuat secara berurutan. Untuk mengoptimalkan waktu pemuatan, gunakan ukuran jalur data sekitar 256 MB atau kurang. Untuk daftar codec kompresi yang didukung, lihat Kompresi ORC.

Untuk format data lain seperti CSV dan JSON, BigQuery dapat memuat file yang tidak dikompresi secara signifikan lebih cepat daripada file terkompresi karena file yang tidak dikompresi dapat dibaca secara paralel. Karena file yang tidak dikompresi lebih besar, penggunaannya dapat menyebabkan batasan bandwidth dan biaya Cloud Storage yang lebih tinggi untuk data yang di-stage di Cloud Storage sebelum dimuat ke BigQuery. Perlu diingat bahwa pengurutan baris tidak dijamin untuk file yang dikompresi atau tidak dikompresi. Penting untuk mempertimbangkan konsekuensi ini, tergantung pada kasus penggunaan Anda.

Secara umum, jika bandwidth dibatasi, kompresi file CSV dan JSON menggunakan gzip sebelum menguploadnya ke Cloud Storage. gzip adalah satu-satunya jenis kompresi file yang didukung untuk file CSV dan JSON saat memuat data ke BigQuery. Jika kecepatan pemuatan penting bagi aplikasi Anda dan Anda memiliki banyak bandwidth untuk memuat data, jangan mengompresi file Anda.

Menambahkan ke atau menimpa tabel

Anda dapat memuat data tambahan ke dalam tabel dari file sumber atau dengan menambahkan hasil kueri. Jika skema data tidak cocok dengan skema tabel atau partisi tujuan, Anda dapat memperbarui skema saat menambahkannya atau menimpanya.

Jika Anda memperbarui skema saat menambahkan data, BigQuery memungkinkan Anda:

  • Menambahkan kolom baru
  • Ubah kolom REQUIRED ke NULLABLE

Jika Anda menimpa tabel, skemanya akan selalu ditimpa. Update skema tidak dibatasi saat Anda menimpa tabel.

Di Konsol Google Cloud, gunakan opsi Write preferences untuk menentukan tindakan yang harus diambil ketika Anda memuat data dari file sumber atau dari hasil kueri. Alat command line bq dan API menyertakan opsi berikut:

Opsi konsol flag alat bq Properti BigQuery API Deskripsi
Tulis jika kosong Tidak ada WRITE_EMPTY Menulis data hanya jika tabel kosong.
Tambahkan ke tabel --noreplace atau --replace=false; jika --replace tidak ditentukan, defaultnya adalah menambahkan WRITE_APPEND (Default) Menambahkan data ke bagian akhir tabel.
Timpa tabel --replace atau --replace=true WRITE_TRUNCATE Menghapus semua data yang ada di tabel sebelum menulis data baru.

Kebijakan kuota

Untuk mengetahui informasi tentang kebijakan kuota untuk pemuatan batch data, lihat Memuat tugas di halaman Kuota dan batas.

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 tampilan 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()

Harga

Muatan data dalam batch ke BigQuery tidak dikenakan biaya. Untuk mengetahui informasi lebih lanjut, lihat Harga penyerapan data BigQuery.

Contoh kasus penggunaan

Misalnya ada pipeline batch processing malam yang harus diselesaikan sebelum batas waktu tetap. Data harus tersedia sebelum batas waktu ini untuk diproses lebih lanjut oleh proses batch lain agar dapat menghasilkan laporan yang akan dikirim ke regulator. Kasus penggunaan ini umum terjadi di industri yang diatur seperti keuangan.

Pemuatan batch data dengan tugas pemuatan adalah pendekatan yang tepat untuk kasus penggunaan ini karena latensi bukanlah masalah asalkan batas waktu dapat dipenuhi. Pastikan bucket Cloud Storage Anda memenuhi persyaratan lokasi untuk memuat data ke dalam set data BigQuery.

Hasil tugas pemuatan BigQuery bersifat atomik; baik semua kumpulan data akan disisipkan atau tidak sama sekali. Sebagai praktik terbaik, saat menyisipkan semua data dalam tugas pemuatan tunggal, buat tabel baru menggunakan disposisi WRITE_TRUNCATE resource JobConfigurationLoad. Hal ini penting saat mencoba kembali tugas pemuatan yang gagal, karena klien mungkin tidak dapat membedakan antara tugas yang gagal dan kegagalan yang disebabkan, misalnya, dalam mengomunikasikan status keberhasilan kembali kepada klien.

Dengan asumsi data yang akan diserap telah berhasil disalin ke Cloud Storage, percobaan ulang dengan backoff eksponensial sudah cukup untuk mengatasi kegagalan penyerapan.

Sebaiknya tugas batch per malam tidak mencapai kuota default sebesar 1.500 pemuatan per tabel per hari, bahkan dengan percobaan ulang. Saat memuat data secara inkremental, kuota default cukup untuk menjalankan tugas pemuatan setiap 5 menit dan memiliki kuota rata-rata untuk setidaknya 1 percobaan ulang per tugas.