טעינת נתונים ושליחת שאילתות לגבי כלי שורת הפקודה של bq ל-BigQuery

1. מבוא

BigQuery הוא מסד נתונים מנוהל של Google, ללא תפעול ובעלות נמוכה לניתוח נתונים. באמצעות BigQuery, אתם יכולים לשלוח שאילתות על טרה-בייטים של נתונים ללא מנהל או תשתית של מסד נתונים. ב-BigQuery נעשה שימוש ב-SQL מוכר ובמודל חיוב לפי שימוש בלבד. ב-BigQuery אפשר להתמקד בניתוח נתונים כדי לקבל תובנות משמעותיות. ב-Codelab הזה משתמשים בכלי שורת הפקודה של BigQuery כדי לטעון קובץ CSV מקומי לטבלת BigQuery חדשה.

מה תלמדו

  • איך משתמשים בכלי שורת הפקודה של bq ל-BigQuery
  • איך לטעון קובצי נתונים מקומיים לטבלה ב-BigQuery

מה צריך להכין

  • פרויקט ב-Google Cloud
  • דפדפן, למשל Google Chrome

2. להגדרה

הפעלת BigQuery

אם עדיין אין לכם חשבון Google, עליכם ליצור חשבון.

  1. נכנסים אל מסוף Google Cloud ועוברים אל BigQuery. אפשר גם לפתוח ישירות את ממשק המשתמש של BigQuery באינטרנט על ידי הזנת כתובת ה-URL הבאה בדפדפן.
https://console.cloud.google.com/bigquery
  1. מאשרים את התנאים וההגבלות.
  2. כדי להשתמש ב-BigQuery צריך ליצור פרויקט. יוצרים את הפרויקט החדש לפי ההנחיות.

בוחרים שם לפרויקט ורושמים את מזהה הפרויקט. 1884405a64ce5765.png

מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud. בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

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

Cloud Shell

תשתמשו ב-Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.

הפעלת Cloud Shell

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

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

fbe3a0674c982259.png

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

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

יצירת מערך נתונים

ב-Cloud Shell, משתמשים בפקודה bq mk כדי ליצור מערך נתונים בשם 'bq_load_codelab'.

bq mk bq_load_codelab

הצגת מאפיינים של מערך נתונים

כדי לוודא שיצרתם את מערך הנתונים, אתם יכולים לבדוק את המאפיינים של מערך הנתונים באמצעות הפקודה bq show.

bq show bq_load_codelab

הפלט אמור להיראות כך:

Dataset my-project:bq_load_codelab

   Last modified           ACLs          Labels
 ----------------- -------------------- --------
  15 Jun 14:12:49   Owners:
                      projectOwners,
                      your-email@example.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders

4. יצירת קובץ הנתונים

מערכת BigQuery יכולה לטעון נתונים מכמה פורמטים של נתונים, כולל JSON מופרד בשורה חדשה, Avro ו-CSV. כדי לשמור על פשטות, צריך להשתמש בקובץ CSV.

יצירת קובץ CSV

יוצרים קובץ CSV ריק ב-Cloud Shell.

touch customer_transactions.csv

כדי לפתוח את קובץ ה-CSV בעורך הקוד ב-Cloud Shell, מריצים את פקודת העריכה cloudshell, שתפתח חלון דפדפן חדש עם עורך קוד וחלונית של Cloud Shell.

cloudshell edit customer_transactions.csv

בעורך הקוד, מזינים כמה ערכים מופרדים בפסיקים כדי לטעון אותם ב-BigQuery.

ID,Zipcode,Timestamp,Amount,Feedback,SKU
c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5
c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee
c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0

שומרים את קובץ ה-CSV בלחיצה על File > (קובץ >). עריכה

5. טען נתונים

משתמשים בפקודה bq load כדי לטעון את קובץ ה-CSV לטבלה של BigQuery.

bq load \
    --source_format=CSV \
    --skip_leading_rows=1 \
    bq_load_codelab.customer_transactions \
    ./customer_transactions.csv \
    id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string

