Membuat kueri tabel BigQuery

Dokumen ini menjelaskan cara menggunakan Spark SQL dan Spark DataFrame API dalam workload Managed Service untuk Apache Spark guna membuat kueri tabel BigQuery.

Sebelum memulai

Aktifkan API dan, jika diperlukan, berikan peran Identity and Access Management.

Mengaktifkan API

  1. Login ke akun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Dataproc and BigQuery APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

Memberikan peran Identity and Access Management

Pemberian peran Managed Service untuk Apache Spark dan BigQuery diperlukan Untuk menjalankan contoh di halaman ini. Bergantung pada kebijakan organisasi, peran ini mungkin sudah diberikan. Untuk memeriksa pemberian peran, lihat Apakah Anda perlu memberikan peran?.

Peran Managed Service untuk Apache Spark

Secara default, batch dan sesi dijalankan sebagai akun layanan default Compute Engine, kecuali jika akun layanan kustom ditentukan untuk workload atau sesi.

Peran Pengguna Akun Layanan

Untuk mendapatkan izin yang diperlukan untuk mengirimkan workload batch, minta administrator untuk memberi Anda peran IAM Pengguna Akun Layanan (roles/iam.serviceAccountUser) di akun layanan default Compute Engine. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Peran Pekerja Dataproc

Untuk memastikan bahwa akun layanan default Compute Engine memiliki izin yang diperlukan untuk mengirimkan workload batch, minta administrator untuk memberikan peran IAM Pekerja Dataproc (roles/dataproc.worker) ke akun layanan default Compute Engine di project.

Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Administrator Anda mungkin juga dapat memberikan izin yang diperlukan kepada akun layanan default Compute Engine melalui peran khusus atau peran bawaan lainnya.

Peran BigQuery

Akun layanan yang digunakan untuk menjalankan workload batch Managed Service untuk Apache Spark atau sesi interaktif harus diberi peran IAM berikut pada resource berikut:

  • BigQuery Data Viewer (roles/bigquery.dataViewer) untuk membaca data dari tabel, sebagai berikut:

    • Membaca dari bigquery.DATASET_ID.SOURCE_TABLE dalam contoh Spark SQL SELECT dan INSERT INTO.
    • Membaca dari INFORMATION_SCHEMA dalam contoh DataFrame API.
  • BigQuery User (roles/bigquery.user) untuk mengizinkan Spark menjalankan tugas yang berinteraksi dengan BigQuery.

  • BigQuery Data Editor (roles/bigquery.dataEditor) untuk menulis data atau metadata, sebagai berikut:

    • Untuk contoh Spark SQL INSERT INTO, untuk menulis ke bigquery.DATASET_ID.DESTINATION_TABLE.
    • Untuk contoh DataFrame API yang membuat kueri INFORMATION_SCHEMA, peran ini di perlukan di DATASET_ID yang disediakan di .option('materializationDataset', ...) untuk mengizinkan konektor membuat tabel sementara untuk hasilnya.

Mengirimkan workload batch Spark

Anda dapat menggunakankonsol Google Cloud , Google Cloud CLI, atau Managed Service untuk Apache Spark API untuk mengirimkan workload batch Managed Service untuk Apache Spark.

Menggunakan Spark SQL

Anda dapat menggunakan katalog Spark BigQuery untuk membuat kueri tabel BigQuery standar langsung dari workload batch atau sesi interaktif. Metode ini memungkinkan Anda menggunakan sintaksis GoogleSQL standar untuk berinteraksi dengan data BigQuery dalam tugas spark-sql tanpa menulis kode PySpark atau membuat tampilan sementara menggunakan DataFrame API.

Mengonfigurasi katalog BigQuery

Untuk mengaktifkan katalog BigQuery, berikan properti Spark berikut ke workload batch Spark SQL atau sesi interaktif Anda:

  • dataproc.sparkBqConnector.version=CONNECTOR_VERSION: Menentukan versi konektor Spark BigQuery.
  • spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog: (Opsional) Mendaftarkan katalog bigquery sebagai katalog Spark SQL.

Contoh Google Cloud CLI:

gcloud dataproc batches submit spark-sql \
    --project=PROJECT_ID \
    --region=REGION \
    --version=RUNTIME_VERSION \
    --subnet=SUBNET \
    --service-account=SERVICE_ACCOUNT \
    --properties="dataproc.sparkBqConnector.version=CONNECTOR_VERSION,spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog" \
    gs://BUCKET/my_query.sql

Ganti kode berikut:

Membuat kueri tabel BigQuery

Setelah mengonfigurasi katalog, Anda dapat mereferensikan tabel BigQuery dalam skrip SQL menggunakan format berikut: bigquery.DATASET_ID.TABLE_ID.

Contoh kueri SQL:

-- Query data from a BigQuery table.
SELECT
  column_a,
  SUM(column_b)
FROM
  bigquery.DATASET_ID.SOURCE_TABLE
WHERE
  partition_date = CURRENT_DATE()
GROUP BY column_a;

-- Insert results into another BigQuery table.
INSERT INTO bigquery.DATASET_ID.DESTINATION_TABLE
SELECT column_a, column_b
FROM bigquery.DATASET_ID.SOURCE_TABLE
WHERE column_c = 'some_value';

Ganti kode berikut:

  • DATASET_ID: ID set data BigQuery.
  • SOURCE_TABLE: ID tabel yang akan dikueri.
  • DESTINATION_TABLE: ID tabel tempat data akan dimasukkan.

Menggunakan DataFrame API

DataFrame API diperlukan untuk mengakses tampilan INFORMATION_SCHEMA.

  • Untuk membuat kueri INFORMATION_SCHEMA:

    • Tetapkan spark.conf.set('viewsEnabled', 'true').
    • Berikan .option('materializationDataset', 'DATASET_ID') agar konektor dapat menulis hasil sementara.

Contoh kueri PySpark:

from pyspark.sql import SparkSession

spark = SparkSession.builder.appName('BigQuery Info Schema Test').getOrCreate()

# Required for INFORMATION_SCHEMA.
spark.conf.set('viewsEnabled', 'true')

# Query INFORMATION_SCHEMA.TABLES.
info_schema_df = spark.read.format('bigquery') \
  .option('project', 'PROJECT_ID') \
  .option('materializationDataset', 'DATASET_ID') \
  .load(f'SELECT table_name, creation_time FROM `PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES`')
info_schema_df.show(5, truncate=False)

Ganti kode berikut:

  • PROJECT_ID: Project ID. Project ID tercantum di bagian Project info di Google Cloud konsol Dasbor.
  • DATASET_ID: ID set data BigQuery tempat konektor SparkvBigQuery dapat menulis data sementara.

Lihat Mengirimkan workload batch wordcount PySpark untuk contoh PySpark yang membaca data dari tabel BigQuery standar, lalu menulis hasilnya ke tabel output.

Langkah berikutnya