1. نظرة عامة
BigQuery هو مستودع بيانات إحصاءات مُدار بالكامل ومنخفض التكلفة على نطاق بيتابايت من Google. لا تتطلّب BigQuery أي عمليات، إذ لا تحتاج إلى إدارة أي بنية أساسية ولا تحتاج إلى مسؤول قاعدة بيانات، ما يتيح لك التركيز على تحليل البيانات للعثور على إحصاءات مفيدة واستخدام لغة SQL المألوفة والاستفادة من نموذج الدفع حسب الاستخدام.
في هذا الدرس التطبيقي حول الترميز، ستستخدم مكتبات برامج Google Cloud للعملاء في Python لطلب البحث في مجموعات بيانات BigQuery العامة باستخدام Python.
ما ستتعلمه
- كيفية استخدام Cloud Shell
- كيفية تفعيل BigQuery API
- كيفية مصادقة طلبات البيانات من واجهة برمجة التطبيقات
- كيفية تثبيت مكتبة برامج Python
- كيفية البحث عن أعمال شكسبير
- كيفية تشغيل طلب بحث في مجموعة بيانات GitHub
- كيفية ضبط إعدادات التخزين المؤقت وعرض الإحصاءات
المتطلبات
استطلاع الرأي
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع Python؟
ما هو تقييمك لتجربة استخدام خدمات Google Cloud؟
2. الإعداد والمتطلبات
إعداد البيئة بالسرعة التي تناسبك
- سجِّل الدخول إلى Google Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. إذا لم يكن لديك حساب على Gmail أو Google Workspace، عليك إنشاء حساب.



- اسم المشروع هو الاسم المعروض للمشاركين في هذا المشروع. وهي سلسلة من الأحرف لا تستخدمها Google APIs، ويمكنك تعديلها في أي وقت.
- يجب أن يكون رقم تعريف المشروع فريدًا في جميع مشاريع Google Cloud، كما أنّه غير قابل للتغيير (لا يمكن تغييره بعد ضبطه). تنشئ Cloud Console تلقائيًا سلسلة فريدة، ولا يهمّك عادةً ما هي. في معظم دروس الترميز، عليك الرجوع إلى رقم تعريف المشروع (ويتم تحديده عادةً على أنّه
PROJECT_ID)، لذا إذا لم يعجبك، يمكنك إنشاء رقم آخر عشوائي، أو يمكنك تجربة رقمك الخاص ومعرفة ما إذا كان متاحًا. ثم يتم "تجميده" بعد إنشاء المشروع. - هناك قيمة ثالثة، وهي رقم المشروع الذي تستخدمه بعض واجهات برمجة التطبيقات. يمكنك الاطّلاع على مزيد من المعلومات عن كل هذه القيم الثلاث في المستندات.
- بعد ذلك، عليك تفعيل الفوترة في Cloud Console من أجل استخدام موارد/واجهات برمجة تطبيقات Cloud. لن تكلفك تجربة هذا الدرس التطبيقي حول الترميز الكثير من المال، إن لم تكلفك شيئًا على الإطلاق. لإيقاف الموارد كي لا يتم تحصيل رسوم منك بعد هذا الدرس التطبيقي حول الترميز، اتّبِع أي تعليمات "تنظيف" واردة في نهاية الدرس. يمكن لمستخدمي Google Cloud الجدد الاستفادة من برنامج الفترة التجريبية المجانية بقيمة 300 دولار أمريكي.
بدء Cloud Shell
على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس العملي Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.
تفعيل Cloud Shell
- من Cloud Console، انقر على تفعيل Cloud Shell
.

إذا لم يسبق لك بدء Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) توضّح ماهيته. في هذه الحالة، انقر على متابعة (ولن تظهر لك مرة أخرى). في ما يلي الشكل الذي ستظهر به هذه الشاشة لمرة واحدة:

يستغرق توفير Cloud Shell والاتصال به بضع لحظات فقط.

