מיפוי שמות של אובייקטים ב-SQL לתרגום

מיפוי שמות מאפשר למפות שמות של אובייקטים ב-SQL בקובצי המקור לשמות היעד ב-BigQuery, באמצעות קובץ תצורה של YAML. במהלך תרגום ה-SQL, כל ההפניות לכל שם מקור בהצהרות ה-SQL מתעדכנות לשם היעד בפלט המתורגם.

כדי להגדיר מיפוי שמות לאובייקט, אתם יכולים להשתמש בחלק מהרכיבים הבאים או בכולם:

חלקי השם

אתם מספקים את הערכים של שמות האובייקטים של המקור והיעד בכלל מיפוי שמות, באמצעות שילוב של חלקי השמות הבאים:

  • ‫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.table
  • SELECT * 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;