1. نظرة عامة
BigQuery هو مستودع بيانات إحصائية منخفض التكلفة من Google مُدار بالكامل على نطاق بيتابايت. BigQuery هو NoOps - لا توجد بنية أساسية لإدارتها ولا تحتاج إلى مشرف قاعدة بيانات - لذلك يمكنك التركيز على تحليل البيانات للعثور على إحصاءات ذات مغزى، واستخدام SQL المألوف، والاستفادة من نموذج الدفع حسب الاستخدام.
في هذا الدرس التطبيقي حول الترميز، ستستخدم Google Cloud Client Libraries للغة 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، عليك استخدام حساب الخدمة. ينتمي حساب الخدمة إلى مشروعك، وتستخدمه مكتبة برامج Google Cloud Python لإجراء طلبات BigQuery API. مثل أي حساب مستخدم آخر، يتم تمثيل حساب الخدمة بعنوان بريد إلكتروني. في هذا القسم، ستستخدم حزمة تطوير البرامج (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
الذي تستخدمه مكتبة برامج Python في BigQuery، والذي سنتناوله في الخطوة التالية، للعثور على بيانات الاعتماد. يجب ضبط متغيّر البيئة على المسار الكامل لملف 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 مع نسب العمل إلى مؤلف عام.