لمحة عن هذا الدرس التطبيقي حول الترميز
1. نظرة عامة
BigQuery هو مستودع بيانات إحصائية منخفض التكلفة من Google مُدار بالكامل على نطاق بيتابايت. BigQuery هو NoOps - لا توجد بنية أساسية لإدارتها ولا تحتاج إلى مشرف قاعدة بيانات - لذلك يمكنك التركيز على تحليل البيانات للعثور على إحصاءات ذات مغزى، واستخدام SQL المألوف، والاستفادة من نموذج الدفع حسب الاستخدام.
في هذا الدرس التطبيقي حول الترميز، ستستخدم Google Cloud Client Libraries for .NET لطلب بحث مجموعات البيانات العامة في BigQuery باستخدام C#.
المعلومات التي ستطّلع عليها
- كيفية استخدام Cloud Shell
- كيفية تفعيل BigQuery API
- طريقة مصادقة طلبات البيانات من واجهة برمجة التطبيقات
- كيفية تثبيت مكتبة برامج Google Cloud لـ C#
- طريقة الاستعلام عن أعمال شكسبير
- كيفية الاستعلام عن مجموعة بيانات GitHub
- كيفية ضبط التخزين المؤقت وإحصاءات العرض
المتطلبات
استطلاع
كيف ستستخدم هذا البرنامج التعليمي؟
كيف تقيّم تجربتك مع C# ؟
ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud Platform؟
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، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح.
بعد الربط بخدمة 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
يجب تفعيل BigQuery API تلقائيًا في جميع مشاريع Google Cloud. يمكنك التحقق مما إذا كان هذا صحيحًا باستخدام الأمر التالي في Cloud Shell: يجب أن تكون BigQuery مدرجًا:
gcloud services list
من المفترض أن يظهر لك BigQuery مدرجًا:
NAME TITLE
bigquery-json.googleapis.com BigQuery API
...
في حال عدم تفعيل BigQuery API، يمكنك استخدام الأمر التالي في Cloud Shell لتفعيلها:
gcloud services enable bigquery-json.googleapis.com
4. تثبيت مكتبة برامج BigQuery لـ C#
أولاً، قم بإنشاء تطبيق وحدة تحكم C# بسيط ستستخدمه لتشغيل نماذج BigQuery API.
dotnet new console -n BigQueryDemo
من المفترض أن يظهر لك التطبيق الذي تم إنشاؤه وتم حل التبعيات:
The template "Console Application" was created successfully.
Processing post-creation actions...
...
Restore succeeded.
بعد ذلك، انتقِل إلى مجلد واحد (BigQueryDemo
):
cd BigQueryDemo
وإضافة حزمة NuGet Google.Cloud.BigQuery.V2
إلى المشروع:
dotnet add package Google.Cloud.BigQuery.V2
info : Adding PackageReference for package 'Google.Cloud.BigQuery.V2' into project '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
log : Restoring packages for /home/atameldev/BigQueryDemo/BigQueryDemo.csproj...
...
info : PackageReference for package 'Google.Cloud.BigQuery.V2' version '1.2.0' added to file '/home/atameldev/BigQueryDemo/BigQueryDemo.csproj'.
أنت الآن جاهز لاستخدام BigQuery API.
5. الاستعلام عن أعمال شكسبير
مجموعة البيانات العامة هي أي مجموعة بيانات يتم تخزينها في BigQuery وإتاحتها للجمهور العام. هناك العديد من مجموعات البيانات العامة الأخرى المتاحة لك لطلب البحث عنها، وتستضيف Google بعضها أيضًا، ولكن يتم استضافة الكثير منها بواسطة جهات خارجية. يمكنك قراءة المزيد في صفحة مجموعات البيانات العامة.
بالإضافة إلى مجموعات البيانات العامة، توفِّر أداة BigQuery عددًا محدودًا من نماذج الجداول التي يمكنك طلبها. يتم تضمين هذه الجداول في bigquery-public-data:samples dataset
. أحد هذه الجداول يسمى shakespeare.
ويحتوي على فهرس كلمات لأعمال شكسبير، مع تحديد عدد مرات ظهور كل كلمة في كل مجموعة.
في هذه الخطوة، سوف استعلام عن جدول شكسبير.
أولاً، افتح محرِّر الرموز من أعلى يسار Cloud Shell:
انتقِل إلى ملف Program.cs
داخل مجلد "BigQueryDemo
" واستبدِل الرمز بما يلي. تأكَّد من استبدال projectId
برقم تعريف المشروع الفعلي:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "samples", "shakespeare");
var sql = $"SELECT corpus AS title, COUNT(word) AS unique_words FROM {table} GROUP BY title ORDER BY unique_words DESC LIMIT 10";
var results = client.ExecuteQuery(sql, parameters: null);
foreach (var row in results)
{
Console.WriteLine($"{row["title"]}: {row["unique_words"]}");
}
}
}
}
خذ دقيقة أو دقيقتين لدراسة التعليمة البرمجية ومعرفة كيف يتم الاستعلام عن الجدول.
مرة أخرى في Cloud Shell، شغِّل التطبيق:
dotnet run
من المفترض أن تظهر لك قائمة بالكلمات ومواضع ورودها:
hamlet: 5318
kinghenryv: 5104
cymbeline: 4875
troilusandcressida: 4795
kinglear: 4784
kingrichardiii: 4713
2kinghenryvi: 4683
...
6. الاستعلام عن مجموعة بيانات GitHub
للتعرّف أكثر على أداة BigQuery، عليك الآن إرسال طلب بحث في مقابل مجموعة بيانات GitHub العامة. يمكنك العثور على رسائل الالتزام الأكثر شيوعًا على GitHub. ستستخدم أيضًا وحدة تحكم الويب BigQuery لمعاينة وتشغيل الاستعلامات الخاصة.
للاطّلاع على شكل البيانات، افتح مجموعة بيانات GitHub في واجهة مستخدم الويب في BigQuery:
احصل على معاينة سريعة لشكل البيانات، استخدم الزر معاينة:
انتقِل إلى ملف Program.cs
داخل مجلد "BigQueryDemo
" واستبدِل الرمز بما يلي. تأكَّد من استبدال projectId
برقم تعريف المشروع الفعلي:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
var results = client.ExecuteQuery(sql, parameters: null);
foreach (var row in results)
{
Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
}
}
}
}
خصِّص دقيقة أو دقيقتَين لدراسة الرمز البرمجي ومعرفة كيف يتم البحث في الجدول عن رسائل الالتزام الأكثر شيوعًا.
مرة أخرى في Cloud Shell، شغِّل التطبيق:
dotnet run
من المفترض أن تظهر لك قائمة بالرسائل التي تم الالتزام بها ومواضع ورودها:
Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
7. التخزين المؤقت والإحصاءات
بعد الاستعلام الأولي، يخزن BigQuery النتائج في ذاكرة التخزين المؤقت. ونتيجةً لذلك، تستغرق طلبات البحث اللاحقة وقتًا أقل بكثير. يمكن إيقاف التخزين المؤقت باستخدام خيارات الاستعلام. يتتبع BigQuery أيضًا بعض الإحصائيات حول الطلبات مثل وقت الإنشاء ووقت الانتهاء وإجمالي وحدات البايت التي تمت معالجتها.
في هذه الخطوة، ستقوم بتعطيل التخزين المؤقت وعرض بعض الإحصائيات حول الاستعلامات أيضًا.
انتقِل إلى ملف Program.cs
داخل مجلد "BigQueryDemo
" واستبدِل الرمز بما يلي. تأكَّد من استبدال projectId
برقم تعريف المشروع الفعلي:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var client = BigQueryClient.Create("projectId");
var table = client.GetTable("bigquery-public-data", "github_repos", "commits");
var sql = $"SELECT subject AS subject, COUNT(*) AS num_duplicates FROM {table} GROUP BY subject ORDER BY num_duplicates DESC LIMIT 10";
var queryOptions = new QueryOptions {
UseQueryCache = false
};
var results = client.ExecuteQuery(sql, parameters: null, queryOptions: queryOptions);
foreach (var row in results)
{
Console.WriteLine($"{row["subject"]}: {row["num_duplicates"]}");
}
var job = client.GetJob(results.JobReference);
var stats = job.Statistics;
Console.WriteLine("----------");
Console.WriteLine($"Creation time: {stats.CreationTime}");
Console.WriteLine($"End time: {stats.EndTime}");
Console.WriteLine($"Total bytes processed: {stats.TotalBytesProcessed}");
}
}
}
بعض الأمور التي يجب ملاحظتها حول التعليمة البرمجية. أولاً، يتم إيقاف التخزين المؤقت من خلال تقديم خيارات طلب البحث وضبط UseQueryCache
على "خطأ". ثانيًا، قمت بالوصول إلى الإحصائيات حول الاستعلام من كائن الوظيفة.
مرة أخرى في Cloud Shell، شغِّل التطبيق:
dotnet run
كما في السابق، من المفترض أن تظهر لك قائمة بالرسائل التي تم الالتزام بها ومواضع ورودها. بالإضافة إلى ذلك، يُفترض أن ترى أيضًا بعض الإحصاءات حول الاستعلام في نهاية
Update README.md: 2509242
: 1971725
Initial commit: 1942149
Mirroring from Micro.blog.: 838586
update: 575188
Update data.json: 548651
Update data.js: 548339
Add files via upload: 379941
*** empty log message ***: 358528
Can't you see I'm updating the time?: 286863
----------
Creation time: 1533052057398
End time: 1533052066961
Total bytes processed: 9944197093
8. تحميل البيانات في BigQuery
إذا كنت تريد إجراء طلبات بحث عن بياناتك، عليك أولاً تحميل بياناتك إلى BigQuery. يدعم BigQuery تحميل البيانات من العديد من المصادر مثل Google Cloud Storage وخدمات Google الأخرى، وهو مصدر قابل للقراءة. يمكنك أيضًا بث بياناتك باستخدام إدخالات البث. يمكنك قراءة المزيد عن صفحة تحميل البيانات إلى BigQuery.
في هذه الخطوة، سيتم تحميل ملف JSON مُخزَّن على Google 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 .
Copying gs://cloud-samples-data/bigquery/us-states/us-states.json...
/ [1 files][ 2.0 KiB/ 2.0 KiB]
Operation completed over 1 objects/2.0 KiB.
يتضح لي أنّ المستند يحتوي على قائمة الولايات الأمريكية، وكل ولاية هي مستند JSON في سطر منفصل:
less us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr": "AK"}
...
لتحميل ملف JSON هذا إلى BigQuery، انتقِل إلى ملف Program.cs
داخل مجلد BigQueryDemo
واستبدِل الرمز بما يلي. تأكَّد من استبدال projectId
برقم تعريف المشروع الفعلي:
using System;
using Google.Cloud.BigQuery.V2;
namespace BigQueryDemo
{
class Program
{
static void Main(string[] args)
{
var gcsUri = "gs://cloud-samples-data/bigquery/us-states/us-states.json";
var client = BigQueryClient.Create("projectId");
var dataset = client.GetOrCreateDataset("us_states_dataset");
var schema = new TableSchemaBuilder
{
{ "name", BigQueryDbType.String },
{ "post_abbr", BigQueryDbType.String }
}.Build();
var jobOptions = new CreateLoadJobOptions
{
SourceFormat = FileFormat.NewlineDelimitedJson
};
var table = dataset.GetTableReference("us_states_table");
var loadJob = client.CreateLoadJob(gcsUri, table, schema, jobOptions);
loadJob.PollUntilCompleted();
loadJob.ThrowOnAnyError();
Console.WriteLine("Json file loaded to BigQuery");
}
}
}
خصص دقيقة من دقيقتين لدراسة كيفية تحميل الرمز البرمجي لملف JSON وإنشاء جدول يحتوي على مخطط ضمن مجموعة بيانات.
مرة أخرى في Cloud Shell، شغِّل التطبيق:
dotnet run
يتم إنشاء مجموعة بيانات وجدول في BigQuery
Json file loaded to BigQuery
للتحقق من إنشاء مجموعة البيانات بالفعل، يمكنك الانتقال إلى وحدة تحكم BigQuery. من المفترض أن ترى مجموعة بيانات جديدة وجدول تم إنشاؤه. في حال التبديل إلى علامة التبويب "معاينة" في الجدول، يمكنك مشاهدة البيانات الفعلية:
9. تهانينا!
لقد تعلمت كيفية استخدام BigQuery باستخدام C#!
تَنظيم
لتجنُّب تحمُّل الرسوم المفروضة على حسابك على Google Cloud Platform مقابل الموارد المستخدَمة في عملية البدء السريع هذه:
- انتقِل إلى وحدة تحكُّم Cloud Platform.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف". في الجزء العلوي: يؤدي هذا إلى تحديد موعد المشروع للحذف.
مزيد من المعلومات
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- C#/.NET على Google Cloud Platform: https://cloud.google.com/dotnet/
- برنامج Google Cloud .NET: https://googlecloudplatform.github.io/google-cloud-dotnet/
الترخيص
هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.