Membuat kueri tabel BigQuery
Dokumen ini menjelaskan cara menggunakan Spark SQL dan Spark DataFrame API dalam workload Managed Service untuk Apache Spark untuk membuat kueri tabel BigQuery.
Sebelum memulai
Aktifkan API dan, jika perlu, berikan peran Identity and Access Management.
Mengaktifkan API
- Login ke akun Google Cloud Anda. 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.
-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.-
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
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 theserviceusage.services.enablepermission. Learn how to grant roles.
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 beban kerja atau sesi.
Peran Pengguna Akun Layanan
Untuk mendapatkan izin yang
diperlukan guna mengirimkan beban kerja batch,
minta administrator Anda untuk memberi Anda
peran IAM Service Account User (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 Anda untuk memberikan peran IAM Dataproc Worker (roles/dataproc.worker) kepada akun layanan default Compute Engine di project.
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 beban kerja batch atau sesi interaktif Managed Service untuk Apache Spark 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.
Pengguna BigQuery (
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 INSERT INTO Spark SQL, untuk menulis ke bigquery.DATASET_ID.DESTINATION_TABLE.
- Untuk contoh DataFrame API yang mengkueri INFORMATION_SCHEMA, peran ini diperlukan di DATASET_ID yang diberikan di
.option('materializationDataset', ...)agar konektor dapat membuat tabel sementara untuk hasilnya.
Mengirimkan workload batch Spark
Anda dapat menggunakan konsol 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 beban kerja 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 atau sesi interaktif Spark SQL Anda:
dataproc.sparkBqConnector.version=CONNECTOR_VERSION: Menentukan versi konektor Spark BigQuery.spark.sql.catalog.bigquery=com.google.cloud.spark.bigquery.BigQueryCatalog: (Opsional) Mendaftarkan katalogbigquerysebagai 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:
PROJECT_ID: Project ID. Project ID tercantum di bagian Project info di Dasbor konsol Google Cloud .REGION: Region tempat batch akan berjalanRUNTIME_VERSION: Opsional. Versi runtime Managed Service untuk Apache Spark. Jika tidak ditentukan, versi runtime default saat ini akan dipilih.CONNECTOR_VERSION: Versi konektor Spark BigQuery. Untuk menemukan versi konektor yang kompatibel denganRUNTIME_VERSION, lihat Rilis runtime Managed Service untuk Apache Spark. Jika konektor tidak diinstal sebelumnya, Anda dapat menemukan versi yang tersedia di halaman rilis GitHub.SUBNET: Opsional. Subnetwork yang akan digunakan untuk workload batch. Jika tidak ditentukan, subnetworkdefaultakan digunakan.SERVICE_ACCOUNT: Opsional. Akun layanan yang akan menjalankan tugas batch. Jika tidak ditentukan, akun layanan default Compute Engine akan digunakan.BUCKET: Bucket Cloud Storage yang berisi file SQL.
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 disisipkan.
Menggunakan DataFrame API
DataFrame API diperlukan untuk mengakses tampilan INFORMATION_SCHEMA.
Untuk membuat kueri
INFORMATION_SCHEMA:- Setel
spark.conf.set('viewsEnabled', 'true'). - Berikan
.option('materializationDataset', 'DATASET_ID')agar konektor dapat menulis hasil sementara.
- Setel
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 Dasbor konsol Google Cloud .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
- Pelajari konektor Spark BigQuery.
- Tinjau kuota Managed Service untuk Apache Spark.