يتم تحميل هذا الجهاز الافتراضي بجميع أدوات التطوير التي تحتاج إليها. توفّر هذه الخدمة دليلًا رئيسيًا دائمًا بسعة 5 غيغابايت وتعمل في Google Cloud، ما يؤدي إلى تحسين أداء الشبكة والمصادقة بشكل كبير. يمكن إنجاز معظم العمل في هذا الدرس التطبيقي حول الترميز، إن لم يكن كله، باستخدام متصفّح أو جهاز Chromebook فقط.
بعد الاتصال بـ Cloud Shell، من المفترض أن يظهر لك أنّه تم إثبات هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك.
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من إكمال عملية المصادقة:
gcloud auth list
ناتج الأمر
Credentialed Accounts
ACTIVE ACCOUNT
* <my_account>@<my_domain.com>
To set the active account, run:
$ gcloud config set account `ACCOUNT`
- نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك:
gcloud config list project
ناتج الأمر
[core] project = <PROJECT_ID>
إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:
gcloud config set project <PROJECT_ID>
ناتج الأمر
Updated property [core/project].
3- تفعيل واجهة برمجة التطبيقات
يجب أن تكون BigQuery API مفعَّلة تلقائيًا في جميع مشاريع Google Cloud. يمكنك التحقّق من صحة ذلك باستخدام الأمر التالي في Cloud Shell: يجب أن تكون مدرَجًا في BigQuery:
gcloud services list
من المفترض أن يظهر BigQuery في القائمة:
NAME TITLE bigquery.googleapis.com BigQuery API ...
في حال عدم تفعيل BigQuery API، يمكنك استخدام الأمر التالي في Cloud Shell لتفعيلها:
gcloud services enable bigquery.googleapis.com
4. مصادقة طلبات البيانات من واجهة برمجة التطبيقات
لإرسال طلبات إلى BigQuery API، عليك استخدام حساب خدمة. حساب الخدمة هو حساب يخص مشروعك وتستخدمه مكتبة برامج Python الخاصة بـ Google Cloud لتقديم طلبات إلى BigQuery API. وكما هو الحال مع أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم Cloud SDK لإنشاء حساب خدمة، ثم ستنشئ بيانات الاعتماد اللازمة للمصادقة بصفتك حساب الخدمة.
أولاً، اضبط متغيّر بيئة PROJECT_ID:
export PROJECT_ID=$(gcloud config get-value core/project)
بعد ذلك، أنشئ حساب خدمة جديدًا للوصول إلى BigQuery API باستخدام:
gcloud iam service-accounts create my-bigquery-sa \ --display-name "my bigquery service account"
بعد ذلك، أنشِئ بيانات اعتماد سيستخدمها رمز Python لتسجيل الدخول بصفتك حساب الخدمة الجديد. أنشئ بيانات الاعتماد هذه واحفظها كملف JSON ~/key.json باستخدام الأمر التالي:
gcloud iam service-accounts keys create ~/key.json \
--iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com
أخيرًا، اضبط متغيّر البيئة GOOGLE_APPLICATION_CREDENTIALS الذي تستخدمه مكتبة برامج BigQuery Python، التي سيتم تناولها في الخطوة التالية، للعثور على بيانات الاعتماد. يجب ضبط متغيّر البيئة على المسار الكامل لملف JSON لبيانات الاعتماد الذي أنشأته، وذلك باستخدام:
export GOOGLE_APPLICATION_CREDENTIALS=~/key.json
يمكنك الاطّلاع على مزيد من المعلومات حول المصادقة على BigQuery API.
5- إعداد التحكّم في الوصول
يستخدم BigQuery خدمة "إدارة الهوية وإمكانية الوصول" (IAM) لإدارة إمكانية الوصول إلى الموارد. يتضمّن BigQuery عددًا من الأدوار المحدّدة مسبقًا (مستخدم ومالك بيانات وعارض بيانات وما إلى ذلك) يمكنك تعيينها لحساب الخدمة الذي أنشأته في الخطوة السابقة. يمكنك الاطّلاع على مزيد من المعلومات عن التحكّم في الوصول في مستندات BigQuery.
قبل أن تتمكّن من طلب البحث عن مجموعات البيانات العامة، عليك التأكّد من أنّ حساب الخدمة لديه دور roles/bigquery.user على الأقل. في Cloud Shell، نفِّذ الأمر التالي لإسناد دور المستخدم إلى حساب الخدمة:
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
--role "roles/bigquery.user"
يمكنك تنفيذ الأمر التالي للتأكّد من أنّ حساب الخدمة لديه دور المستخدم:
gcloud projects get-iam-policy $PROJECT_ID
من المفترض أن يظهر لك ما يلي:
bindings: - members: - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com role: roles/bigquery.user ...
6. تثبيت مكتبة البرامج
ثبِّت مكتبة برامج BigQuery Python:
pip3 install --user --upgrade google-cloud-bigquery
أنت الآن جاهز لكتابة الرمز باستخدام BigQuery API.
7. الاستعلام عن أعمال شكسبير
مجموعة البيانات العامة هي أي مجموعة بيانات مخزّنة في BigQuery ومتاحة لعامة الجمهور. هناك العديد من مجموعات البيانات العامة الأخرى المتاحة لك للاستعلام عنها. مع أنّ بعض مجموعات البيانات تستضيفها Google، تستضيف الجهات الخارجية معظمها. لمزيد من المعلومات، يمكنك الاطّلاع على صفحة مجموعات البيانات العامة.
بالإضافة إلى مجموعات البيانات العامة، توفّر BigQuery عددًا محدودًا من جداول العيّنات التي يمكنك طلبها. تندرج هذه الجداول ضمن مجموعة بيانات bigquery-public-data:samples. يحتوي الجدول shakespeare في مجموعة البيانات samples على فهرس كلمات لأعمال شكسبير. تعرض هذه الدالة عدد المرات التي تظهر فيها كل كلمة في كل مجموعة نصوص.
في هذه الخطوة، ستطلب بيانات من الجدول shakespeare.
أولاً، أنشئ في Cloud Shell تطبيق Python بسيطًا ستستخدمه لتشغيل نماذج Translation API.
mkdir bigquery-demo cd bigquery-demo touch app.py
افتح أداة تعديل الرموز من أعلى يسار Cloud Shell:

انتقِل إلى ملف app.py داخل مجلد bigquery-demo واستبدِل الرمز بالرمز التالي.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT corpus AS title, COUNT(word) AS unique_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY title
ORDER BY unique_words
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
title = row['title']
unique_words = row['unique_words']
print(f'{title:<20} | {unique_words}')
خصِّص دقيقة أو دقيقتين لدراسة الرمز البرمجي ومعرفة كيفية الاستعلام عن الجدول.
في Cloud Shell، شغِّل التطبيق:
python3 app.py
ستظهر لك قائمة بالكلمات وعدد مرات تكرارها:
hamlet | 5318 kinghenryv | 5104 cymbeline | 4875 troilusandcressida | 4795 kinglear | 4784 kingrichardiii | 4713 2kinghenryvi | 4683 coriolanus | 4653 2kinghenryiv | 4605 antonyandcleopatra | 4582
8. الاستعلام عن مجموعة بيانات GitHub
للتعرّف أكثر على BigQuery، ستُصدر الآن طلب بحث مقابل مجموعة بيانات GitHub العامة. يمكنك العثور على رسائل عمليات الإيداع الأكثر شيوعًا على GitHub. ستستخدم أيضًا وحدة تحكّم BigQuery على الويب لمعاينة طلبات البحث المخصّصة وتنفيذها.
للاطّلاع على شكل البيانات، افتح مجموعة بيانات GitHub في واجهة مستخدم الويب في BigQuery:
انقر على الزر "معاينة" للاطّلاع على شكل البيانات:

