הגדרת סכימה
ב-BigQuery אפשר להגדיר את הסכימה של טבלה כשאתם טוענים נתונים לטבלה, וכשאתם יוצרים טבלה ריקה. לחלופין, אפשר להשתמש בזיהוי אוטומטי של סכימה עבור פורמטים נתמכים של נתונים.
כשאתם טוענים קובצי ייצוא של Avro, Parquet, ORC, Firestore או Datastore, הסכימה מאוחזרת באופן אוטומטי מנתוני המקור שמתארים את עצמם.
אפשר לציין את הסכימה של טבלה בדרכים הבאות:
- משתמשים במסוף Google Cloud .
- משתמשים בהצהרת ה-SQL
CREATE TABLE. - בשורה באמצעות כלי שורת הפקודה של BigQuery.
- יוצרים קובץ סכימה בפורמט JSON.
- מפעילים את ה-method
jobs.insertומגדירים את המאפייןschemaבהגדרות של משימת ה-load. - מבצעים קריאה לשיטה
tables.insertומגדירים את הסכימה במשאב הטבלה באמצעות המאפייןschema.
אחרי שטוענים נתונים או יוצרים טבלה ריקה, אפשר לשנות את הגדרת הסכימה של הטבלה.
רכיבי סכימה
כשמציינים סכימת טבלה, צריך לציין את השם וסוג הנתונים של כל עמודה. אפשר גם לספק תיאור, מצב וערך ברירת מחדל של עמודה.
שמות של עמודות
שם של עמודה יכול להכיל אותיות (a-z, A-Z), מספרים (0-9) או קווים תחתונים (_), והוא חייב להתחיל באות או בקו תחתון. אם אתם משתמשים בשמות גמישים של עמודות, BigQuery תומך בשמות עמודות שמתחילים במספר. צריך להיזהר כשמתחילים שמות של עמודות במספר, כי השימוש בשמות גמישים של עמודות ב-BigQuery Storage Read API או ב-BigQuery Storage Write API (gRPC) דורש טיפול מיוחד. מידע נוסף על תמיכה בשמות גמישים של עמודות זמין במאמר שמות גמישים של עמודות.
האורך המקסימלי של שמות העמודות הוא 300 תווים. שמות העמודות לא יכולים לכלול את התחיליות הבאות:
_TABLE__FILE__PARTITION_ROW_TIMESTAMP__ROOT___COLIDENTIFIER_CHANGE_SEQUENCE_NUMBER_CHANGE_TYPE_CHANGE_TIMESTAMP
אסור להשתמש בשמות עמודות כפולים, גם אם יש הבדל באותיות רישיות. לדוגמה, עמודה בשם Column1 נחשבת זהה לעמודה בשם column1. מידע נוסף על כללי מתן שמות לעמודות זמין במאמר שמות עמודות במדריך העזר של GoogleSQL.
אם שם של טבלה (לדוגמה, test) זהה לאחד משמות העמודות שלה (לדוגמה, test), הביטוי SELECT מפרש את העמודה test כSTRUCT שמכילה את כל העמודות האחרות בטבלה. כדי למנוע את ההתנגשות הזו, אפשר להשתמש באחת מהשיטות הבאות:
אל תשתמשו באותו שם לטבלה ולעמודות שלה.
אל תשתמשו ב-
_field_בתור תחילית לשם של עמודה. קידומות ששמורות למערכת גורמות לשינוי שם אוטומטי במהלך שאילתות. לדוגמה, השאילתהSELECT _field_ FROM project1.dataset.testמחזירה עמודה בשם_field_1. אם אתם חייבים לשלוח שאילתה לעמודה עם השם הזה, אתם יכולים להשתמש בכינוי כדי לשלוט בפלט.מקצים לטבלה כינוי אחר. לדוגמה, השאילתה הבאה מקצה את כינוי הטבלה
tלטבלהproject1.dataset.test:SELECT test FROM project1.dataset.test AS t;כשמפנים לעמודה, צריך לכלול את שם הטבלה. לדוגמה:
SELECT test.test FROM project1.dataset.test;
שמות עמודות גמישים
יש לכם יותר גמישות בשמות של העמודות, כולל גישה מורחבת לתווים בשפות שאינן אנגלית וגם לסמלים נוספים.
אם שמות העמודות הגמישות הם מזהים במירכאות, חשוב להשתמש בתווי גרש הפוך (`) כדי לתחום אותם.
שמות עמודות גמישים תומכים בתווים הבאים:
- כל אות בכל שפה, כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode
\p{L}. - כל תו מספרי בכל שפה, כפי שמיוצג על ידי הביטוי הרגולרי של Unicode
\p{N}. - כל תו פיסוק מקשר, כולל קווים תחתונים, כפי שמיוצג על ידי הביטוי הרגולרי של Unicode
\p{Pc}. - מקף או קו מפריד, כפי שהם מיוצגים על ידי הביטוי הרגולרי של Unicode
\p{Pd}. - כל סימן שנועד ללוות תו אחר, כפי שמיוצג על ידי הביטוי הרגולרי של Unicode
\p{M}. לדוגמה, סימני הטעמה, אומלאוט או תיבות סוגרות. - התווים המיוחדים הבאים:
- אמפרסנד (
&) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0026. - סימן אחוז (
%) כפי שמיוצג על ידי הביטוי הרגולרי של Unicode\u0025. - סימן שוויון (
=) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003D. - סימן פלוס (
+) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u002B. - נקודתיים (
:) כפי שהן מיוצגות על ידי הביטוי הרגולרי של Unicode\u003A. - גרש (
') כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0027. - סימן קטן מ- (
<) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003C. - סימן גדול מ- (
>) כפי שמיוצג על ידי הביטוי הרגולרי של Unicode\u003E. - סימן סולמית (
#) כפי שמיוצג על ידי הביטוי הרגולרי של Unicode\u0023. - קו אנכי (
|) שמיוצג על ידי הביטוי הרגולרי של Unicode\u007c. - רווח לבן.
- אמפרסנד (
שמות עמודות גמישים לא תומכים בתווים המיוחדים הבאים:
- סימן קריאה (
!) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0021. - מירכאות (
") כפי שהן מיוצגות על ידי הביטוי הרגולרי של Unicode\u0022. - סימן דולר (
$) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0024. - סוגר שמאלי (
() כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0028. - סוגר ימני (
)) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0029. - כוכבית (
*) כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode\u002A. - פסיק (
,) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u002C. - נקודה (
.) כפי שמיוצגת על ידי הביטוי הרגולרי של Unicode\u002E. נקודות לא מוחלפות בקו תחתון בשמות של עמודות בקובץ Parquet כשמשתמשים במפת תווים של שמות עמודות. מידע נוסף מופיע במאמר בנושא מגבלות על עמודות גמישות. - לוכסן (
/) שמיוצג על ידי הביטוי הרגולרי של Unicode\u002F. - נקודה ופסיק (
;) כפי שהם מיוצגים על ידי הביטוי הרגולרי של Unicode\u003B. - סימן שאלה (
?) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u003F. - סימן כרוכית (
@) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0040. - סוגר מרובע שמאלי (
[) שמיוצג על ידי הביטוי הרגולרי של Unicode\u005B. - לוכסן הפוך (
\) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u005C. - סוגר מרובע ימני (
]) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u005D. - הטעמת גג (
^) כפי שמיוצגת על ידי הביטוי הרגולרי של Unicode\u005E. - סימן הטעם (
`) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u0060. - סוגר מסולסל שמאלי {
{) כפי שהוא מיוצג על ידי הביטוי הרגולרי של Unicode\u007B. - סוגר מסולסל ימני (
}) כפי שמיוצג על ידי הביטוי הרגולרי של Unicode\u007D. - טילדה (
~) כפי שהיא מיוצגת על ידי הביטוי הרגולרי של Unicode\u007E.
הנחיות נוספות זמינות בקטע שמות של עמודות.
התווים המורחבים של העמודות נתמכים גם ב-BigQuery Storage Read API וגם ב-BigQuery Storage Write API (gRPC). כדי להשתמש ברשימה המורחבת של תווי Unicode עם BigQuery Storage Read API, צריך להגדיר דגל. אפשר להשתמש במאפיין displayName כדי לאחזר את שם העמודה. בדוגמה הבאה אפשר לראות איך מגדירים דגל באמצעות לקוח Python:
from google.cloud.bigquery_storage import types
requested_session = types.ReadSession()
#set avro serialization options for flexible column.
options = types.AvroSerializationOptions()
options.enable_display_name_attribute = True
requested_session.read_options.avro_serialization_options = options
כדי להשתמש ברשימה המורחבת של תווי Unicode עם BigQuery Storage Write API (gRPC), צריך לספק לסכימה את הסימון column_name, אלא אם משתמשים באובייקט הכתיבה JsonStreamWriter. בדוגמה הבאה אפשר לראות איך מספקים את הסכימה:
syntax = "proto2";
package mypackage;
// Source protos located in github.com/googleapis/googleapis
import "google/cloud/bigquery/storage/v1/annotations.proto";
message FlexibleSchema {
optional string item_name_column = 1
[(.google.cloud.bigquery.storage.v1.column_name) = "name-列"];
optional string item_description_column = 2
[(.google.cloud.bigquery.storage.v1.column_name) = "description-列"];
}
בדוגמה הזו, item_name_column ו-item_description_column הם שמות של פלייסהולדרים שצריכים לעמוד במוסכמות למתן שמות של מאגר אחסון לפרוטוקולים. חשוב לזכור שההערות של column_name תמיד מקבלות עדיפות על פני שמות של פלייסהולדרים.
מגבלות
- שמות גמישים של עמודות נתמכים כברירת מחדל בטבלאות מנוהלות של Iceberg, בטבלאות חיצוניות של Iceberg ובטבלאות של Apache Iceberg שמנוהלות על ידי קטלוג ייעודי לזמן ריצה של Lakehouse.
בטבלאות חיצוניות אחרות (כמו Parquet, ORC, Avro, CSV או Delta Lake), שמות עמודות גמישים לא מופעלים כברירת מחדל. כדי לבקש הפעלה ברמת הפרויקט, צריך לפנות אל Cloud Customer Care.
- בטבלאות Delta Lake, צריך גם להפעיל מיפוי עמודות במצב
idאוname.
- בטבלאות Delta Lake, צריך גם להפעיל מיפוי עמודות במצב
- כשמייצאים טבלאות חיצוניות עם שמות עמודות גמישים לפורמטים של קבצים פתוחים (כמו Parquet או Avro באמצעות
EXPORT DATAאו משימות חילוץ), שמות עמודות שלא נתמכים ממופים לשמות גיבוב (hash) פנימיים שנוצרו (col_...), כי פורמטים של צד שלישי לא כוללים מטא-נתונים של שמות תצוגה ב-BigQuery. - שמות עמודות גמישים לא נתמכים ב-SQL מדור קודם. חובה להשתמש ב-GoogleSQL.
תיאורי העמודות
אפשר להוסיף תיאור לכל עמודה. התיאור הוא מחרוזת באורך של עד 1,024 תווים.
ערכי ברירת מחדל
ערך ברירת המחדל של עמודה חייב להיות ליטרל או אחת מהפונקציות הבאות:
CURRENT_DATECURRENT_DATETIMECURRENT_TIMECURRENT_TIMESTAMPGENERATE_UUIDRANDSESSION_USERST_GEOGPOINT
סוגי נתונים ב-GoogleSQL
ב-GoogleSQL אפשר לציין את סוגי הנתונים הבאים בסכימה. חובה להזין סוג נתונים.
| שם | סוג נתונים | תיאור |
|---|---|---|
| Integer | INT64 |
ערכים מספריים ללא רכיבי שבר |
| נקודה צפה | FLOAT64 |
ערכים מספריים משוערים עם רכיבי שברים |
| סולם מספרי | NUMERIC |
ערכים מספריים מדויקים עם רכיבי שברים |
| BigNumeric | BIGNUMERIC |
ערכים מספריים מדויקים עם רכיבי שברים |
| בוליאני | BOOL |
TRUE או FALSE (לא תלוי-רישיות) |
| מחרוזת | STRING |
נתוני תווים (Unicode) באורך משתנה |
| בייט | BYTES |
נתונים בינאריים באורך משתנה |
| תאריך | DATE |
תאריך לוגי ביומן |
| תאריך/שעה | DATETIME |
שנה, חודש, יום, שעה, דקה, שנייה וחלק משנייה |
| זמן | TIME |
שעה, ללא תלות בתאריך ספציפי |
| חותמת זמן | TIMESTAMP |
נקודה מוחלטת בזמן, עם דיוק של מיקרו-שנייה |
| Struct (Record) | STRUCT |
מאגר של שדות מסודרים, שלכל אחד מהם יש סוג (חובה) ושם שדה (אופציונלי) |
| מיקום גיאוגרפי | GEOGRAPHY |
קבוצת נקודות על פני השטח של כדור הארץ (קבוצה של נקודות, קווים ופוליגונים על הספרואיד של WGS84, עם קצוות גיאודזיים) |
| JSON | JSON |
מייצג JSON, פורמט קל להחלפת נתונים |
| RANGE | RANGE |
טווח של ערכי DATE, DATETIME או TIMESTAMP |
מידע נוסף על סוגי נתונים ב-GoogleSQL זמין במאמר סוגי נתונים ב-GoogleSQL.
אפשר גם להצהיר על סוג מערך כשמבצעים שאילתת נתונים. מידע נוסף זמין במאמר עבודה עם מערכים.
מצבים
ב-BigQuery יש תמיכה במצבים הבאים לעמודות. המאפיין Mode הוא אופציונלי. אם המצב לא צוין, העמודה תוגדר כברירת מחדל ל-NULLABLE.
| מצב | תיאור |
|---|---|
| Nullable | העמודה מאפשרת ערכים של NULL (ברירת מחדל) |
| חובה | אסור להשתמש בערכים NULL |
| שדה | העמודה מכילה מערך של ערכים מהסוג שצוין |
מידע נוסף על מצבים זמין בקטע mode בTableFieldSchema.
מצב עיגול
כשהעמודה היא מסוג NUMERIC או BIGNUMERIC, אפשר להגדיר את האפשרות rounding_mode בעמודה, שקובעת איך הערכים בעמודה יעוגלו כשהם ייכתבו בטבלה. אפשר להגדיר את האפשרות rounding_mode בעמודה ברמה העליונה או בשדה STRUCT. אלה מצבי העיגול שנתמכים:
-
"ROUND_HALF_AWAY_FROM_ZERO": במצב הזה (ברירת המחדל), ערכים שבאמצע מעוגלים לכיוון שמתרחק מאפס. -
"ROUND_HALF_EVEN": במצב הזה, ערכים שבאמצע מעוגלים לספרה הזוגית הקרובה ביותר.
אי אפשר להגדיר את האפשרות rounding_mode לעמודה שהסוג שלה הוא לא NUMERIC או BIGNUMERIC. מידע נוסף על הסוגים האלה זמין במאמר בנושא סוגים עשרוניים.
בדוגמה הבאה נוצרת טבלה ומוכנסים ערכים שמעוגלים על סמך מצב העיגול של העמודה:
CREATE TABLE mydataset.mytable ( x NUMERIC(5,2) OPTIONS (rounding_mode='ROUND_HALF_EVEN'), y NUMERIC(5,2) OPTIONS (rounding_mode='ROUND_HALF_AWAY_FROM_ZERO') ); INSERT mydataset.mytable (x, y) VALUES (NUMERIC "1.025", NUMERIC "1.025"), (NUMERIC "1.0251", NUMERIC "1.0251"), (NUMERIC "1.035", NUMERIC "1.035"), (NUMERIC "-1.025", NUMERIC "-1.025");
הטבלה mytable נראית כך:
+-------+-------+ | x | y | +-------+-------+ | 1.02 | 1.03 | | 1.03 | 1.03 | | 1.04 | 1.04 | | -1.02 | -1.03 | +-------+-------+
מידע נוסף זמין בקטע roundingMode בTableFieldSchema.
ציון סכימות
כשאתם טוענים נתונים או יוצרים טבלה ריקה, אתם יכולים להגדיר את הסכימה של הטבלה באמצעות מסוף Google Cloud או כלי שורת הפקודה של BigQuery. אפשר לציין סכימה כשמעלים קובצי CSV ו-JSON (עם תווי שורה חדשה כמפריד). כשאתם טוענים נתוני ייצוא של Avro, Parquet, ORC, Firestore או Datastore, הסכימה מאוחזרת באופן אוטומטי מנתוני המקור שמתארים את עצמם.
כדי לציין סכימת טבלה:
המסוף
במסוף Google Cloud , אפשר לציין סכימה באמצעות האפשרות Add field או האפשרות Edit as text.
נכנסים לדף BigQuery במסוף Google Cloud .
בחלונית השמאלית, לוחצים על Explorer:
אם לא רואים את החלונית הימנית, לוחצים על הרחבת החלונית הימנית כדי לפתוח אותה.
בחלונית Explorer לוחצים על Datasets ואז על מערך הנתונים.
בחלונית הפרטים, לוחצים על יצירת טבלה .
בדף יצירת טבלה, בקטע מקור, בוחרים באפשרות טבלה ריקה.
בדף יצירת טבלה, בקטע יעד:
בקטע Dataset name, בוחרים את מערך הנתונים המתאים.
בשדה Table name (שם הטבלה), מזינים את השם של הטבלה שיוצרים.
מוודאים שהשדה Table type מוגדר ל-Native table.
בקטע Schema, מזינים את הגדרת הסכימה.
- אפשרות 1: משתמשים באפשרות Add field ומציינים את השם, הסוג והמצב של כל שדה.
- אפשרות 2: לוחצים על Edit as text ומדביקים את הסכימה כמערך JSON. כשמשתמשים במערך JSON, יוצרים את הסכימה באותו תהליך שבו יוצרים קובץ סכימה של JSON.
לוחצים על Create table.
SQL
משתמשים בהצהרה CREATE TABLE.
מציינים את הסכימה באמצעות האפשרות column.
בדוגמה הבאה נוצרת טבלה חדשה בשם newtable עם העמודות x, y, z מסוג מספר שלם, מחרוזת ובוליאני:
נכנסים לדף BigQuery במסוף Google Cloud .
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRING, z BOOL) OPTIONS( description = 'My example table');
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
מזינים את הסכימה בתוך השורה בפורמט field:data_type,field:data_type באמצעות אחת מהפקודות הבאות:
- אם אתם טוענים נתונים, השתמשו בפקודה
bq load. - אם אתם יוצרים טבלה ריקה, השתמשו בפקודה
bq mk.
כשמציינים את הסכימה בשורת הפקודה, אי אפשר לכלול סוגי RECORD (STRUCT) או RANGE, אי אפשר לכלול תיאור עמודה ואי אפשר לציין את מצב העמודה. ברירת המחדל של כל המצבים היא NULLABLE. כדי לכלול תיאורים, מצבים, סוגי RECORD וסוגי RANGE, צריך לספק קובץ סכימה של JSON.
כדי לטעון נתונים לטבלה באמצעות הגדרת סכימה מוטבעת, מזינים את הפקודה load ומציינים את פורמט הנתונים באמצעות הדגל --source_format.
אם אתם טוענים נתונים לטבלה בפרויקט שהוא לא פרויקט ברירת המחדל, צריך לכלול את מזהה הפרויקט בפורמט הבא: project_id:dataset.table_name.
(אופציונלי) מציינים את הדגל --location ומגדירים את הערך למיקום.
bq --location=location load \ --source_format=format \ project_id:dataset.table_name \ path_to_source \ schema
מחליפים את מה שכתוב בשדות הבאים:
-
location: השם של המיקום. הדגל--locationהוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות הקובץ bigqueryrc.. -
format:NEWLINE_DELIMITED_JSONאוCSV. project_id: מזהה הפרויקט.-
dataset: קבוצת הנתונים שמכילה את הטבלה שאליה טוענים את הנתונים. -
table_name: שם הטבלה שאליה אתם טוענים את הנתונים. -
path_to_source: המיקום של קובץ הנתונים בפורמט CSV או JSON במחשב המקומי או ב-Cloud Storage. -
schema: הגדרת הסכימה בתוך השורה.
דוגמה:
מזינים את הפקודה הבאה כדי לטעון נתונים מקובץ CSV מקומי בשם myfile.csv אל mydataset.mytable בפרויקט ברירת המחדל. הסכימה מצוינת בתוך השורה.
bq load \
--source_format=CSV \
mydataset.mytable \
./myfile.csv \
qtr:STRING,sales:FLOAT,year:STRING
למידע נוסף על טעינת נתונים ל-BigQuery, קראו את המאמר מבוא לטעינת נתונים.
כדי לציין הגדרת סכימה בתוך השורה כשיוצרים טבלה ריקה, מזינים את הפקודה bq mk עם הדגל --table או -t. אם אתם יוצרים טבלה בפרויקט שהוא לא פרויקט ברירת המחדל, הוסיפו את מזהה הפרויקט לפקודה בפורמט הבא: project_id:dataset.table.
bq mk --table project_id:dataset.table schema
מחליפים את מה שכתוב בשדות הבאים:
project_id: מזהה הפרויקט.-
dataset: מערך נתונים בפרויקט. -
table: השם של הטבלה שיוצרים. -
schema: הגדרת סכימה מוטבעת.
לדוגמה, הפקודה הבאה יוצרת טבלה ריקה בשם mytable בפרויקט ברירת המחדל. הסכימה מצוינת בתוך השורה.
bq mk --table mydataset.mytable qtr:STRING,sales:FLOAT,year:STRING
מידע נוסף על יצירת טבלה ריקה זמין במאמר בנושא יצירת טבלה ריקה עם הגדרת סכימה.
C#
כדי לציין את הסכימה של טבלה כשאתם טוענים נתונים לטבלה:
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי C#הוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery C# API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לציין סכימה כשיוצרים טבלה ריקה:
המשך
כדי לציין את הסכימה של טבלה כשאתם טוענים נתונים לטבלה:
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Go במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Go API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לציין סכימה כשיוצרים טבלה ריקה:
Java
כדי לציין סכימה של טבלה כשאתם טוענים נתונים לטבלה:
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Java במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Java API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי להגדיר סכימה כשיוצרים טבלה ריקה:
Python
כדי לציין סכימה של טבלה כשאתם טוענים נתונים לטבלה, מגדירים את המאפיין LoadJobConfig.schema.
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לציין סכימה כשיוצרים טבלה ריקה, צריך להגדיר את המאפיין Table.schema.
ציון קובץ סכימת JSON
אם אתם מעדיפים, אתם יכולים לציין את הסכימה באמצעות קובץ סכימת JSON במקום להשתמש בהגדרת סכימה מוטבעת. קובץ סכימת JSON מורכב ממערך JSON שמכיל את הרכיבים הבאים:
- שם העמודה
- סוג הנתונים בעמודה
- אופציונלי: מצב העמודה (אם לא צוין, המצב שמוגדר כברירת מחדל הוא
NULLABLE) - אופציונלי: השדות של העמודה אם היא מסוג
STRUCT - אופציונלי: תיאור העמודה
- אופציונלי: האורך המקסימלי של הערכים בעמודה לסוגים
STRINGאוBYTES - אופציונלי: רמת הדיוק של העמודה לסוגים
NUMERICאוBIGNUMERIC - אופציונלי: הסולם של העמודה
לסוגים
NUMERICאוBIGNUMERIC - אופציונלי: ההשוואה של העמודה לסוגים
STRING - אופציונלי: ערך ברירת המחדל של העמודה
- אופציונלי: מצב העיגול של העמודה, אם העמודה היא מסוג
NUMERICאוBIGNUMERIC
יצירת קובץ סכימת JSON
כדי ליצור קובץ סכימה בפורמט JSON, מזינים TableFieldSchema לכל עמודה. חובה למלא את השדות name ו-type. כל שאר השדות הם אופציונליים.
[ { "name": string, "type": string, "mode": string, "fields": [ { object (TableFieldSchema) } ], "description": string, "policyTags": { "names": [ string ] }, "maxLength": string, "precision": string, "scale": string, "collation": string, "defaultValueExpression": string, "roundingMode": string }, { "name": string, "type": string, ... } ]
אם העמודה היא מסוג RANGE<T>, צריך להשתמש בשדה rangeElementType כדי לתאר את T, כאשר T חייב להיות אחד מהערכים DATE, DATETIME או TIMESTAMP.
[ { "name": "duration", "type": "RANGE", "mode": "NULLABLE", "rangeElementType": { "type": "DATE" } } ]
מערך ה-JSON מסומן בסוגריים המרובעים בהתחלה ובסוף []. כל ערך בעמודה צריך להיות מופרד באמצעות פסיק: },.
כדי לכתוב סכימה של טבלה קיימת לקובץ מקומי:
BQ
bq show \ --schema \ --format=prettyjson \ project_id:dataset.table > path_to_file
מחליפים את מה שכתוב בשדות הבאים:
project_id: מזהה הפרויקט.-
dataset: מערך נתונים בפרויקט. -
table: השם של סכימת טבלה קיימת. -
path_to_file: המיקום של הקובץ המקומי שבו אתם כותבים את סכימת הטבלה.
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לכתוב קובץ JSON של סכימה מטבלה באמצעות ספריית הלקוח של Python, צריך להפעיל את השיטה Client.schema_to_json.אתם יכולים להשתמש בקובץ הפלט כנקודת התחלה לקובץ סכימת ה-JSON שלכם. אם משתמשים בגישה הזו, צריך לוודא שהקובץ מכיל רק את מערך ה-JSON שמייצג את הסכימה של הטבלה.
לדוגמה, מערך ה-JSON הבא מייצג סכימת טבלה בסיסית. לסכימה הזו יש שלוש עמודות: qtr (REQUIRED STRING), rep (NULLABLE STRING) ו-sales (NULLABLE FLOAT).
[ { "name": "qtr", "type": "STRING", "mode": "REQUIRED", "description": "quarter" }, { "name": "rep", "type": "STRING", "mode": "NULLABLE", "description": "sales representative" }, { "name": "sales", "type": "FLOAT", "mode": "NULLABLE", "defaultValueExpression": "2.55" } ]
שימוש בקובץ סכימת JSON
אחרי שיוצרים את קובץ הסכימה ב-JSON, אפשר לציין אותו באמצעות כלי שורת הפקודה של BigQuery. אי אפשר להשתמש בקובץ סכימה עם Google Cloud המסוף או ה-API.
מספקים את קובץ הסכימה:
- אם אתם טוענים נתונים, השתמשו בפקודה
bq load. - אם אתם יוצרים טבלה ריקה, השתמשו בפקודה
bq mk.
כשמספקים קובץ סכימת JSON, הוא צריך להיות מאוחסן במיקום שאפשר לקרוא ממנו באופן מקומי. אי אפשר לציין קובץ סכימת JSON שמאוחסן ב-Cloud Storage או ב-Google Drive.
ציון קובץ סכימה בזמן טעינת נתונים
כדי לטעון נתונים לטבלה באמצעות הגדרת סכימה ב-JSON, מבצעים את הפעולות הבאות:
BQ
bq --location=location load \ --source_format=format \ project_id:dataset.table \ path_to_data_file \ path_to_schema_file
מחליפים את מה שכתוב בשדות הבאים:
-
location: השם של המיקום. הדגל--locationהוא אופציונלי. לדוגמה, אם אתם משתמשים ב-BigQuery באזור טוקיו, אתם יכולים להגדיר את הערך של הדגל ל-asia-northeast1. אפשר להגדיר ערך ברירת מחדל למיקום באמצעות קובץ .bigqueryrc. format:NEWLINE_DELIMITED_JSONאוCSV.project_id: מזהה הפרויקט.-
dataset: קבוצת הנתונים שמכילה את הטבלה שאליה טוענים את הנתונים. -
table: שם הטבלה שאליה טוענים את הנתונים. -
path_to_data_file: המיקום של קובץ הנתונים בפורמט CSV או JSON במחשב המקומי או ב-Cloud Storage. -
path_to_schema_file: הנתיב לקובץ הסכימה במחשב המקומי.
דוגמה:
מזינים את הפקודה הבאה כדי לטעון נתונים מקובץ CSV מקומי בשם myfile.csv אל mydataset.mytable בפרויקט ברירת המחדל. הסכימה מצוינת ב-myschema.json בספרייה הנוכחית.
bq load --source_format=CSV mydataset.mytable ./myfile.csv ./myschema.json
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי הוראות ההגדרה של Python במדריך למתחילים של BigQuery באמצעות ספריות לקוח. מידע נוסף מופיע במאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לטעון סכימת טבלה מקובץ JSON באמצעות ספריית הלקוח של Python, צריך להפעיל את ה-method schema_from_json.ציון קובץ סכימה כשיוצרים טבלה
כדי ליצור טבלה ריקה במערך נתונים קיים באמצעות קובץ סכימה בפורמט JSON:
BQ
bq mk --table project_id:dataset.table path_to_schema_file
מחליפים את מה שכתוב בשדות הבאים:
project_id: מזהה הפרויקט.-
dataset: מערך נתונים בפרויקט. -
table: השם של הטבלה שיוצרים. -
path_to_schema_file: הנתיב לקובץ הסכימה במחשב המקומי.
לדוגמה, הפקודה הבאה יוצרת טבלה בשם mytable ב-mydataset בפרויקט ברירת המחדל. הסכימה מצוינת ב-myschema.json בספרייה הנוכחית:
bq mk --table mydataset.mytable ./myschema.json
Python
לפני שמנסים את הדוגמה הזו, צריך לפעול לפי Pythonהוראות ההגדרה שבמדריך למתחילים של BigQuery באמצעות ספריות לקוח. למידע נוסף, קראו את מאמרי העזרה של BigQuery Python API.
כדי לבצע אימות ב-BigQuery, צריך להגדיר את Application Default Credentials. מידע נוסף זמין במאמר הגדרת אימות לספריות לקוח.
כדי לטעון סכימת טבלה מקובץ JSON באמצעות ספריית הלקוח של Python, צריך להפעיל את ה-method schema_from_json.הגדרת סכימה ב-API
מציינים סכימת טבלה באמצעות ה-API:
כדי לציין סכימה כשאתם טוענים נתונים, צריך להפעיל את ה-method
jobs.insertולהגדיר את המאפייןschemaבמשאבJobConfigurationLoad.כדי לציין סכימה כשיוצרים טבלה, קוראים ל-method
tables.insertומגדירים את המאפייןschemaבמשאבTable.
הגדרת סכימה באמצעות ה-API דומה לתהליך של יצירת קובץ סכימה בפורמט JSON.
אבטחת טבלאות
כדי לשלוט בגישה לטבלאות ב-BigQuery, אפשר לעיין במאמר בנושא שליטה בגישה למשאבים באמצעות IAM.
המאמרים הבאים
- איך מגדירים עמודות בתוך עמודות ועמודות חוזרות בהגדרת סכימה
- מידע על זיהוי אוטומטי של סכימה
- מידע על טעינת נתונים ל-BigQuery
- מידע ולמידה על יצירה ושימוש בטבלאות