מיפוי שמות של אובייקטים ב-SQL לתרגום
מיפוי שמות מאפשר למפות שמות של אובייקטים ב-SQL בקובצי המקור לשמות היעד ב-BigQuery, באמצעות קובץ תצורה של YAML. במהלך תרגום ה-SQL, כל ההפניות לכל שם מקור בהצהרות ה-SQL מתעדכנות לשם היעד בפלט המתורגם.
כדי להגדיר מיפוי שמות לאובייקט, אתם יכולים להשתמש בחלק מהרכיבים הבאים או בכולם:
- כלל מיפוי שמות, שמורכב מהרכיבים הבאים:
- חלקי השם של המקור, שמספקים את השם המלא של האובייקט במערכת המקור.
- חלקים של שם היעד שמספקים את שם האובייקט ב-BigQuery.
- שם של מסד נתונים שמוגדר כברירת מחדל לשימוש עם כל אובייקטי מקור שלא צוין בהם מסד נתונים.
- שם סכימה שמוגדרת כברירת מחדל לשימוש עם כל אובייקט מקור שלא צוינה בו סכימה.
חלקי השם
אתם מספקים את הערכים של שמות האובייקטים של המקור והיעד בכלל מיפוי שמות, באמצעות שילוב של חלקי השמות הבאים:
-
Database: אובייקט ברמה העליונה בהיררכיית האובייקטים, לדוגמהdatabase.schema.relation.attribute. יכול להיות שבפלטפורמת המקור שלכם משתמשים במונח חלופי, למשל פרויקט. -
Schema: אובייקט ברמה השנייה בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם משתמשים במונח חלופי, למשל קבוצת נתונים. -
Relation: אובייקט ברמה השלישית בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם משתמשים במונח חלופי, כמו טבלה או תצוגה. -
Function: אובייקט ברמה השלישית בהיררכיית האובייקטים, שמייצג פונקציה בהגדרת המשתמש (UDF) או פרוצדורה מאוחסנת, לדוגמהcreate procedure db.test.function1(a int). -
Attribute: אובייקט ברמה הרביעית בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם משתמשים במונח חלופי, למשל עמודה.
כשמגדירים כללים למיפוי שמות בקובץ YAML של הגדרות, צריך לכלול רק את החלקים בשם היעד שרוצים לשנות. כל החלקים שהושמטו בשם היעד נשארים ללא שינוי.
מסד נתונים שמוגדר כברירת מחדל
אם אתם רוצים להוסיף שם של פרויקט ב-BigQuery לכל האובייקטים המתורגמים, הדרך הכי קלה היא לציין שם ברירת מחדל למסד הנתונים בקובץ YAML של הגדרות אישיות. האפשרות הזו פועלת בקובצי מקור שבהם משתמשים בשמות עם שלושה חלקים, או בקבצים שבהם משתמשים בשמות עם ארבעה חלקים אבל לא מציינים את שם האובייקט ברמה הגבוהה ביותר.
לדוגמה, אם מציינים את שם ברירת המחדל של מסד הנתונים myproject, הצהרת מקור כמו SELECT * FROM database.table מתורגמת ל-SELECT * FROM myproject.database.table. אם יש לכם אובייקטים שכבר משתמשים בחלק של שם מסד הנתונים, כמו SELECT * FROM database.schema.table, אתם צריכים להשתמש בכלל מיפוי שמות כדי לשנות את השם של database.schema.table ל-myproject.schema.table.
סכימת ברירת המחדל
אם אתם רוצים להגדיר באופן מלא את כל שמות האובייקטים בקובצי המקור שלא משתמשים בשמות בני ארבעה חלקים, אתם יכולים לספק גם שם ברירת מחדל למסד נתונים וגם שם ברירת מחדל לסכימה בקובץ YAML של הגדרות אישיות. שם הסכימה שמוגדר כברירת מחדל הוא השם הראשון של הסכימה באפשרות של נתיב החיפוש של הסכימה.
לדוגמה, אם מציינים את שם מסד הנתונים שמוגדר כברירת מחדל myproject ואת שם הסכימה שמוגדרת כברירת מחדל myschema, אז הצהרות המקור הבאות:
SELECT * FROM database.tableSELECT * FROM table1
מתורגמים ל:
SELECT * FROM myproject.database.table.SELECT * FROM myproject.myschema.table1
התנהגות של כלל מיפוי שמות
בקטעים הבאים מוסבר איך פועלים כללי מיפוי השמות.
הכללים עוברים בירושה כלפי מטה בהיררכיית האובייקטים
שינוי שם שמשפיע על אובייקט ברמה גבוהה יותר משפיע על אובייקט היעד, וגם על כל אובייקטי הצאצא שלו באותה היררכיה.
לדוגמה, אם אתם מציינים את הכלל הבא למיפוי שמות עם סוג אובייקט schema:
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | sales_db |
sales |
| סכימה | cust_mgmt |
cms |
| קשר | ||
| מאפיין |
כשמחילים את השינוי, משתנים גם החלקים של שם מסד הנתונים והסכימה של כל האובייקטים מסוג relation ו-attribute בסכימה sales_db.cust_mgmt. לדוגמה, אובייקט relation בשם sales_db.cust_mgmt.history הופך ל-sales.cms.history.
לעומת זאת, שינויי שמות שמטרגטים אובייקטים ברמה נמוכה יותר לא משפיעים על אובייקטים ברמה גבוהה יותר או באותה רמה בהיררכיית האובייקטים.
לדוגמה, אם אתם מציינים את הכלל הבא למיפוי שמות עם סוג אובייקט relation:
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | sales_db |
sales |
| סכימה | cust_mgmt |
cms |
| קשר | clients |
accounts |
| מאפיין |
כשמחילים את השינוי, השמות של אובייקטים אחרים ברמה sales_db או sales_db.cust_mgmt בהיררכיית האובייקטים לא משתנים.
המערכת תחיל את הכלל הכי ספציפי
אפשר להחיל על אובייקט רק כלל אחד של מיפוי שמות. אם כמה כללים יכולים להשפיע על אובייקט אחד, המערכת תחיל את הכלל שמשפיע על החלק בשם ברמה הנמוכה ביותר. לדוגמה, אם כלל מיפוי של שמות מסוג database וכלל מיפוי של שמות מסוג schema יכולים להשפיע על השם של אובייקט מסוג relation, המערכת תחיל את כלל המיפוי של שמות מסוג schema.
צריך להשתמש בשילוב ייחודי של ערכי סוג ומקור
אי אפשר לציין יותר מכלל אחד למיפוי שמות עם אותם ערכים של סוג ומקור. לדוגמה, אי אפשר לציין את שני הכללים הבאים למיפוי שמות:
כלל 1, סוג attribute |
כלל 2, סוג attribute |
|||
|---|---|---|---|---|
| חלק מהשם | מקור | Target | מקור | Target |
| מסד נתונים | project |
project |
||
| סכימה | dataset1 |
dataset1 |
||
| קשר | table1 |
table1 |
||
| מאפיין | lname |
last_name |
lname |
lastname |
שינויי שמות לא משפיעים על שאר הרכיבים
שינויים בשמות לא משפיעים על כללי השמות.
לדוגמה, אם יצרתם כלל מיפוי שמות שמשנה את השם database1 ל-project1, וכלל נוסף שמשנה את השם project1 ל-project2, המתרגם לא ממפה את database1 ל-project2.
טיפול באובייקטים של מקורות שאין להם שמות בני ארבעה חלקים
בחלק ממערכות המקור, כמו Teradata, משתמשים בשלושה חלקי שם כדי להגדיר באופן מלא את שמות האובייקטים. במערכות מקור רבות אפשר גם להשתמש בשמות שמוגדרים חלקית בניבי ה-SQL שלהן, למשל להשתמש ב-database1.schema1.table1, ב-schema1.table1 וב-table1 כדי להתייחס לאותו אובייקט בהקשרים שונים. אם קובצי המקור מכילים אובייקטים שלא משתמשים בשמות אובייקטים בני ארבעה חלקים, אתם יכולים להשתמש במיפוי שמות בשילוב עם ציון של שם מסד נתונים שמוגדר כברירת מחדל ושם סכימה שמוגדר כברירת מחדל כדי להשיג את מיפוי השמות הרצוי.
דוגמאות לשימוש בכללי מיפוי שמות עם שם ברירת מחדל של מסד נתונים או שם ברירת מחדל של סכימה מופיעות במאמרים שינוי החלק של שם מסד הנתונים לאובייקטים עם רמות שונות של השלמת שם ושינוי שם של אובייקט יחס שמוגדר באופן חלקי.
דוגמאות למיפוי שמות
הדוגמאות בקטע הזה ממחישות איך כללי מיפוי השמות פועלים בתרחישים נפוצים לדוגמה. במאמר מיפוי שמות פלט מפורטים התחביר והדוגמאות להגדרות YAML.
שינוי החלק של שם מסד הנתונים באובייקטים שמוגדרים במלואם
בדוגמה הבאה, החלק של שם מסד הנתונים משתנה מ-td_project ל-bq_project בכל האובייקטים מסוג database, schema, relation ו-function שיש להם שמות מלאים.
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | td_project |
bq_project |
| סכימה | ||
| קשר | ||
| מאפיין |
סוג
database
קלט לדוגמה
SELECT * FROM td_project.schema.table;SELECT * FROM td_project.schema1.table1;
פלט לדוגמה
SELECT * FROM bq_project.schema.table;SELECT * FROM bq_project.schema1.table1
שינוי החלק של שם מסד הנתונים באובייקטים עם רמות שונות של השלמת שם
בדוגמה הבאה, החלק של שם מסד הנתונים project משתנה ל-bq_project לכל סוגי האובייקטים, וגם bq_project מתווסף כחלק של שם מסד הנתונים לאובייקטים שלא צוין להם שם.
כדי לעשות את זה, צריך לציין ערך ברירת מחדל למסד הנתונים בנוסף לציון כללי מיפוי שמות. למידע נוסף על ציון שם ברירת מחדל של מסד נתונים, קראו את המאמר ציון ברירת מחדל של מסד נתונים ונתיב חיפוש של סכימה.
ערך ברירת המחדל של מסד הנתונים
project
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | project |
bq_project |
| סכימה | ||
| קשר | ||
| מאפיין |
סוג
database
קלט לדוגמה
SELECT * FROM project.schema.table;SELECT * FROM schema1.table1;
פלט לדוגמה
SELECT * FROM bq_project.schema.table;SELECT * FROM bq_project.schema1.table1
שינוי החלק של שם מסד הנתונים והחלק של שם הסכימה באובייקטים שמוגדרים באופן מלא
בדוגמה הבאה, החלק של שם מסד הנתונים warehouse1 משתנה ל-myproject, והחלק של שם הסכימה database1 משתנה ל-mydataset.
אפשר גם לשנות את החלקים של שם אובייקט relation באותו אופן, באמצעות סוג relation וציון ערכי מקור ויעד לחלק של שם היחס.
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | warehouse1 |
myproject |
| סכימה | database1 |
mydataset |
| קשר | ||
| מאפיין |
סוג
schema
קלט לדוגמה
SELECT * FROM warehouse1.database1.table1;SELECT * FROM database2.table2;
פלט לדוגמה
SELECT * FROM myproject.mydataset.table1;SELECT * FROM __DEFAULT_DATABASE__.database2.table2;
שינוי שם אובייקט relation שמוגדר במלואו
בדוגמה הבאה, השם של mydb.myschema.mytable משתנה ל-mydb.myschema.table1.
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | mydb |
mydb |
| סכימה | myschema |
myschema |
| קשר | mytable |
table1 |
| מאפיין |
סוג
relation
קלט לדוגמה
CREATE table mydb.myschema.mytable(id int, name varchar(64));
פלט לדוגמה
CREATE table mydb.myschema.table1(id integer, name string(64));
שינוי שם של אובייקט relation שמוגדר באופן חלקי
בדוגמה הבאה, השם של myschema.mytable משתנה ל-mydb.myschema.table1.
ערך ברירת המחדל של מסד הנתונים
mydb
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | mydb |
mydb |
| סכימה | myschema |
myschema |
| קשר | mytable |
table1 |
| מאפיין |
סוג
relation
קלט לדוגמה
CREATE table myschema.mytable(id int, name varchar(64));
פלט לדוגמה
CREATE table mydb.myschema.table1(id integer, name string(64));
שינוי שם של אובייקט ב-function
בדוגמה הבאה, השם של mydb.myschema.myprocedure משתנה ל-mydb.myschema.procedure1.
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | mydb |
mydb |
| סכימה | myschema |
myschema |
| תפקיד | myprocedure |
procedure1 |
| מאפיין |
סוג
function
קלט לדוגמה
CREATE PROCEDURE mydb.myschema.myprocedure(a int) BEGIN declare i int; SET i = a + 1; END;CALL mydb.myschema.myprocedure(7)
פלט לדוגמה
CREATE PROCEDURE mydb.myschema.procedure1(a int) BEGIN declare i int; SET i = a + 1; END;CALL mydb.myschema.procedure1(7);
שינוי שם של אובייקט ב-attribute
בדוגמה הבאה, השם של mydb.myschema.mytable.myfield משתנה ל-mydb.myschema.mytable.field1. מכיוון שאובייקטים מסוג attribute נמצאים ברמה הנמוכה ביותר בהיררכיית האובייקטים, מיפוי השמות הזה לא משנה את השם של אף אובייקט אחר.
חלקי השם של המקור והיעד
| חלק מהשם | מקור | Target |
|---|---|---|
| מסד נתונים | mydb |
|
| סכימה | myschema |
|
| קשר | mytable |
|
| מאפיין | myfield |
field1 |
סוג
attribute
קלט לדוגמה
CREATE table mydb.myschema.mytable(myfield int, name varchar(64), revenue int);SELECT myfield, name FROM mydb.myschema.mytable;
פלט לדוגמה
CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);SELECT field1, name FROM mydb.myschema.mytable;