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
- 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.
-
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
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.
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 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 Google Cloud konsol Dasbor.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. Subjaringan yang akan digunakan untuk workload batch. Jika tidak ditentukan, subjaringandefaultakan 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 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.
- Tetapkan
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
- Pelajari tentang konektor Spark BigQuery.
- Tinjau kuota Managed Service untuk Apache Spark.