Membuat kueri data Amazon S3

Dokumen ini menjelaskan cara membuat kueri data yang tersimpan dalam tabel BigLake Amazon Simple Storage Service (Amazon S3).

Sebelum memulai

Pastikan Anda memiliki tabel Amazon S3 BigLake.

Peran yang diperlukan

Untuk membuat kueri tabel BigLake Amazon S3, pastikan pemanggil BigQuery API memiliki peran berikut:

  • BigQuery Connection User (roles/bigquery.connectionUser)
  • BigQuery Data Viewer (roles/bigquery.dataViewer)
  • BigQuery User (roles/bigquery.user)

Pemanggil dapat berupa akun Anda atau akun layanan koneksi Amazon S3. Bergantung pada izin yang Anda miliki, Anda dapat memberikan peran ini pada diri sendiri atau meminta administrator untuk memberikannya. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Melihat peran yang dapat diberikan pada resource.

Untuk melihat izin akurat yang diperlukan untuk membuat kueri tabel Amazon S3 BigLake, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

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

Membuat kueri tabel BigLake Amazon S3

Setelah membuat tabel BigLake Amazon S3, Anda dapat membuat kuerinya menggunakan sintaksis GoogleSQL, sama seperti tabel BigQuery standar.

Hasil kueri yang di-cache disimpan dalam tabel sementara BigQuery. Untuk membuat kueri tabel BigLake sementara, lihat Membuat kueri tabel BigLake sementara. Untuk mengetahui informasi selengkapnya tentang batasan dan kuota BigQuery Omni, lihat batasan dan quotas.

Saat membuat pemesanan di region BigQuery Omni, gunakan edisi Enterprise. Untuk mempelajari cara membuat reservasi dengan edisi, lihat Membuat reservasi.

Jalankan kueri pada tabel BigLake Amazon S3:

SQL

Untuk membuat kueri tabel:

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    SELECT * FROM DATASET_NAME.TABLE_NAME;

    Ganti kode berikut:

    • DATASET_NAME: nama set data yang Anda buat
    • TABLE_NAME: nama tabel yang Anda buat

    • 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 mengetahui 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.CsvOptions;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.ExternalTableDefinition;
import com.google.cloud.bigquery.Field;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.Schema;
import com.google.cloud.bigquery.StandardSQLTypeName;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.TableResult;

// Sample to queries an external data source aws s3 using a permanent table
public class QueryExternalTableAws {

  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";
    // Query to find states starting with 'W'
    String query =
        String.format(
            "SELECT * FROM s%.%s.%s WHERE name LIKE 'W%%'",
            projectId, datasetName, externalTableName);
    queryExternalTableAws(query);
  }

  public static void queryExternalTableAws(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 on aws external permanent table performed successfully.");
    } catch (BigQueryException e) {
      System.out.println("Query not performed \n" + e.toString());
    }
  }
}

Membuat kueri tabel sementara

BigQuery membuat tabel sementara untuk menyimpan hasil kueri. Untuk mengambil hasil kueri dari tabel sementara, Anda dapat menggunakan Konsol Google Cloud atau BigQuery API.

Pilih salah satu opsi berikut:

Konsol

Saat membuat kueri tabel BigLake yang merujuk ke data cloud eksternal, Anda dapat melihat hasil kueri yang ditampilkan di Konsol Google Cloud.

API

Untuk membuat kueri tabel BigLake menggunakan API, ikuti langkah-langkah berikut:

  1. Buat Objek tugas.
  2. Panggil metode jobs.insert untuk menjalankan kueri secara asinkron, atau metode jobs.query untuk menjalankan kueri secara sinkron, meneruskan objek Job.
  3. Baca baris yang memuat jobs.getQueryResults dengan meneruskan referensi tugas yang diberikan, dan metode tabledata.list dengan meneruskan referensi tabel tertentu dari hasil kueri.

Membuat kueri kolom semu _FILE_NAME

Tabel yang didasarkan pada sumber data eksternal menyediakan kolom pseudo bernama _FILE_NAME. Kolom ini berisi jalur yang sepenuhnya memenuhi syarat ke file yang memiliki baris tersebut. Kolom ini hanya tersedia untuk tabel yang mereferensikan data eksternal yang disimpan di Cloud Storage, Google Drive, Amazon S3, dan Azure Blob Storage.

Nama kolom _FILE_NAME sudah digunakan, yang berarti Anda tidak dapat membuat kolom dengan nama tersebut di tabel Anda. Untuk memilih nilai _FILE_NAME, Anda harus menggunakan alias. Contoh kueri berikut menunjukkan pemilihan _FILE_NAME dengan menetapkan alias fn ke kolom pseudo.

  bq query \
  --project_id=PROJECT_ID \
  --use_legacy_sql=false \
  'SELECT
     name,
     _FILE_NAME AS fn
   FROM
     `DATASET.TABLE_NAME`
   WHERE
     name contains "Alex"' 

Ganti kode berikut:

  • PROJECT_ID adalah project ID yang valid (tanda ini tidak diperlukan jika Anda menggunakan Cloud Shell atau jika Anda menetapkan project default di Google Cloud CLI)
  • DATASET adalah nama set data yang menyimpan tabel eksternal permanen
  • TABLE_NAME adalah nama tabel eksternal permanen

Jika kueri memiliki predikat filter di kolom semu _FILE_NAME, BigQuery akan mencoba melewati pembacaan file yang tidak memenuhi filter. Rekomendasi serupa dengan membuat kueri tabel berpartisi waktu penyerapan menggunakan kolom pseudo berlaku saat membuat predikat kueri dengan kolom pseudo _FILE_NAME.

Langkah selanjutnya