Google BigQuery
توضح هذه المقالة كيفية القراءة من جداول Google BigQuery والكتابة إليها في Azure Databricks.
هام
التكوينات الموضحة في هذه المقالة تجريبية. يتم توفير الميزات التجريبية كما هي ولا تدعمها Databricks من خلال الدعم التقني للعملاء. للحصول على دعم اتحاد الاستعلام الكامل، يجب عليك بدلا من ذلك استخدام Lakehouse Federation، والذي يمكن مستخدمي Azure Databricks من الاستفادة من بناء جملة كتالوج Unity وأدوات إدارة البيانات.
يجب الاتصال ب BigQuery باستخدام المصادقة المستندة إلى المفتاح.
الأذونات
يجب أن يكون لمشاريعك أذونات Google محددة للقراءة والكتابة باستخدام BigQuery.
إشعار
تتناول هذه المقالة طرق عرض BigQuery المجسدة. للحصول على التفاصيل، راجع مقالة Google مقدمة حول طرق العرض المجسدة. لمعرفة مصطلحات BigQuery الأخرى ونموذج أمان BigQuery، راجع وثائق Google BigQuery.
تعتمد قراءة البيانات وكتابتها باستخدام BigQuery على مشروعين Google Cloud:
- المشروع (
project
): معرف مشروع Google Cloud الذي يقرأ منه Azure Databricks جدول BigQuery أو يكتبه. - المشروع الأصل (
parentProject
): معرف المشروع الأصل، وهو معرف مشروع Google Cloud الذي يجب فوترته للقراءة والكتابة. قم بتعيين هذا إلى مشروع Google Cloud المرتبط بحساب خدمة Google الذي ستنشئ مفاتيح له.
يجب توفير project
القيم و parentProject
بشكل صريح في التعليمات البرمجية التي تصل إلى BigQuery. استخدم التعليمات البرمجية المشابهة للآتي:
spark.read.format("bigquery") \
.option("table", table) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
تعتمد الأذونات المطلوبة لمشاريع Google Cloud على ما إذا كانت project
متشابهة أم parentProject
لا. تسرد المقاطع التالية الأذونات المطلوبة لكل سيناريو.
الأذونات المطلوبة إذا project
وتطابقت parentProject
إذا كانت معرفات و project
parentProject
هي نفسها، فاستخدم الجدول التالي لتحديد الحد الأدنى من الأذونات:
مهمة Azure Databricks | أذونات Google المطلوبة في المشروع |
---|---|
قراءة جدول BigQuery بدون طريقة عرض مجسدة | في project المشروع:- مستخدم جلسة عمل BigQuery Read - عارض بيانات BigQuery (امنحه اختياريا على مستوى مجموعة البيانات/الجدول بدلا من مستوى المشروع) |
قراءة جدول BigQuery بطريقة عرض مجسدة | في project المشروع:- مستخدم مهمة BigQuery - مستخدم جلسة عمل BigQuery Read - عارض بيانات BigQuery (امنحه اختياريا على مستوى مجموعة البيانات/الجدول بدلا من مستوى المشروع) في مشروع التجسيد: - محرر بيانات BigQuery |
كتابة جدول BigQuery | في project المشروع:- مستخدم مهمة BigQuery - محرر بيانات BigQuery |
الأذونات المطلوبة إذا كانت project
مختلفة parentProject
إذا كانت معرفات و project
parentProject
مختلفة، فاستخدم الجدول التالي لتحديد الحد الأدنى من الأذونات:
مهمة Azure Databricks | أذونات Google المطلوبة |
---|---|
قراءة جدول BigQuery بدون طريقة عرض مجسدة | في parentProject المشروع:- مستخدم جلسة عمل BigQuery Read في project المشروع:- عارض بيانات BigQuery (امنحه اختياريا على مستوى مجموعة البيانات/الجدول بدلا من مستوى المشروع) |
قراءة جدول BigQuery بطريقة عرض مجسدة | في parentProject المشروع:- مستخدم جلسة عمل BigQuery Read - مستخدم مهمة BigQuery في project المشروع:- عارض بيانات BigQuery (امنحه اختياريا على مستوى مجموعة البيانات/الجدول بدلا من مستوى المشروع) في مشروع التجسيد: - محرر بيانات BigQuery |
كتابة جدول BigQuery | في parentProject المشروع:- مستخدم مهمة BigQuery في project المشروع:- محرر بيانات BigQuery |
الخطوة 1: إعداد Google Cloud
تمكين BigQuery Storage API
يتم تمكين BigQuery Storage API بشكل افتراضي في مشاريع Google Cloud الجديدة التي يتم فيها تمكين BigQuery. ومع ذلك، إذا كان لديك مشروع موجود ولم يتم تمكين BigQuery Storage API، فاتبع الخطوات الواردة في هذا القسم لتمكينه.
يمكنك تمكين BigQuery Storage API باستخدام Google Cloud CLI أو Google Cloud Console.
تمكين BigQuery Storage API باستخدام Google Cloud CLI
gcloud services enable bigquerystorage.googleapis.com
تمكين BigQuery Storage API باستخدام Google Cloud Console
انقر فوق واجهات برمجة التطبيقات والخدمات في جزء التنقل الأيمن.
انقر فوق الزر ENABLE APIS AND SERVICES.
اكتب
bigquery storage api
في شريط البحث وحدد النتيجة الأولى.تأكد من تمكين BigQuery Storage API.
إنشاء حساب خدمة Google ل Azure Databricks
إنشاء حساب خدمة لنظام مجموعة Azure Databricks. توصي Databricks بإعطاء حساب الخدمة هذا أقل الامتيازات اللازمة لأداء مهامه. راجع BigQuery Roles and Permissions.
يمكنك إنشاء حساب خدمة باستخدام Google Cloud CLI أو Google Cloud Console.
إنشاء حساب خدمة Google باستخدام Google Cloud CLI
gcloud iam service-accounts create <service-account-name>
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
إنشاء مفاتيح حساب الخدمة الخاص بك:
gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json
إنشاء حساب خدمة Google باستخدام Google Cloud Console
لإنشاء الحساب:
انقر فوق إدارة الهوية والمسؤول في جزء التنقل الأيمن.
انقر فوق حسابات الخدمة.
انقر فوق + CREATE SERVICE ACCOUNT.
أدخل اسم حساب الخدمة ووصفه.
انقر فوق Create.
حدد أدوارا لحساب الخدمة الخاص بك. في القائمة المنسدلة تحديد دور ، اكتب
BigQuery
الأدوار التالية وأضفها:انقر فوق Continue.
انقر فوق تم.
لإنشاء مفاتيح لحساب الخدمة الخاص بك:
في قائمة حسابات الخدمة، انقر فوق حسابك الذي تم إنشاؤه حديثا.
في قسم Keys، حدد ADD KEY > Create new key button.
اقبل نوع مفتاح JSON.
انقر فوق Create. يتم تنزيل ملف مفتاح JSON على الكمبيوتر الخاص بك.
هام
ملف مفتاح JSON الذي تقوم بإنشائه لحساب الخدمة هو مفتاح خاص يجب مشاركته فقط مع المستخدمين المعتمدين، لأنه يتحكم في الوصول إلى مجموعات البيانات والموارد في حساب Google Cloud الخاص بك.
إنشاء مستودع Google Cloud Storage (GCS) للتخزين المؤقت
لكتابة البيانات إلى BigQuery، يحتاج مصدر البيانات إلى الوصول إلى مستودع GCS.
انقر فوق Storage في جزء التنقل الأيمن.
انقر فوق CREATE BUCKET.
تكوين تفاصيل المستودع.
انقر فوق Create.
انقر فوق علامة التبويب أذونات وإضافة أعضاء.
قم بتوفير الأذونات التالية لحساب الخدمة على المستودع.
انقر فوق "SAVE".
الخطوة 2: إعداد Azure Databricks
لتكوين نظام مجموعة للوصول إلى جداول BigQuery، يجب توفير ملف مفتاح JSON الخاص بك كتكوين Spark. استخدم أداة محلية لترميز ملف مفتاح JSON الخاص بك بترميز Base64. لأغراض الأمان لا تستخدم أداة مستندة إلى الويب أو أداة بعيدة يمكنها الوصول إلى مفاتيحك.
عند تكوين نظام المجموعة الخاص بك:
في علامة التبويب Spark Config ، أضف تكوين Spark التالي. استبدل <base64-keys>
بسلسلة ملف مفتاح JSON المشفرة Base64. استبدل العناصر الأخرى بين قوسين (مثل <client-email>
) بقيم هذه الحقول من ملف مفتاح JSON.
credentials <base64-keys>
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>
القراءة والكتابة إلى جدول BigQuery
لقراءة جدول BigQuery، حدد
df = spark.read.format("bigquery") \
.option("table",<table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
للكتابة إلى جدول BigQuery، حدد
df.write.format("bigquery") \
.mode("<mode>") \
.option("temporaryGcsBucket", "<bucket-name>") \
.option("table", <table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.save()
حيث <bucket-name>
هو اسم المستودع الذي أنشأته في إنشاء مستودع Google Cloud Storage (GCS) للتخزين المؤقت. راجع الأذونات للتعرف على متطلبات <project-id>
وقيم.<parent-id>
إنشاء جدول خارجي من BigQuery
هام
هذه الميزة غير معتمدة من قبل كتالوج Unity.
يمكنك الإعلان عن جدول غير مدار في Databricks سيقرأ البيانات مباشرة من BigQuery:
CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
parentProject 'gcp-parent-project-id',
project 'gcp-project-id',
temporaryGcsBucket 'some-gcp-bucket',
materializationDataset 'some-bigquery-dataset',
table 'some-bigquery-dataset.table-to-copy'
)
مثال دفتر ملاحظات Python: تحميل جدول Google BigQuery في DataFrame
يقوم دفتر ملاحظات Python التالي بتحميل جدول Google BigQuery في Azure Databricks DataFrame.
نموذج دفتر ملاحظات Google BigQuery Python
مثال على دفتر ملاحظات Scala: تحميل جدول Google BigQuery في DataFrame
يقوم دفتر ملاحظات Scala التالي بتحميل جدول Google BigQuery في Azure Databricks DataFrame.