שימוש ב-BigQuery עם #C

שימוש ב-BigQuery עם #C

מידע על Codelab זה

subjectהעדכון האחרון: יוני 26, 2023
account_circleנכתב על ידי Mete Atamel

1.‏ סקירה כללית

BigQuery הוא מחסן נתונים (data warehouse) מנוהל בקנה מידה של פטה-בייט ובעלות נמוכה. BigQuery הוא NoOps – אין תשתית שצריך לנהל ולא צריך מנהל של מסד נתונים – כך אפשר להתמקד בניתוח נתונים כדי להגיע לתובנות משמעותיות, להשתמש ב-SQL מוכר ולנצל את מודל התשלום לפי שימוש.

ב-Codelab הזה משתמשים בספריות הלקוח של Google Cloud ל- .NET כדי לשלוח שאילתות על מערכי נתונים ציבוריים של BigQuery עם #C.

מה תלמדו

  • איך משתמשים ב-Cloud Shell
  • איך מפעילים את BigQuery API
  • איך לאמת בקשות API
  • איך מתקינים את ספריית הלקוח של Google Cloud ל-C#
  • איך לשלוח שאילתות על יצירות של שייקספיר
  • איך שולחים שאילתות על מערך הנתונים ב-GitHub
  • איך לשנות את השמירה במטמון ולהציג נתונים סטטיסטיים

מה צריך להכין

  • פרויקט ב-Google Cloud Platform
  • דפדפן, למשל Chrome או Firefox
  • היכרות עם C#

סקר

איך תשתמשו במדריך הזה?

איזה דירוג מגיע לחוויה שלך עם C#?

איזה דירוג מגיע לדעתך לחוויית השימוש בשירותי Google Cloud Platform?

2.‏ הגדרה ודרישות

הגדרת סביבה בקצב עצמאי

  1. נכנסים למסוף Google Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. אם אין לכם עדיין חשבון Gmail או חשבון Google Workspace, עליכם ליצור חשבון.

295004821bab6a87.png

37d264871000675d.png

96d86d3d5655cdbe.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. תמיד אפשר לעדכן.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-codelabs תצטרכו להפנות למזהה הפרויקט שלכם (בדרך כלל מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניכם, אתם יכולים ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות שם משלך ולראות אם הוא זמין. לא ניתן לשנות אותו אחרי השלב הזה, והוא נשאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי, Project Number, שבו משתמשים בחלק מממשקי ה-API. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא יעלה הרבה כסף, אם בכלל. כדי להשבית משאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הפעלת Cloud Shell

אומנם אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל ב-Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת הפקודה שפועלת ב-Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell d1264ca30785e435.png.

cb81e7c8e34bc8d.png

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים שמתוארת בו. אם הוצג לכם מסך ביניים, לוחצים על המשך.

d95252b003979716.png

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

7833d5e1c5d18f54.png

במכונה הווירטואלית הזו נמצאים כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן.

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שהפרויקט מאומת ושהפרויקט מוגדר לפי מזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-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`
  1. מריצים את הפקודה הבאה ב-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:

fd3fc1303e63572.png

צריך לעבור לקובץ 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 באינטרנט:

https://console.cloud.google.com/bigquery?p=bigquery-public-data&amp;d=github_repos&amp;t=commits&amp;page=table

כדי לקבל תצוגה מקדימה מהירה של איך הנתונים נראים, אפשר להשתמש בלחצן 'תצוגה מקדימה':

f706bfe3dfcbd267.png

צריך לעבור לקובץ 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 כ-False. לאחר מכן, ניגשתם לנתונים הסטטיסטיים לגבי השאילתה מאובייקט המשימה.

בחזרה ב-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. אמורים להופיע מערך נתונים חדש וטבלה שנוצרה. אם תעברו לכרטיסיית התצוגה המקדימה של הטבלה, תוכלו לראות את הנתונים בפועל:

7d9f7c493acbbf9a.png

9.‏ מעולה!

למדת איך להשתמש ב-BigQuery עם C#!

הסרת המשאבים

כדי להימנע מצבירת חיובים בחשבון Google Cloud Platform על המשאבים שבהם השתמשתם במדריך למתחילים הזה:

  • עוברים אל Cloud Platform Console.
  • בוחרים את הפרויקט שרוצים להשבית ולוחצים על Delete (מחיקה). למעלה: מתזמנת את מחיקת הפרויקט.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.