Mengekspor hasil kueri ke Amazon S3

Dokumen ini menjelaskan cara mengekspor hasil kueri yang dijalankan terhadap tabel BigLake ke bucket Amazon Simple Storage Service (Amazon S3).

Untuk mengetahui informasi tentang cara data mengalir antara BigQuery dan Amazon S3, lihat Aliran data saat mengekspor data.

Batasan

Untuk mengetahui daftar lengkap batasan yang berlaku untuk tabel BigLake berdasarkan Amazon S3 dan Blob Storage, lihat Batasan.

Sebelum memulai

Pastikan Anda memiliki resource berikut:

Mengekspor hasil kueri

BigQuery Omni melakukan operasi tulis ke lokasi Amazon S3 yang ditentukan, terlepas dari konten yang sudah ada. Kueri ekspor dapat menimpa data yang sudah ada atau mencampur hasil kueri dengan data yang sudah ada. Sebaiknya ekspor hasil kueri ke bucket Amazon S3 kosong.

Untuk menjalankan kueri, pilih salah satu opsi berikut:

SQL

Di kolom Editor kueri, masukkan kueri ekspor GoogleSQL. GoogleSQL adalah sintaksis default di konsol Google Cloud.

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

       EXPORT DATA WITH CONNECTION `CONNECTION_REGION.CONNECTION_NAME`
       OPTIONS(uri="s3://BUCKET_NAME/PATH", format="FORMAT", ...)
       AS QUERY

    Ganti kode berikut:

    • CONNECTION_REGION: region tempat koneksi dibuat.
    • CONNECTION_NAME: nama koneksi yang Anda buat dengan izin yang diperlukan untuk menulis ke bucket Amazon S3.
    • BUCKET_NAME: bucket Amazon S3 tempat Anda ingin menulis data.
    • PATH: jalur tempat Anda ingin menulis file yang diekspor. String ini harus berisi tepat satu * karakter pengganti di mana saja di direktori tanpa turunan dari string jalur, misalnya, ../aa/*, ../aa/b*c, ../aa/*bc, dan ../aa/bc*. BigQuery mengganti * dengan 0000..N, bergantung pada jumlah file yang diekspor. BigQuery menentukan jumlah dan ukuran file. Jika BigQuery memutuskan untuk mengekspor dua file, * pada nama file dari file pertama akan diganti dengan 000000000000, dan * dalam nama file kedua akan diganti dengan 000000000001.
    • FORMAT: format yang didukung adalah JSON, AVRO, CSV, dan PARQUET.
    • QUERY: kueri untuk menganalisis data yang disimpan dalam tabel BigLake.

    • Klik Run.

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

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.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;

// Sample to export query results to Amazon S3 bucket
public class ExportQueryResultsToS3 {

  public static void main(String[] args) throws InterruptedException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    String externalTableName = "MY_EXTERNAL_TABLE_NAME";
    // connectionName should be in the format of connection_region.connection_name. e.g.
    // aws-us-east-1.s3-write-conn
    String connectionName = "MY_CONNECTION_REGION.MY_CONNECTION_NAME";
    // destinationUri must contain exactly one * anywhere in the leaf directory of the path string
    // e.g. ../aa/*, ../aa/b*c, ../aa/*bc, and ../aa/bc*
    // BigQuery replaces * with 0000..N depending on the number of files exported.
    // BigQuery determines the file count and sizes.
    String destinationUri = "s3://your-bucket-name/*";
    String format = "EXPORT_FORMAT";
    // Export result of query to find states starting with 'W'
    String query =
        String.format(
            "EXPORT DATA WITH CONNECTION `%s` OPTIONS(uri='%s', format='%s') "
              + "AS SELECT * FROM %s.%s.%s WHERE name LIKE 'W%%'",
            connectionName, destinationUri, format, projectId, datasetName, externalTableName);
    exportQueryResultsToS3(query);
  }

  public static void exportQueryResultsToS3(String query) throws InterruptedException {
    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();

      TableResult results = bigquery.query(QueryJobConfiguration.of(query));

      results
          .iterateAll()
          .forEach(row -> row.forEach(val -> System.out.printf("%s,", val.toString())));

      System.out.println("Query results exported to Amazon S3 successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Pemecahan masalah

Jika Anda mendapatkan error yang terkait dengan quota failure, periksa apakah Anda telah memesan kapasitas untuk kueri Anda. Untuk mengetahui informasi selengkapnya tentang pemesanan slot, lihat Sebelum memulai dalam dokumen ini.

Langkah selanjutnya