מיפוי של שמות אובייקטים של SQL לתרגום באצווה
במאמר הזה מוסבר איך להגדיר מיפוי שמות כדי לשנות את השם של אובייקטים של SQL במהלך תרגום באצווה.
סקירה כללית
מיפוי שמות מאפשר לכם לזהות את השמות של אובייקטים של SQL בקובצי המקור, ולציין שמות יעד לאובייקטים האלה ב-BigQuery. כדי להגדיר מיפוי שמות לאובייקט, אפשר להשתמש בחלק מהרכיבים הבאים או בכולם:
- כלל למיפוי שמות, שמורכב מ:
- שם של מסד נתונים שמוגדר כברירת מחדל לשימוש עם אובייקטים ממקורות שלא צוין עבורם שם של מסד נתונים.
- שם של סכימת ברירת מחדל לשימוש עם אובייקטים ממקורות שלא צוינה להם סכימה.
שמות חלקים
אתם מספקים את הערכים של שמות אובייקטים של מקור ויעד בכלל מיפוי שמות באמצעות שילוב של חלקי השמות הבאים:
- מסד נתונים: הרמה העליונה בהיררכיית השמות. יכול להיות שבפלטפורמת המקור נעשה שימוש במונח אחר, למשל פרויקט.
- סכימה: הרמה השנייה בהיררכיית השמות. יכול להיות שבפלטפורמת המקור נעשה שימוש במונח אחר, למשל מערך נתונים.
- קשר: הרמה השלישית בהיררכיית השמות. יכול להיות שבפלטפורמת המקור יש מונח אחר לזה, למשל טבלה.
- מאפיין: הרמה הנמוכה ביותר בהיררכיית השמות. יכול להיות שבפלטפורמת המקור שלכם יש מונח חלופי לזה, למשל עמודה.
סוגי אובייקטים
בנוסף, צריך לציין את סוג אובייקט המקור שמשנים את השם שלו בכלל מיפוי שמות. יש תמיכה בסוגי האובייקטים הבאים:
-
Database: אובייקט ברמה העליונה בהיררכיית האובייקטים, לדוגמהdatabase.schema.relation.attribute. יכול להיות שבפלטפורמת המקור נעשה שימוש במונח אחר, למשל פרויקט. הגדרתdatabaseכסוג האובייקט משנה את כל ההפניות למחרוזת המקורית בהצהרות DDL ו-DML. -
Schema: אובייקט ברמה השנייה בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם יש מונח אחר לזה, למשל מערך נתונים. אם מצייניםschemaכסוג האובייקט, כל ההפניות למחרוזת המקור משתנות בהצהרות DDL ו-DML. -
Relation: אובייקט ברמה השלישית בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם יש מונח אחר לזה, למשל טבלה. אם מצייניםrelationכסוג האובייקט, כל ההפניות למחרוזת המקור בהצהרות DDL משתנות. -
Relation alias: כינוי לאובייקט ברמה השלישית. לדוגמה, בשאילתהSELECT t.field1, t.field2 FROM myTable t;, tהוא כינוי של קשר. בשאילתהSELECT field1, field2 FROM schema1.table1, table1הוא גם כינוי של קשר. אם מצייניםrelation aliasכסוג האובייקט, נוצרים כינויים לכל ההפניות למחרוזת המקור בפקודות DML. לדוגמה, אם מציינים אתtableAכשם היעד, הדוגמאות הקודמות מתורגמות ל-SELECT tableA.field1, tableA.field2 FROM myTable AS tableA;ול-SELECT tableA.field1, tableA.field2 FROM schema1.table1 AS tableA, בהתאמה. -
Function: פרוצדורה, לדוגמהcreate procedure db.test.function1(a int). אם מצייניםfunctionכסוג האובייקט, כל ההפניות למחרוזת המקור משתנות בהצהרות DDL ו-DML. -
Attribute: אובייקט ברמה הרביעית בהיררכיית האובייקטים. יכול להיות שבפלטפורמת המקור שלכם יש מונח אחר לזה, למשל עמודה. אם מצייניםattributeכסוג האובייקט, כל ההפניות למחרוזת המקור בהצהרות DDL משתנות. -
Attribute alias: כינוי לאובייקט ברמה הרביעית. לדוגמה, בשאילתהSELECT field1 FROM myTable;, field1הוא כינוי של מאפיין. אם מצייניםattribute aliasכסוג האובייקט, כל ההפניות למחרוזת המקור בהצהרות DML משתנות.
חלקים נדרשים בשם של סוגי אובייקטים
כדי לתאר אובייקט בכלל מיפוי שמות, משתמשים בחלקי השם שזוהו לכל סוג אובייקט בטבלה הבאה:
| סוג | שם אובייקט המקור | שם אובייקט היעד | ||||||
|---|---|---|---|---|---|---|---|---|
| חלק משם מסד הנתונים | חלק משם הסכימה | Relation name part | חלק משם המאפיין | חלק משם מסד הנתונים | חלק משם הסכימה | Relation name part | חלק משם המאפיין | |
Database |
X | X | ||||||
Schema |
X | X | X | X | ||||
Relation |
X | X | X | X | X | X | ||
Function |
X | X | X | X | X | X | ||
Attribute |
X | X | X | X | X | |||
Attribute alias |
X | X | X | X | X | |||
Relation alias |
X | X | ||||||
מסד נתונים שמוגדר כברירת מחדל
אם רוצים להוסיף את שם הפרויקט ב-BigQuery לכל האובייקטים המתורגמים, הכי קל לציין שם מסד נתונים שמוגדר כברירת מחדל כשיוצרים משימת תרגום. האפשרות הזו מתאימה לקובצי מקור שבהם נעשה שימוש בשמות בני שלושה חלקים, או בשמות בני ארבעה חלקים אבל לא מצוין שם האובייקט ברמה הגבוהה ביותר.
לדוגמה, אם מציינים את שם מסד הנתונים שמוגדר כברירת מחדל myproject, אז משפט מקור כמו SELECT * FROM database.table מתורגם ל-SELECT * FROM myproject.database.table. אם יש לכם אובייקטים שכבר משתמשים בחלק משם מסד הנתונים, כמו SELECT * FROM database.schema.table, אתם צריכים להשתמש בכלל למיפוי שמות כדי לשנות את השם של database.schema.table ל-myproject.schema.table.
סכימה שמוגדרת כברירת מחדל
אם רוצים לציין את כל שמות האובייקטים בקובצי המקור שלא משתמשים בשמות בני ארבעה חלקים, אפשר לספק שם מסד נתונים שמוגדר כברירת מחדל ושם סכימה שמוגדר כברירת מחדל כשיוצרים עבודת תרגום. שם הסכימה שמוגדר כברירת מחדל מופיע כשם הסכימה הראשון באפשרות של נתיב החיפוש של הסכימה.
לדוגמה, אם מציינים את שם מסד הנתונים שמוגדר כברירת מחדל 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 |
יצירת כללי מיפוי שמות של attribute ו-attribute alias
כשמשתמשים בכלל מיפוי שמות מסוג attribute כדי לשנות שם של מאפיין בהצהרות DDL, צריך ליצור כלל מיפוי שמות מסוג attribute alias כדי לשנות את השם של המאפיין הזה גם בהצהרות DML.
שינויים בשם לא מועברים באופן אוטומטי
שינויים בשם לא מועברים באופן אוטומטי לכללי שמות אחרים.
לדוגמה, אם יצרתם כלל למיפוי שמות שמשנה את השם database1 ל-project1, וכלל נוסף שמשנה את השם project1 ל-project2, הכלי לתרגום לא ימפה את database1 ל-project2.
טיפול באובייקטים של המקור שאין להם שמות בני ארבעה חלקים
מערכות מקור מסוימות, כמו Teradata, משתמשות בשלושה חלקים של שם כדי לציין את השם המלא של אובייקט. במערכות מקור רבות אפשר גם להשתמש בשמות שמוגדרים באופן חלקי בניבי ה-SQL שלהן, למשל באמצעות database1.schema1.table1, schema1.table1 ו-table1 כדי להתייחס לאותו אובייקט בהקשרים שונים. אם קובצי המקור מכילים אובייקטים שלא משתמשים בשמות אובייקטים בני ארבעה חלקים, אפשר להשתמש במיפוי שמות בשילוב עם ציון שם מסד נתונים שמוגדר כברירת מחדל ושם סכימה שמוגדר כברירת מחדל כדי להשיג את מיפוי השמות הרצוי.
דוגמאות לשימוש בכללי מיפוי שמות עם שם מסד נתונים שמוגדר כברירת מחדל או עם שם סכימה שמוגדר כברירת מחדל מופיעות במאמרים שינוי החלק של שם מסד הנתונים לאובייקטים עם רמות שונות של השלמת שם ושינוי שם של אובייקט קשר עם שם חלקי.
דוגמאות למיפוי שמות
בדוגמאות שבקטע הזה אפשר לראות איך כללי מיפוי שמות פועלים בתרחישי שימוש נפוצים.
שינוי החלק של שם מסד הנתונים באובייקטים מוגדרים במלואם
בדוגמה הבאה, השם של חלק ממסד הנתונים משתנה מ-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));
שינוי שם של אובייקט relation alias
בדוגמה הבאה משנים את השם של כל המופעים של האובייקט relation alias table ל-t.
חלקים בשם המקור ובשם היעד
| חלק בשם | מקור | Target |
|---|---|---|
| מסד נתונים | ||
| סכימה | ||
| קשר | table |
t |
| מאפיין |
סוג
relation alias
קלט לדוגמה
SELECT table.id, table.name FROM mydb.myschema.mytable table
פלט לדוגמה
SELECT t.id, t.name FROM mydb.myschema.mytable AS t
שינוי שם של אובייקט function
בדוגמה הבאה, השם mydb.myschema.myfunction משתנה ל-mydb.myschema.function1.
חלקים בשם המקור ובשם היעד
| חלק בשם | מקור | 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);
פלט לדוגמה
CREATE table mydb.myschema.mytable(field1 int, name varchar(64), revenue int);
שינוי שם של אובייקט attribute alias
בדוגמה הבאה, השם mydb.myschema.mytable.myfield משתנה ל-mydb.myschema.mytable.field1. אובייקטים מסוג attribute alias נמצאים ברמה הנמוכה ביותר בהיררכיית האובייקטים, ולכן מיפוי השמות הזה לא משנה את השם של אף אובייקט אחר.
חלקים בשם המקור ובשם היעד
| חלק בשם | מקור | Target |
|---|---|---|
| מסד נתונים | mydb |
|
| סכימה | myschema |
|
| קשר | mytable |
|
| מאפיין | myfield |
field1 |
סוג
attribute alias
קלט לדוגמה
SELECT myfield, name FROM mydb.myschema.mytable;
פלט לדוגמה
SELECT field1, name FROM mydb.myschema.mytable;
פורמט קובץ JSON
אם בוחרים לציין כללי מיפוי שמות באמצעות קובץ JSON ולא באמצעות מסוף Cloud de Confiance , קובץ ה-JSON צריך להיות בפורמט הבא:
{
"name_map": [
{
"source": {
"type": "string",
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
},
"target": {
"database": "string",
"schema": "string",
"relation": "string",
"attribute": "string"
}
}
]
}
גודל הקובץ צריך להיות פחות מ-5MB.
מידע נוסף על הגדרת כללי מיפוי שמות לעבודת תרגום זמין במאמר בנושא שליחת עבודת תרגום.
דוגמאות ל-JSON
בדוגמאות הבאות מוצגות דרכים לציין כללים למיפוי שמות באמצעות קובצי JSON.
דוגמה 1
כללי מיפוי השמות בדוגמה הזו גורמים לשינויים הבאים בשמות האובייקטים:
- משנים את השם של מופעים של האובייקט
project.dataset2.table2relationל-bq_project.bq_dataset2.bq_table2. - משנה את השם של כל המופעים של האובייקט
projectdatabaseל-bq_project. לדוגמה,project.mydataset.table2הופך ל-bq_project.mydataset.table2ו-CREATE DATASET project.mydatasetהופך ל-CREATE DATASET bq_project.mydataset.
{
"name_map": [{
"source": {
"type": "RELATION",
"database": "project",
"schema": "dataset2",
"relation": "table2"
},
"target": {
"database": "bq_project",
"schema": "bq_dataset2",
"relation": "bq_table2"
}
}, {
"source": {
"type": "DATABASE",
"database": "project"
},
"target": {
"database": "bq_project"
}
}]
}
דוגמה 2
כללי מיפוי השמות בדוגמה הזו גורמים לשינויים הבאים בשמות האובייקטים:
- משנים את השם של מופעים של האובייקט
project.dataset2.table2.field1attributeל-bq_project.bq_dataset2.bq_table2.bq_fieldבפקודות DDL ו-DML.
{
"name_map": [{
"source": {
"type": "ATTRIBUTE",
"database": "project",
"schema": "dataset2",
"relation": "table2",
"attribute": "field1"
},
"target": {
"database": "bq_project",
"schema": "bq_dataset2",
"relation": "bq_table2",
"attribute": "bq_field"
}
}, {
"source": {
"type": "ATTRIBUTE_ALIAS",
"database": "project",
"schema": "dataset2",
"relation": "table2",
"attribute": "field1"
},
"target": {
"database": "bq_project",
"schema": "bq_dataset2",
"relation": "bq_table2",
"attribute": "bq_field"
}
}]
}