انتقِل إلى ملف app.py داخل مجلد bigquery_demo واستبدِل الرمز بالرمز التالي.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
results = client.query(query)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
يُرجى تخصيص دقيقة أو دقيقتين لدراسة الرمز البرمجي والاطّلاع على كيفية طلب الجدول للحصول على رسائل الالتزام الأكثر شيوعًا.
في Cloud Shell، شغِّل التطبيق:
python3 app.py
ستظهر لك قائمة برسائل عمليات الدمج وعدد مرات حدوثها:
Update README.md | 1,685,515
Initial commit | 1,577,543
update | 211,017
| 155,280
Create README.md | 153,711
Add files via upload | 152,354
initial commit | 145,224
first commit | 110,314
Update index.html | 91,893
Update README | 88,862
9- التخزين المؤقت والإحصاءات
يخزّن BigQuery نتائج طلبات البحث مؤقتًا. نتيجةً لذلك، تستغرق الاستعلامات اللاحقة وقتًا أقل. يمكن إيقاف التخزين المؤقت باستخدام خيارات طلب البحث. يتتبّع BigQuery أيضًا إحصاءات حول طلبات البحث، مثل وقت الإنشاء ووقت الانتهاء وإجمالي عدد وحدات البايت التي تمت معالجتها.
في هذه الخطوة، ستوقف التخزين المؤقت وستعرض أيضًا إحصاءات حول طلبات البحث.
انتقِل إلى ملف app.py داخل مجلد bigquery_demo واستبدِل الرمز بالرمز التالي.
from google.cloud import bigquery
client = bigquery.Client()
query = """
SELECT subject AS subject, COUNT(*) AS num_duplicates
FROM bigquery-public-data.github_repos.commits
GROUP BY subject
ORDER BY num_duplicates
DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)
for row in results:
subject = row['subject']
num_duplicates = row['num_duplicates']
print(f'{subject:<20} | {num_duplicates:>9,}')
print('-'*60)
print(f'Created: {results.created}')
print(f'Ended: {results.ended}')
print(f'Bytes: {results.total_bytes_processed:,}')
في ما يلي بعض الملاحظات حول الرمز. أولاً، يتم إيقاف التخزين المؤقت من خلال إضافة QueryJobConfig وضبط use_query_cache على "خطأ". ثانيًا، يمكنك الوصول إلى إحصاءات حول الاستعلام من عنصر المهمة.
في Cloud Shell، شغِّل التطبيق:
python3 app.py
كما في السابق، من المفترض أن تظهر لك قائمة برسائل عمليات الدمج وعدد مرات حدوثها. بالإضافة إلى ذلك، من المفترض أن تظهر لك بعض الإحصاءات حول طلب البحث في النهاية:
Update README.md | 1,685,515
Initial commit | 1,577,543
update | 211,017
| 155,280
Create README.md | 153,711
Add files via upload | 152,354
initial commit | 145,224
first commit | 110,314
Update index.html | 91,893
Update README | 88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended: 2020-04-03 13:30:15.334000+00:00
Bytes: 2,868,251,894
10. تحميل البيانات إلى BigQuery
إذا أردت طلب البحث عن بياناتك، عليك تحميلها إلى BigQuery. يتيح BigQuery تحميل البيانات من مصادر عديدة، بما في ذلك Cloud Storage وخدمات Google الأخرى والمصادر الأخرى القابلة للقراءة. يمكنك حتى بث بياناتك باستخدام عمليات الإدراج المتدفّقة. لمزيد من المعلومات، يُرجى الاطّلاع على صفحة تحميل البيانات إلى BigQuery.
في هذه الخطوة، ستحمّل ملف JSON مخزَّنًا على Cloud Storage إلى جدول BigQuery. يقع ملف JSON في gs://cloud-samples-data/bigquery/us-states/us-states.json
إذا كنت مهتمًا بمعرفة محتوى ملف JSON، يمكنك استخدام أداة سطر الأوامر gsutil لتنزيله في Cloud Shell:
gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .
يمكنك ملاحظة أنّها تحتوي على قائمة بالولايات الأمريكية، وكل ولاية هي مستند JSON في سطر منفصل:
head us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
لتحميل ملف JSON هذا إلى BigQuery، انتقِل إلى ملف app.py داخل المجلد bigquery_demo واستبدِل الرمز بالرمز التالي.
from google.cloud import bigquery
client = bigquery.Client()
gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'
dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')
job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON
load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)
print('JSON file loaded to BigQuery')
خصِّص دقيقة أو دقيقتَين لدراسة كيفية تحميل الرمز لملف JSON وإنشاء جدول باستخدام مخطط ضمن مجموعة بيانات.
في Cloud Shell، شغِّل التطبيق:
python3 app.py
يتم إنشاء مجموعة بيانات وجدول في BigQuery.
للتأكّد من إنشاء مجموعة البيانات، انتقِل إلى وحدة تحكّم BigQuery. من المفترض أن تظهر لك مجموعة بيانات وجدول جديدان. انتقِل إلى علامة التبويب "معاينة" في الجدول للاطّلاع على بياناتك:

11. تهانينا!
لقد تعلّمت كيفية استخدام BigQuery مع Python.
تنظيف
لتجنُّب تحمّل رسوم في حسابك على Google Cloud مقابل الموارد المستخدَمة في هذا البرنامج التعليمي، اتّبِع الخطوات التالية:
- في Cloud Console، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر مشروعك ثم انقر على حذف.
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.
مزيد من المعلومات
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Python على Google Cloud: https://cloud.google.com/python/
- مكتبات برامج Cloud للغة Python: https://googleapis.github.io/google-cloud-python/
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.