השתמשת באפשרויות הבאות:

  • --source_format=CSV משתמש בפורמט הנתונים CSV כשמנתחים את קובץ הנתונים.
  • --skip_leading_rows=1 מדלג על השורה הראשונה בקובץ ה-CSV כי זו שורת כותרת.
  • Bq_load_codelab.customer_transactions—the first positional argument—מגדיר לאיזו טבלה צריך לטעון את הנתונים.
  • ./customer_transactions.csv – הארגומנט השני תלוי המיקום – מגדיר איזה קובץ לטעון. בנוסף לקבצים מקומיים, הפקודה של טעינת bq יכולה לטעון קבצים מ-Cloud Storage באמצעות gs://my_bucket/path/to/file URIs.
  • סכימה, שאותה אפשר להגדיר בקובץ סכימת JSON או כרשימה שמופרדת בפסיקים. (השתמשת ברשימה מופרדת בפסיקים כדי לשמור על פשטות).

השתמשתם בסכימה הבאה בטבלה customer_transactions:

  • Id:string: מספר לקוח
  • Zip:string: מיקוד בארה"ב
  • Ttime:timestamp: התאריך והשעה שבהם בוצעה העסקה
  • Amount:numeric: הסכום של עסקה (בעמודה מספרית הנתונים נשמרים בפורמט עשרוני), והיא שימושית לערכים כספיים.)
  • Fdbk:float: הדירוג מתוך סקר משוב על העסקה
  • Sku:string: מזהה של הפריט שנרכש

קבלת פרטי הטבלה

כדי לוודא שהטבלה נטענה, צריך להציג את מאפייני הטבלה.

bq show bq_load_codelab.customer_transactions

פלט:

Table my-project:bq_load_codelab.customer_transactions

   Last modified          Schema          Total Rows   Total Bytes
 ----------------- --------------------- ------------ -------------
  15 Jun 15:13:55   |- id: string         3            159
                    |- zip: string
                    |- ttime: timestamp
                    |- amount: numeric
                    |- fdbk: float
                    |- sku: string

6. הרצת שאילתות על הנתונים

עכשיו, לאחר שהנתונים נטענים, אפשר לשלוח שאילתות באמצעות ממשק המשתמש של BigQuery באינטרנט, פקודת bq או ה-API. השאילתות יכולות לאחד את הנתונים שלכם מול כל מערך נתונים (או מערכי נתונים, כל עוד הם נמצאים באותו מיקום) שיש לכם הרשאה לקרוא אותם.

מריצים שאילתת SQL רגילה שמאחדת את מערך הנתונים עם מערך הנתונים של המיקודים בארה"ב ומסכמת את הטרנזקציות לפי מדינה בארה"ב. משתמשים בפקודה של שאילתת bq כדי להריץ את השאילתה.

bq query --nouse_legacy_sql '
SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code
FROM `bq_load_codelab.customer_transactions` c
JOIN `bigquery-public-data.utility_us.zipcode_area` z
ON c.zip = z.zipcode
GROUP BY state_code
'

הפלט של הפקודה הזו אמור להיראות כך:

Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE   
+--------------+------------+
| amount_total | state_code |
+--------------+------------+
|         53.6 | NY         |
|         7.18 | TX         |
+--------------+------------+

השאילתה שהרצתם השתמשה במערך נתונים ציבורי ובמערך הנתונים הפרטי שלכם. כדי לקבל מידע נוסף, אפשר לעיין בגרסה הזו של התגובה לאותה שאילתה:

#standardSQL
SELECT
  /* Total of all transactions in the state. */
  SUM(c.amount) AS amount_total,

  /* State corresponding to the transaction's zipcode. */
  z.state_code AS state_code

/* Query the table you just constructed.
 * Note: If you omit the project from the table ID,
 *       the dataset is read from your project. */
FROM `bq_load_codelab.customer_transactions` c

/* Join the table to the zipcode public dataset. */
JOIN `bigquery-public-data.utility_us.zipcode_area` z

/* Find the state corresponding to the transaction's zipcode. */
ON c.zip = z.zipcode

/* Group over all transactions by state. */
GROUP BY state_code

7. הסרת המשאבים

מוחקים את מערך הנתונים שיצרתם באמצעות הפקודה bq rm. משתמשים בדגל -r כדי להסיר את הטבלאות שהוא מכיל.

bq rm -r bq_load_codelab

8. מעולה!

העליתם טבלה ל-BigQuery והרצתם שאילתות לגביה.

מה נכלל?

  • שימוש בכלי שורת הפקודה bq לאינטראקציה עם BigQuery.
  • צירוף הנתונים שלכם ומערך נתונים ציבורי לשאילתת BigQuery.

המאמרים הבאים

למידע נוסף על: