מדריך לתרגום SQL ב-Snowflake
במאמר הזה מפורטים הדמיון וההבדלים בתחביר SQL בין Snowflake לבין BigQuery, כדי לעזור לכם לתכנן ולבצע מהר יותר את המעבר של מחסן הנתונים הארגוני (EDW) שלכם ל-BigQuery. מחסן הנתונים של Snowflake מיועד לעבוד עם תחביר SQL ספציפי ל-Snowflake. יכול להיות שתצטרכו לשנות סקריפטים שנכתבו עבור Snowflake כדי שתוכלו להשתמש בהם ב-BigQuery, כי יש הבדלים בניבי ה-SQL בין השירותים. אפשר להשתמש בתרגום SQL באצווה כדי להעביר את סקריפטים של SQL בכמות גדולה, או בתרגום SQL אינטראקטיבי כדי לתרגם שאילתות אד-הוק. שני הכלים תומכים ב-Snowflake SQL בגרסת preview.
סוגי נתונים
בקטע הזה מוצגים סוגי נתונים מקבילים ב-Snowflake וב-BigQuery.
| פתית שלג | BigQuery | הערות |
|---|---|---|
NUMBER/
DECIMAL/NUMERIC |
NUMERIC/BIGNUMERIC |
אפשר למפות אותו ל-NUMERIC או ל-BIGNUMERIC, בהתאם לדיוק ולסולם.סוג הנתונים NUMBER ב-Snowflake תומך ב-38 ספרות של דיוק ו-37 ספרות של קנה מידה. אפשר לציין את רמת הדיוק וההיקף לפי המשתמש.BigQuery תומך ב- NUMERIC וב-BIGNUMERIC עם דיוק וקנה מידה שמוגדרים באופן אופציונלי בתוך גבולות מסוימים. |
INT/INTEGER |
BIGNUMERIC |
INT/INTEGER וכל סוגי הנתונים האחרים שדומים ל-INT, כמו BIGINT, TINYINT, SMALLINT, BYTEINT, מייצגים כינוי לסוג הנתונים NUMBER, שבו אי אפשר לציין את הדיוק והקנה מידה, והם תמיד NUMBER(38, 0)אפשר להשתמש באפשרות ההגדרה REWRITE_ZERO_SCALE_NUMERIC_AS_INTEGER כדי להמיר במקום זאת את INTEGER ואת הסוגים שקשורים אליו ל-INT64. |
BIGINT |
BIGNUMERIC |
|
SMALLINT |
BIGNUMERIC |
|
TINYINT |
BIGNUMERIC |
|
BYTEINT |
BIGNUMERIC |
|
FLOAT/ |
FLOAT64 |
סוג הנתונים FLOAT ב-Snowflake קובע ש-NaN גדול מ-X, כאשר X הוא כל ערך FLOAT (שאינו NaN).סוג הנתונים FLOAT ב-BigQuery מגדיר את הערך NaN כ-< X, כאשר X הוא כל ערך FLOAT (חוץ מ-NaN עצמו). |
DOUBLE/REAL |
FLOAT64 |
סוג הנתונים DOUBLE ב-Snowflake זהה לסוג הנתונים FLOAT ב-Snowflake, אבל בדרך כלל הוא מוצג באופן שגוי כ-FLOAT. הוא מאוחסן בצורה תקינה כ-DOUBLE. |
VARCHAR |
STRING |
אורך הנתונים המקסימלי של סוג הנתונים VARCHAR ב-Snowflake הוא 16MB (לא דחוס). אם לא מציינים אורך, ברירת המחדל היא האורך המקסימלי.סוג הנתונים STRING ב-BigQuery מאוחסן כ-Unicode בקידוד UTF-8 באורך משתנה. האורך המקסימלי הוא 16,000 תווים. |
CHAR/CHARACTER |
STRING |
האורך המקסימלי של סוג הנתונים CHAR ב-Snowflake הוא 1. |
STRING/TEXT |
STRING |
סוג הנתונים STRING ב-Snowflake זהה ל-VARCHAR ב-Snowflake. |
BINARY |
BYTES |
|
VARBINARY |
BYTES |
|
BOOLEAN |
BOOL |
סוג הנתונים BOOL ב-BigQuery יכול לקבל רק TRUE/FALSE, בניגוד לסוג הנתונים BOOL ב-Snowflake, שיכול לקבל TRUE/FALSE/NULL. |
DATE |
DATE |
הסוג DATE ב-Snowflake מקבל את רוב פורמטי התאריכים הנפוצים, בניגוד לסוג DATE ב-BigQuery, שמקבל רק תאריכים בפורמט 'YYYY-[M]M-[D]D'. |
TIME |
TIME |
הסוג TIME ב-Snowflake תומך ב-0 עד 9 ננו-שניות של דיוק, בעוד שהסוג TIME ב-BigQuery תומך ב-0 עד 6 ננו-שניות של דיוק. |
TIMESTAMP |
DATETIME |
TIMESTAMP הוא כינוי שניתן להגדרה על ידי המשתמש, ומוגדר כברירת מחדל כ-TIMESTAMP_NTZ, שממופה ל-DATETIME ב-BigQuery. |
TIMESTAMP_LTZ |
TIMESTAMP |
|
TIMESTAMP_NTZ/DATETIME |
DATETIME |
|
TIMESTAMP_TZ |
TIMESTAMP |
|
OBJECT |
JSON |
הסוג OBJECT ב-Snowflake לא תומך בערכים עם הקלדה מפורשת. הערכים הם מסוג VARIANT. |
VARIANT |
JSON |
הסוג OBJECT ב-Snowflake לא תומך בערכים עם הקלדה מפורשת. הערכים הם מסוג VARIANT. |
ARRAY |
ARRAY<JSON> |
הסוג ARRAY ב-Snowflake יכול לתמוך רק בסוגים VARIANT, בעוד שהסוג ARRAY ב-BigQuery יכול לתמוך בכל סוגי הנתונים, למעט מערך עצמו. |
ב-BigQuery יש גם את סוגי הנתונים הבאים, שאין להם מקבילה ישירה ב-Snowflake:
תחביר של שאילתות ואופרטורים של שאילתות
בקטע הזה מוסבר על ההבדלים בתחביר של שאילתות בין Snowflake לבין BigQuery.
SELECT דוחות
רוב ההצהרות של Snowflake SELECT תואמות ל-BigQuery. בטבלה הבאה מפורטים כמה הבדלים קלים.
| פתית שלג | BigQuery | |
|---|---|---|
|
|
|
הערה: ב-Snowflake אפשר ליצור כינוי ולהפנות אליו באותה הצהרת SELECT. |
|
|
|
|
|
כברירת מחדל, כינויים ומזהים ב-Snowflake הם לא תלויי-רישיות. כדי לשמור על האותיות הרישיות והקטנות, צריך להוסיף מירכאות כפולות (") לשמות ולמזהים.
סעיף FROM
סעיף FROM בשאילתה מציין את הטבלאות, התצוגות, שאילתות המשנה או פונקציות הטבלה שאפשר להשתמש בהן בהצהרת SELECT. כל ההפניות האלה לטבלאות נתמכות ב-BigQuery.
בטבלה הבאה מפורטים כמה הבדלים קלים.
| פתית שלג | BigQuery | |
|---|---|---|
|
WITH table1 AS |
|
|
|
|
|
הערה: אין ב-BigQuery חלופה ישירה לשימוש ב-BEFORE במזהה של הצהרה ב-Snowflake. הערך של חותמת הזמן לא יכול להיות מלפני יותר מ-7 ימים מחותמת הזמן הנוכחית. |
|
|
BigQuery לא תומך במושג של קבצים זמניים. |
|
|
ב-BigQuery אין חלופה ישירה ל- |
|
אפשר להפנות לטבלאות BigQuery בסעיף FROM באמצעות:
[project_id].[dataset_id].[table_name][dataset_id].[table_name][table_name]
BigQuery תומך גם בהפניות נוספות לטבלאות:
- גרסאות היסטוריות של הגדרת הטבלה והשורות באמצעות
FOR SYSTEM_TIME AS OF - נתיבי שדות, או כל נתיב שמוביל לשדה בתוך סוג נתונים (כלומר,
STRUCT) - מערכים שטוחים
סעיף WHERE
הפסקה Snowflake WHERE והפסקה BigQuery WHERE זהות, למעט ההבדלים הבאים:
| פתית שלג | BigQuery | |
|---|---|---|
|
SELECT col1, col2הערה: BigQuery לא תומך בתחביר (+) עבור JOINs |
|
JOIN סוגים
גם Snowflake וגם BigQuery תומכים בסוגי הצירוף הבאים:
[INNER] JOINLEFT [OUTER] JOINRIGHT [OUTER] JOINFULL [OUTER] JOIN-
CROSS JOINוהשווה ערך ל-implicit "comma cross join"
גם Snowflake וגם BigQuery תומכים בפסוקיתONandUSING.
בטבלה הבאה מפורטים כמה הבדלים קלים.
| פתית שלג | BigQuery | |
|---|---|---|
|
הערה: ב-BigQuery, סעיפי JOIN דורשים תנאי JOIN, אלא אם מדובר ב-CROSS JOIN או שאחת מהטבלאות המצורפות היא שדה בתוך סוג נתונים או מערך. |
|
הערה: בניגוד לפלט של צירוף לא לרוחב, הפלט של צירוף לרוחב כולל רק את השורות שנוצרו מהתצוגה המובנית. אין צורך לצרף את השורות בצד ימין לשורות בצד שמאל, כי השורות בצד שמאל כבר נלקחו בחשבון כשעברו לתצוגה המובנית. |
LATERAL JOINs. |
|
סעיף WITH
סעיף WITH של BigQuery מכיל שאילתות משנה בעלות שם אחת או יותר, שמופעלות בכל פעם שהצהרת SELECT עוקבת מפנה אליהן.
התנהגות של סעיפים ב-Snowflake WITH זהה להתנהגות שלהם ב-BigQuery, למעט העובדה ש-BigQuery לא תומך ב-WITH RECURSIVE.
סעיף GROUP BY
Snowflake תומך בסעיפים GROUP BY
GROUP BY,
GROUP BY ROLLUP,
GROUP BY GROUPING SETS,
ו-GROUP BY CUBE,
בעוד ש-BigQuery תומך בסעיפים GROUP BY
GROUP BY,
GROUP BY ALL,
GROUP BY ROLLUP,
GROUP BY GROUPING SETS,
ו-GROUP BY CUBE.
Snowflake
HAVING
ו-BigQuery
HAVING הם
שמות נרדפים. חשוב לזכור שHAVING מתרחש אחרי GROUP BY וצבירה, ולפני ORDER BY.
| פתית שלג | BigQuery | |
|---|---|---|
|
|
|
|
|
|
הערה: ב-Snowflake אפשר להשתמש בעד 128 קבוצות קיבוץ באותו בלוק שאילתות |
|
|
הערה: ב-Snowflake אפשר להשתמש בעד 7 רכיבים (128 קבוצות קיבוץ) בכל קובייה |
|
|
סעיף ORDER BY
יש כמה הבדלים קלים בין פסקי Snowflake ORDER BY לבין פסקי BigQuery ORDER BY.
| פתית שלג | BigQuery | |
|---|---|---|
ב-Snowflake, כברירת מחדל, הערך NULL ממוקם אחרון (סדר עולה). |
ב-BigQuery, NULLS מדורגים ראשונים כברירת מחדל (סדר עולה). |
|
אפשר לציין אם ערכי NULL צריכים להיות מסודרים ראשונים או אחרונים באמצעות NULLS FIRST או NULLS LAST, בהתאמה. |
אין ב-BigQuery אפשרות מקבילה לציין אם הערכים של NULL צריכים להיות ראשונים או אחרונים. |
|
סעיף LIMIT/FETCH
הסעיף
LIMIT/FETCH
ב-Snowflake מגביל את המספר המקסימלי של השורות שמוחזרות על ידי הצהרה או שאילתת משנה.
LIMIT
(תחביר של Postgres) ו-FETCH
(תחביר של ANSI) מניבים את אותה תוצאה.
ב-Snowflake וב-BigQuery, הוספת פסקה של LIMIT לשאילתה לא משפיעה על כמות הנתונים שנקראים.
| פתית שלג | BigQuery | |
|---|---|---|
הערה: NULL, מחרוזת ריקה ('') וערכים של $$$$ מתקבלים ומתפרשים כ'ללא הגבלה'. השימוש העיקרי הוא במחברים ובדרייברים. |
הערה: BigQuery לא תומך ב- FETCH. LIMIT מחליף את FETCH.הערה: ב-BigQuery, צריך להשתמש ב- OFFSET יחד עם LIMIT count. כדי להשיג את הביצועים הטובים ביותר, חשוב להגדיר את הערך count INT64 למספר המינימלי של השורות המוזמנות שנדרשות. סידור של כל שורות התוצאות שלא לצורך יוביל לביצועים גרועים יותר של שאילתת הביצוע. |
|
סעיף QUALIFY
הסעיף
QUALIFY
ב-Snowflake מאפשר לסנן תוצאות של פונקציות חלון באופן דומה למה ש-HAVING עושה עם פונקציות מצטברות וסעיפי GROUP BY.
| פתית שלג | BigQuery | |
|---|---|---|
|
הפסוקית QUALIFY של Snowflake עם פונקציית ניתוח כמו ROW_NUMBER(), COUNT() ועם OVER PARTITION BY מבוטאת ב-BigQuery כפסוקית WHERE בשאילתת משנה שמכילה את ערך הניתוח.שימוש ב- ROW_NUMBER():SELECT col1, col2
שימוש ב- ARRAY_AGG(), שתומך במחיצות גדולות יותר:
|
|
פונקציות
בקטעים הבאים מפורטות פונקציות של Snowflake והפונקציות המקבילות שלהן ב-BigQuery.
פונקציות צבירה
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של Snowflake לחישוב מצטבר, לניתוח מצטבר ולחישוב מצטבר משוער, לבין הפונקציות המקבילות שלהן ב-BigQuery.
| פתית שלג | BigQuery |
|---|---|
הערה: DISTINCT לא משפיע על |
|
הערה: DISTINCT לא משפיע על |
הערה: BigQuery לא תומך ב- APPROX_COUNT_DISTINCT עם פונקציות חלון |
הערה: ב-Snowflake אין אפשרות RESPECT NULLS |
הערה: BigQuery לא תומך ב- APPROX_QUANTILES עם פונקציות חלון |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
הערה: אם לא מציינים פרמטר מספר, ברירת המחדל היא 1. הערך של המונה צריך להיות גדול משמעותית מהמספר. |
הערה: BigQuery לא תומך ב- APPROX_TOP_COUNT עם פונקציות חלון. |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
|
BigQuery לא תומך באפשרות לאחסן מצב ביניים כשמבצעים חיזוי של ערכים משוערים. |
|
אפשר להשתמש בפונקציה בהגדרת המשתמש (UDF) כדי להטמיע את MINHASH עם k פונקציות גיבוב נפרדות. גישה נוספת לצמצום השונות ב-MINHASH היא לשמורk של הערכים המינימליים של פונקציית גיבוב אחת. במקרה כזה, אפשר להעריך את מדד ג'קארד באופן הבא:
|
|
היא מילה נרדפת ל- APPROXIMATE_JACCARD_INDEX ואפשר להטמיע אותה באותה דרך. |
|
|
|
הערה: הפונקציה AVG של BigQuery לא מבצעת המרה אוטומטית של STRING. |
|
INTEGER הקרוב ביותר. |
|
הערה: BigQuery לא מבצע המרה מרומזת של עמודות מסוג תו או טקסט ל- INTEGER הקרוב ביותר. |
|
הערה: BigQuery לא מבצע המרה מרומזת של עמודות מסוג תו או טקסט ל- INTEGER הקרוב ביותר. |
הערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
|
הערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
|
הערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
לביטוי מספרי:
כדי להשתמש ב- OVER, אפשר להריץ את הפקודה הבאה (דוגמה בוליאנית):
|
|
|
|
|
|
|
|
|
|
ב-BigQuery אין חלופה ישירה ל-GROUPING של Snowflake. זמין דרך פונקציה בהגדרת המשתמש. |
|
ב-BigQuery אין חלופה ישירה ל-GROUPING_ID של Snowflake. זמין דרך פונקציה בהגדרת המשתמש. |
|
SELECT BIT_XOR( FARM_FINGERPRINT( TO_JSON_STRING(t))) [OVER]FROM t |
הערה: אי אפשר לציין את רמת הדיוק ב-Snowflake. |
הערה: BigQuery לא תומך ב- HLL_COUNT… עם פונקציות חלון. משתמש לא יכול לכלול כמה ביטויים בפונקציית HLL_COUNT... אחת. |
הערה: אי אפשר לציין את רמת הדיוק ב-Snowflake. |
HLL_COUNT.INIT(expression [, precision]) |
|
HLL_COUNT.MERGE_PARTIAL(סקיצה) |
|
|
|
ב-BigQuery אין חלופה ישירה ל-HLL_EXPORT של Snowflake. |
|
ב-BigQuery אין חלופה ישירה ל-HLL_IMPORT של Snowflake. |
|
ב-BigQuery אין חלופה ישירה ל-KURTOSIS של Snowflake. |
|
|
|
הערה: Snowflake לא תומכת באפשרות IGNORE|RESPECT NULLS וגם לא באפשרות LIMIT ישירות ב-ARRAY_AGG. |
|
|
|
|
אפשר להשתמש ב-UDF מותאם אישית כדי להטמיע את הפונקציה MINHASH עם k פונקציות גיבוב שונות. גישה נוספת לצמצום השונות ב-MINHASH היא לשמור על k של הערכים המינימליים של פונקציית גיבוב אחת: SELECT DISTINCT FARM_FINGERPRINT(TO_JSON_STRING(t)) AS MINHASH
|
|
<code<select FROM ( SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TA AS t ORDER BY h LIMIT k UNION SELECT DISTINCT FARM_FINGERPRINT( TO_JSON_STRING(t)) AS h FROM TB AS t ORDER BY h LIMIT k ) ORDER BY h LIMIT k |
|
|
|
אפשר להשתמש ב-TO_JSON_STRING כדי להמיר ערך למחרוזת בפורמט JSON |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ב-BigQuery אין חלופה ישירה ל- SKEW של Snowflake. |
|
|
|
|
|
|
|
|
הערה: Snowflake תומך בהמרת VARCHARs לערכים של נקודה צפה. |
|
הערה: Snowflake תומך בהמרת VARCHARs לערכים של נקודה צפה. |
|
הערה: Snowflake תומך בהמרת VARCHARs לערכים של נקודה צפה. |
|
הערה: Snowflake תומך בהמרת VARCHARs לערכים של נקודה צפה. |
|
ב-BigQuery יש גם את הפונקציות הבאות של צבירה, צבירה אנליטית וצבירה משוערת, שאין להן מקבילה ישירה ב-Snowflake:
פונקציות של ביטויים ברמת הביט
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של ביטויים בינאריים ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery.
אם סוג הנתונים של ביטוי הוא לא INTEGER, מערכת Snowflake מנסה לבצע המרה (cast) ל-INTEGER. עם זאת, BigQuery לא מנסה לבצע המרה ל-INTEGER.
| פתית שלג | BigQuery |
|---|---|
|
|
|
|
|
|
|
|
BITSHIFTRIGHT
|
|
הערה: Snowflake לא תומך ב- DISTINCT. |
|
פונקציות של ביטויים מותנים
בטבלה הבאה מוצגים מיפויים בין ביטויים נפוצים של תנאים ב-Snowflake לבין הביטויים המקבילים ב-BigQuery.
| פתית שלג | BigQuery |
|---|---|
|
|
הערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
|
הערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
|
BOOLORהערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
|
BOOLXORהערה: ב-Snowflake אפשר להתייחס לערכים מספריים, עשרוניים וצפים כאל TRUE אם הם לא אפס. |
ב-BigQuery אין תמיכה בחלופה ישירה ל-BOOLXOR. של Snowflake |
|
|
הערה: ב-Snowflake נדרשות לפחות שתי הבעות. ב-BigQuery נדרש רק אחד. |
|
|
DECODE של Snowflake. המשתמש צריך להשתמש ב-IS NULL במקום ב-= NULL כדי להתאים בין ביטויי בחירה של NULL לבין ביטויי חיפוש של NULL. |
|
ב-BigQuery אין תמיכה בחלופה ישירה ל-EQUAL_NULL. של Snowflake |
|
|
|
|
|
|
|
|
|
ב-BigQuery אין תמיכה בחלופה ישירה ל-IS [ NOT ] DISTINCT FROM. של Snowflake |
|
|
|
BigQuery לא תומך בסוגי הנתונים VARIANT. |
|
|
|
|
|
|
|
|
|
REGR... של Snowflake. |
|
הערה: BigQuery לא תומך בחלופה ישירה לפונקציות של Snowflake REGR... . |
|
|
פונקציות הקשר
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של הקשר ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery.
| פתית שלג | BigQuery |
|---|---|
|
הערה: אין השוואה ישירה. ב-Snowflake מוחזר מזהה החשבון, וב-BigQuery מוחזרת כתובת האימייל של המשתמש. |
|
מושג שלא נמצא בשימוש ב-BigQuery |
|
הפונקציה מחזירה טבלה של שמות הפרויקטים. ההשוואה לא ישירה. |
|
הערה: כדי לעמוד בתקני ANSI, Snowflake לא מחייבת להוסיף '()' אחרי הפקודה CURRENT_DATE. |
הערה: CURRENT_DATE ב-BigQuery אפשר לציין אזור זמן. |
הערה: הפונקציה INFORMATION_SCHEMA.SCHEMATA של BigQuery מחזירה הפניות מיקום כלליות יותר מאשר הפונקציה CURRENT_REGION() של Snowflake. ההשוואה לא ישירה. |
|
מושג שלא נמצא בשימוש ב-BigQuery |
|
הפונקציה מחזירה טבלה של כל מערכי הנתונים (שנקראים גם סכימות) שזמינים בפרויקט או באזור. ההשוואה לא ישירה. |
|
מושג שלא נמצא בשימוש ב-BigQuery |
|
מושג שלא נמצא בשימוש ב-BigQuery |
|
הערה: INFORMATION_SCHEMA.JOBS_BY_* מאפשר לחפש שאילתות לפי סוג העבודה, סוג ההתחלה/הסיום וכו'. |
|
הערה: ב-Snowflake אפשר להגדיר דיוק אופציונלי של שבריר שנייה. הערכים התקינים הם 0 עד 9 ננו-שניות. ערך ברירת המחדל הוא 9. כדי לעמוד בדרישות של ANSI, אפשר לקרוא לפונקציה הזו בלי '()'. |
|
הערה: ב-Snowflake אפשר להגדיר דיוק אופציונלי של שבריר שנייה. הערכים התקינים הם 0 עד 9 ננו-שניות. ערך ברירת המחדל הוא 9. כדי לעמוד בדרישות של ANSI, אפשר לקרוא לפונקציה הזו בלי '()'. מגדירים את TIMEZONE כפרמטר של סשן. |
הערה: CURRENT_DATETIME מחזירה את סוג הנתונים DATETIME (לא נתמך ב-Snowflake). CURRENT_TIMESTAMP מחזירה את סוג הנתונים TIMESTAMP. |
INFORMATION_SCHEMA.JOBS_BY_* ב-BigQuery מאפשר לחפש מזהי משימות לפי סוג העבודה, סוג ההתחלה/הסיום וכו'. |
|
הערה: כדי לעמוד בתקני ANSI, Snowflake לא מחייבת להוסיף '()' אחרי הפקודה CURRENT_USER. |
|
מושג שלא נמצא בשימוש ב-BigQuery |
|
|
|
|
הערה: INFORMATION_SCHEMA.JOBS_BY_* ב-BigQuery מאפשר חיפוש מזהי משימות לפי סוג העבודה, סוג ההתחלה/הסיום וכו'. |
הערה: INFORMATION_SCHEMA.JOBS_BY_* ב-BigQuery מאפשר חיפוש מזהי משימות לפי סוג העבודה, סוג ההתחלה/הסיום וכו'. |
|
|
הערה: כדי לעמוד בתקני ANSI, Snowflake לא מחייבת להוסיף '()' אחרי הפקודה LOCALTIME. |
|
הערה: CURRENT_DATETIME מחזירה את סוג הנתונים DATETIME (לא נתמך ב-Snowflake). CURRENT_TIMESTAMP מחזירה את סוג הנתונים TIMESTAMP. |
פונקציות המרה
בטבלה הבאה מוצגים מיפויים בין פונקציות המרה נפוצות ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery.
חשוב לזכור שפונקציות שנראות זהות ב-Snowflake וב-BigQuery עשויות להחזיר סוגי נתונים שונים.
| Snowflake | BigQuery |
|---|---|
|
|
|
|
הערה: Snowflake תומך בהמרה של HEX, BASE64 ו-UTF-8. Snowflake תומך גם ב-TO_BINARY באמצעות סוג הנתונים VARIANT. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: ההמרה (casting) שמוגדרת כברירת מחדל ב-BigQuery משתמשת בקידוד UTF-8.STRING ב-Snowflake אין אפשרות לתמוך בקידוד BASE32. |
הערה:
|
הערה:
|
הערה: מודלים של פורמטים של Snowflake זמינים כאן. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME או FORMAT_TIMESTAMP. |
הערה: Snowflake תומכת באפשרות להמיר ישירות סוגים של INTEGER לסוגים של DATE. כאן אפשר למצוא את מודלים הפורמט של Snowflake. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT, FORMAT_DATETIME או FORMAT_TIMESTAMP. |
הערה: אפשר למצוא את מודלים הפורמט של Snowflake לסוגי הנתונים DECIMAL, NUMBER ו-NUMERIC כאן. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT. |
הערה: מודלים של פורמטים של Snowflake עבור DOUBLE סוגי נתונים זמינים כאן. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT. |
|
ב-BigQuery אין חלופה לסוג הנתונים VARIANT של Snowflake. |
|
ב-BigQuery אין חלופה לסוג הנתונים VARIANT של Snowflake. |
הערה: מודלים של פורמטים של Snowflake עבור STRING סוגי נתונים זמינים כאן. ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: ב-BigQuery אין חלופה לסוג הנתונים VARIANT של Snowflake. אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT, FORMAT_DATETIME, FORMAT_TIMESTAMP או FORMAT_TIME. |
הערה: ב-BigQuery אין חלופה לסוג הנתונים VARIANT. |
הערה: אפשר לעצב את ביטוי הקלט של BigQuery באמצעות FORMAT, FORMAT_DATE, FORMAT_DATETIME, FORMAT_TIME. אפשר לכלול או לא לכלול את אזור הזמן באמצעות הפרמטרים FORMAT_TIMESTAMP. |
|
ב-BigQuery אין חלופה לסוג הנתונים VARIANT של Snowflake. |
|
ב-BigQuery אין חלופה לסוג הנתונים VARIANT של Snowflake. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ב-BigQuery יש גם את פונקציות ההמרה הבאות, שאין להן מקבילה ישירה ב-Snowflake:
CODE_POINTS_TO_BYTESCODE_POINTS_TO_STRINGFORMATFROM_BASE32FROM_BASE64FROM_HEXSAFE_CONVERT_BYTES_TO_STRINGTO_BASE32TO_CODE_POINTS
פונקציות ליצירת נתונים
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות ליצירת נתונים ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery.
| Snowflake | BigQuery |
|---|---|
|
BigQuery לא תומך בהשוואה ישירה ל-NORMAL. של Snowflake |
|
הערה: BigQuery לא תומך באתחול |
|
BigQuery לא תומך בהשוואה ישירה ל-RANDSTR. של Snowflake |
SEQ1 / SEQ2 / SEQ4 / SEQ8 |
BigQuery לא תומך בהשוואה ישירה ל-SEQ_. של Snowflake |
|
הערה:כדי ליצור פונקציה שוות ערך ל- UNIFORM של Snowflake, צריך להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) שמתמידות. דוגמה כאן. |
UUID_STRING([uuid, name])הערה: Snowflake מחזירה 128 ביטים אקראיים. Snowflake תומך ב-UUID בגרסה 4 (אקראית) ובגרסה 5 (עם שם). |
הערה: BigQuery מחזיר 122 ביטים אקראיים. BigQuery תומך רק ב-UUID בגרסה 4. |
|
BigQuery לא תומך בהשוואה ישירה ל-ZIPF. של Snowflake |
פונקציות של תאריך ושעה
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של תאריך ושעה ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery. פונקציות של נתונים ושעות ב-BigQuery כוללות פונקציות של תאריכים, פונקציות של תאריכים ושעות, פונקציות של שעות ופונקציות של חותמות זמן.
| Snowflake | BigQuery |
|---|---|
|
|
|
הערה: source_timezone הוא תמיד UTC ב-BigQuery |
הערה: Snowflake תומך בתאריכים שליליים ובגלישה (overflow). לדוגמה, הפונקציה DATE_FROM_PARTS(2000, 1 + 24, 1) מחזירה את התאריך 1 בינואר 2002. האפשרות הזו לא אפשרית ב-BigQuery. |
|
הערה: Snowflake תומך בסוגי החלקים הבאים: יום בשבוע לפי ISO, ננו-שנייה, ושנייה/אלפית השנייה/מיקרו-שנייה/ננו-שנייה מאז תקופת ה-Epoch. ב-BigQuery זה לא קורה. רשימה מלאה של סוגי החלקים ב-Snowflake . |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>), microsecond ו-millisecond. ב-Snowflake זה לא המצב. כאן וכאן אפשר לראות את הרשימה המלאה של סוגי החלקים ב-BigQuery. |
הערה: Snowflake תומך בסוג החלק של הננו-שנייה. ב-BigQuery זה לא קורה. רשימה מלאה של סוגי החלקים ב-Snowflake . |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>), ISO week ו-ISO year. ב-Snowflake זה לא המצב. |
|
|
|
הערה: Snowflake תומכת בחישוב ההפרש בין שני סוגים של תאריך, שעה וחותמת זמן בפונקציה הזו. |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>) ו-ISO year. |
|
|
הערה: Snowflake תומך בסוגי החלקים הבאים: יום בשבוע לפי ISO, ננו-שנייה, ושנייה/אלפית השנייה/מיקרו-שנייה/ננו-שנייה מאז תקופת ה-Epoch. ב-BigQuery זה לא קורה. רשימה מלאה של סוגי החלקים ב-Snowflake . |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>), microsecond ו-millisecond. ב-Snowflake זה לא המצב. כאן וכאן אפשר לראות את הרשימה המלאה של סוגי החלקים ב-BigQuery. |
|
|
|
|
|
|
|
הערה: יכול להיות שיהיה צורך לשנות את הפורמט של dowString. לדוגמה, הערך 'su' ב-Snowflake יהפוך לערך 'SUNDAY' ב-BigQuery. |
|
הערה: יכול להיות שיהיה צורך לשנות את הפורמט של dowString. לדוגמה, הערך 'su' ב-Snowflake יהפוך לערך 'SUNDAY' ב-BigQuery. |
הערה: Snowflake תומך בזמני גלישה. לדוגמה, הפקודה TIME_FROM_PARTS(0, 100, 0) מחזירה 01:40:00... האפשרות הזו לא אפשרית ב-BigQuery. BigQuery לא תומך בננו-שניות. |
|
|
הערה: אין ב-BigQuery תמיכה בהשוואה ישירה ומדויקת ל- TIME_SLICE של Snowflake. משתמשים ב-DATETINE_TRUNC, ב-TIME_TRUNC או ב-TIMESTAMP_TRUNC לסוג הנתונים המתאים. |
|
|
|
הערה: Snowflake תומכת בחישוב ההפרש בין שני סוגים של תאריך, שעה וחותמת זמן בפונקציה הזו. |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>) ו-ISO year. |
|
הערה: ב-BigQuery צריך להזין חותמות זמן כסוגים STRING. דוגמה: "2008-12-25 15:30:00" |
|
|
|
הערה: Snowflake תומכת בחישוב ההפרש בין שני סוגים של תאריך, שעה וחותמת זמן בפונקציה הזו. |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>) ו-ISO year. |
הערה: Snowflake תומך בסוג החלק של הננו-שנייה. ב-BigQuery זה לא קורה. רשימה מלאה של סוגי החלקים ב-Snowflake . |
הערה: BigQuery תומך בסוגי החלקים week(<weekday>), ISO week ו-ISO year. ב-Snowflake זה לא המצב. |
|
|
ב-BigQuery יש גם את הפונקציות הבאות של תאריך ושעה, שאין להן מקבילה ישירה ב-Snowflake:
סכמת מידע ופונקציות טבלה
מבחינה רעיונית, BigQuery לא תומך בהרבה פונקציות של סכימת מידע וטבלה ב-Snowflake. Snowflake מציעה את פונקציות הטבלה וסכימת המידע הבאות, שאין להן אנלוגיה ישירה ב-BigQuery:
AUTOMATIC_CLUSTERING_HISTORYCOPY_HISTORYDATA_TRANSFER_HISTORYDATABASE_REFRESH_HISTORYDATABASE_REFRESH_PROGRESS, DATABASE_REFRESH_PROGRESS_BY_JOBDATABASE_STORAGE_USAGE_HISTORYEXTERNAL_TABLE_FILESEXTERNAL_TABLE_FILE_REGISTRATION_HISTORYLOGIN_HISTORY,LOGIN_HISTORY_BY_USERMATERIALIZED_VIEW_REFRESH_HISTORYPIPE_USAGE_HISTORYREPLICATION_USAGE_HISTORYSTAGE_STORAGE_USAGE_HISTORYTASK_DEPENDENTSVALIDATE_PIPE_LOADWAREHOUSE_LOAD_HISTORYWAREHOUSE_METERING_HISTORY
בהמשך מפורטת רשימה של פונקציות טבלה וסכימות מידע משויכות של BigQuery ו-Snowflake.
| Snowflake | BigQuery |
|---|---|
QUERY_HISTORYQUERY_HISTORY_BY_* |
INFORMATION_SCHEMA.JOBS_BY_*הערה: זו לא חלופה ישירה. |
TASK_HISTORY |
INFORMATION_SCHEMA.JOBS_BY_*הערה: זו לא חלופה ישירה. |
BigQuery מציע את סכימת המידע ופונקציות הטבלה הבאות, שאין להן מקבילה ישירה ב-Snowflake:
INFORMATION_SCHEMA.SCHEMATAINFORMATION_SCHEMA.ROUTINESINFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.VIEWS
פונקציות מספריות
בטבלה הבאה מוצגים מיפויים בין פונקציות מספריות נפוצות ב-Snowflake לבין הפונקציות המקבילות ב-BigQuery.
| Snowflake | BigQuery |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
הערה: הפונקציה CEIL של BigQuery לא תומכת בציון דיוק או קנה מידה. ROUND לא מאפשרת לציין עיגול כלפי מעלה. |
|
|
|
|
|
|
|
|
|
|
|
אין ב-BigQuery חלופה ישירה ל-FACTORIAL של Snowflake. שימוש בפונקציה בהגדרת המשתמש. |
|
הערה: הפונקציה FLOOR של BigQuery לא תומכת בציון דיוק או קנה מידה. ROUND לא מאפשרת לציין עיגול כלפי מעלה. הפונקציה TRUNC פועלת באופן זהה למספרים חיוביים, אבל לא למספרים שליליים, כי היא מחשבת ערך מוחלט. |
|
הערה: ההתאמה לא מדויקת, אבל קרובה מספיק. |
|
|
|
הערה:ברירת המחדל של הבסיס ל- LOG היא 10. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
הערה: הערך שמוחזר ב-BigQuery צריך להיות קטן מהביטוי. אין תמיכה בערך ששווה לביטוי. |
ב-BigQuery יש גם את הפונקציות המתמטיות הבאות, שאין להן מקבילה ישירה ב-Snowflake:
IS_INFIS_NANIEEE_DIVIDEDIVSAFE_DIVIDESAFE_MULTIPLYSAFE_NEGATESAFE_ADDSAFE_SUBTRACTRANGE_BUCKET
פונקציות של נתונים חצי מובְנים
| Snowflake | BigQuery |
|---|---|
ARRAY_APPEND |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_CAT |
ARRAY_CONCAT |
ARRAY_COMPACT |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_CONSTRUCT |
[ ] |
ARRAY_CONSTRUCT_COMPACT |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_CONTAINS |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_INSERT |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_INTERSECTION |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_POSITION |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_PREPEND |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_SIZE |
ARRAY_LENGTH |
ARRAY_SLICE |
פונקציה בהגדרת המשתמש מותאמת אישית |
ARRAY_TO_STRING |
ARRAY_TO_STRING |
ARRAYS_OVERLAP |
פונקציה בהגדרת המשתמש מותאמת אישית |
AS_<object_type> |
CAST |
AS_ARRAY |
CAST |
AS_BINARY |
CAST |
AS_BOOLEAN |
CAST |
AS_CHAR , AS_VARCHAR |
CAST |
AS_DATE |
CAST |
AS_DECIMAL , AS_NUMBER |
CAST |
AS_DOUBLE , AS_REAL |
CAST |
AS_INTEGER |
CAST |
AS_OBJECT |
CAST |
AS_TIME |
CAST |
AS_TIMESTAMP_* |
CAST |
CHECK_JSON |
פונקציה בהגדרת המשתמש מותאמת אישית |
CHECK_XML |
פונקציה בהגדרת המשתמש מותאמת אישית |
FLATTEN |
UNNEST |
GET |
פונקציה בהגדרת המשתמש מותאמת אישית |
GET_IGNORE_CASE |
פונקציה בהגדרת המשתמש מותאמת אישית |
|
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_<object_type> |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_ARRAY |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_BOOLEAN |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_CHAR , IS_VARCHAR |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_DATE , IS_DATE_VALUE |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_DECIMAL |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_DOUBLE , IS_REAL |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_INTEGER |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_OBJECT |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_TIME |
פונקציה בהגדרת המשתמש מותאמת אישית |
IS_TIMESTAMP_* |
פונקציה בהגדרת המשתמש מותאמת אישית |
OBJECT_CONSTRUCT |
פונקציה בהגדרת המשתמש מותאמת אישית |
OBJECT_DELETE |
פונקציה בהגדרת המשתמש מותאמת אישית |
OBJECT_INSERT |
פונקציה בהגדרת המשתמש מותאמת אישית |
PARSE_JSON |
JSON_EXTRACT |
PARSE_XML |
פונקציה בהגדרת המשתמש מותאמת אישית |
STRIP_NULL_VALUE |
פונקציה בהגדרת המשתמש מותאמת אישית |
STRTOK_TO_ARRAY |
SPLIT |
TRY_PARSE_JSON |
פונקציה בהגדרת המשתמש מותאמת אישית |
TYPEOF |
פונקציה בהגדרת המשתמש מותאמת אישית |
XMLGET |
פונקציה בהגדרת המשתמש מותאמת אישית |
פונקציות של מחרוזות ופונקציות בינאריות
| Snowflake | BigQuery |
|---|---|
|
|
ASCII |
|
BASE64_DECODE_BINARY |
|
BASE64_DECODE_STRING |
|
BASE64_ENCODE |
|
BIT_LENGTH |
CHARACTER_LENGTH |
|
|
CHR,CHAR |
|
COLLATE |
פונקציה בהגדרת המשתמש מותאמת אישית |
COLLATION |
פונקציה בהגדרת המשתמש מותאמת אישית |
COMPRESS |
פונקציה בהגדרת המשתמש מותאמת אישית |
|
CONCAT(...) של BigQuery תומכת בשרשור של כל מספר מחרוזות. |
CONTAINS |
פונקציה בהגדרת המשתמש מותאמת אישית |
DECOMPRESS_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
DECOMPRESS_STRING |
פונקציה בהגדרת המשתמש מותאמת אישית |
EDITDISTANCE |
EDIT_DISTANCE |
ENDSWITH |
פונקציה בהגדרת המשתמש מותאמת אישית |
HEX_DECODE_BINARY |
|
HEX_DECODE_STRING |
|
HEX_ENCODE |
|
ILIKE |
פונקציה בהגדרת המשתמש מותאמת אישית |
ILIKE ANY |
פונקציה בהגדרת המשתמש מותאמת אישית |
INITCAP |
INITCAP |
INSERT |
פונקציה בהגדרת המשתמש מותאמת אישית |
LEFT |
פונקציה בהגדרת המשתמש |
LENGTH |
|
LIKE |
LIKE |
LIKE ALL |
פונקציה בהגדרת המשתמש מותאמת אישית |
LIKE ANY |
פונקציה בהגדרת המשתמש מותאמת אישית |
LOWER |
|
LPAD |
|
LTRIM |
|
|
|
MD5_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
OCTET_LENGTH |
פונקציה בהגדרת המשתמש מותאמת אישית |
PARSE_IP |
פונקציה בהגדרת המשתמש מותאמת אישית |
PARSE_URL |
פונקציה בהגדרת המשתמש מותאמת אישית |
POSITION |
|
REPEAT |
|
REPLACE |
|
REVERSE
|
|
RIGHT |
פונקציה בהגדרת המשתמש |
RPAD |
RPAD |
RTRIM |
|
RTRIMMED_LENGTH |
פונקציה בהגדרת המשתמש מותאמת אישית |
SHA1,SHA1_HEX |
|
SHA1_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
SHA2,SHA2_HEX |
פונקציה בהגדרת המשתמש מותאמת אישית |
SHA2_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
SOUNDEX |
פונקציה בהגדרת המשתמש מותאמת אישית |
SPACE |
פונקציה בהגדרת המשתמש מותאמת אישית |
SPLIT |
SPLIT |
SPLIT_PART |
פונקציה בהגדרת המשתמש מותאמת אישית |
SPLIT_TO_TABLE |
פונקציה בהגדרת המשתמש מותאמת אישית |
STARTSWITH |
פונקציה בהגדרת המשתמש מותאמת אישית |
STRTOK |
הערה: כל מחרוזת הארגומנט של התו המפריד משמשת כתו מפריד יחיד. ברירת המחדל של תו המפריד היא פסיק. |
STRTOK_SPLIT_TO_TABLE |
פונקציה בהגדרת המשתמש מותאמת אישית |
SUBSTR,SUBSTRING |
SUBSTR |
TRANSLATE |
פונקציה בהגדרת המשתמש מותאמת אישית |
TRIM |
TRIM |
TRY_BASE64_DECODE_BINARY |
פונקציה בהגדרת המשתמש מותאמת אישית |
TRY_BASE64_DECODE_STRING |
|
TRY_HEX_DECODE_BINARY |
|
TRY_HEX_DECODE_STRING |
|
UNICODE |
פונקציה בהגדרת המשתמש מותאמת אישית |
|
UPPER |
פונקציות מחרוזת (ביטויים רגולריים)
| Snowflake | BigQuery |
|---|---|
REGEXP |
|
REGEXP_COUNT |
אם מציינים את position:
הערה: BigQuery מספק תמיכה בביטויים רגולריים באמצעות ספריית re2. אפשר לעיין במסמכי התיעוד של הספרייה כדי לראות את התחביר של הביטויים הרגולריים. |
REGEXP_INSTR |
אם מצוין position:
אם מציינים את occurrence:
הערה: BigQuery מספק תמיכה בביטויים רגולריים באמצעות ספריית re2. אפשר לעיין במסמכי התיעוד של הספרייה כדי לראות את התחביר של הביטויים הרגולריים. |
|
|
REGEXP_REPLACE |
אם מציינים את replace_string:
אם מציינים את position:
הערה: BigQuery מספק תמיכה בביטויים רגולריים באמצעות ספריית re2. אפשר לעיין במסמכי התיעוד של הספרייה כדי לראות את התחביר של הביטויים הרגולריים. |
REGEXP_SUBSTR |
אם מציינים את position:
אם מציינים את occurrence:
הערה: BigQuery מספק תמיכה בביטויים רגולריים באמצעות ספריית re2. אפשר לעיין במסמכי התיעוד של הספרייה כדי לראות את התחביר של הביטויים הרגולריים. |
RLIKE |
|
פונקציות מערכת
| Snowflake | BigQuery |
|---|---|
SYSTEM$ABORT_SESSION |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$ABORT_TRANSACTION |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CANCEL_ALL_QUERIES |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CANCEL_QUERY |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CLUSTERING_DEPTH |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CLUSTERING_INFORMATION |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CLUSTERING_RATIO — Deprecated |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$CURRENT_USER_TASK_NAME |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$DATABASE_REFRESH_HISTORY |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$DATABASE_REFRESH_PROGRESS , SYSTEM$DATABASE_REFRESH_PROGRESS_BY_JOB |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$GET_AWS_SNS_IAM_POLICY |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$GET_PREDECESSOR_RETURN_VALUE |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$LAST_CHANGE_COMMIT_TIME |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$PIPE_FORCE_RESUME |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$PIPE_STATUS |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$SET_RETURN_VALUE |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$SHOW_OAUTH_CLIENT_SECRETS |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$STREAM_GET_TABLE_TIMESTAMP |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$STREAM_HAS_DATA |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$TASK_DEPENDENTS_ENABLE |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$TYPEOF |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$USER_TASK_CANCEL_ONGOING_EXECUTIONS |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$WAIT |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$WHITELIST |
פונקציה בהגדרת המשתמש מותאמת אישית |
SYSTEM$WHITELIST_PRIVATELINK |
פונקציה בהגדרת המשתמש מותאמת אישית |
פונקציות טבלה
| Snowflake | BigQuery | |
|---|---|---|
GENERATOR |
פונקציה בהגדרת המשתמש מותאמת אישית | |
GET_OBJECT_REFERENCES |
פונקציה בהגדרת המשתמש מותאמת אישית | |
RESULT_SCAN |
פונקציה בהגדרת המשתמש מותאמת אישית | |
VALIDATE |
פונקציה בהגדרת המשתמש מותאמת אישית | |
פונקציות בסיסיות ופונקציות גיבוב (Hash)
| Snowflake | BigQuery | |
|---|---|---|
GET_DDL |
בקשת תכונה | |
HASH |
HASH היא פונקציה קניינית שספציפית ל-Snowflake. אי אפשר לתרגם בלי לדעת את הלוגיקה הבסיסית שבה נעשה שימוש ב-Snowflake. | |
פונקציות חלון
| Snowflake | BigQuery | |
|---|---|---|
CONDITIONAL_CHANGE_EVENT |
פונקציה בהגדרת המשתמש מותאמת אישית | |
CONDITIONAL_TRUE_EVENT |
פונקציה בהגדרת המשתמש מותאמת אישית | |
CUME_DIST |
CUME_DIST |
|
DENSE_RANK |
DENSE_RANK |
|
FIRST_VALUE |
FIRST_VALUE |
|
LAG |
LAG |
|
LAST_VALUE |
LAST_VALUE |
|
LEAD |
LEAD |
|
NTH_VALUE |
NTH_VALUE |
|
NTILE |
NTILE |
|
PERCENT_RANK |
PERCENT_RANK |
|
RANK |
RANK |
|
RATIO_TO_REPORT |
פונקציה בהגדרת המשתמש מותאמת אישית | |
ROW_NUMBER |
ROW_NUMBER |
|
WIDTH_BUCKET |
פונקציה בהגדרת המשתמש מותאמת אישית | |
BigQuery תומך גם ב-SAFE_CAST(expression
AS typename), שמחזירה NULL אם BigQuery לא מצליחה לבצע המרה (לדוגמה, SAFE_CAST("apple"
AS INT64) מחזירה NULL).
אופרטורים
בקטעים הבאים מפורטים אופרטורים של Snowflake והאופרטורים המקבילים שלהם ב-BigQuery.
אופרטורים אריתמטיים
בטבלה הבאה מוצגים מיפויים בין אופרטורים אריתמטיים ב-Snowflake לבין המקבילים שלהם ב-BigQuery.
| Snowflake | BigQuery |
|---|---|
|
|
|
|
|
הערה: BigQuery תומך במינוס אונרי סטנדרטי, אבל לא ממיר מספרים שלמים בפורמט מחרוזת לסוג INT64, NUMERIC או FLOAT64. |
|
|
|
|
|
|
|
|
|
|
כדי לראות את הפרטים של קנה המידה והדיוק של Snowflake כשמבצעים פעולות אריתמטיות, אפשר לעיין בתיעוד של Snowflake.
אופרטורים להשוואה
אופרטורים להשוואה ב-Snowflake זהים לאופרטורים להשוואה ב-BigQuery.
אופרטורים לוגיים/בוליאניים
אופרטורים לוגיים/בוליאניים ב-Snowflake זהים לאופרטורים לוגיים/בוליאניים ב-BigQuery.
הגדרת אופרטורים
בטבלה הבאה מוצגים מיפויים בין אופרטורים של קבוצות ב-Snowflake לבין המקבילים שלהם ב-BigQuery.
| Snowflake | BigQuery |
|---|---|
|
INTERSECT DISTINCT
|
הערה: MINUS ו- EXCEPT הן מילים נרדפות. |
|
|
|
אופרטורים של שאילתות משנה
בטבלה הבאה מוצגים מיפויים בין אופרטורים של שאילתות משנה ב-Snowflake לבין האופרטורים המקבילים ב-BigQuery.
| Snowflake | BigQuery |
|---|---|
|
BigQuery לא תומך בחלופה ישירה ל-ALL/ANY של Snowflake. |
|
|
|
|
|
הערה: ב-BigQuery צריך להשתמש בסוגריים כדי להפריד בין פעולות שונות על קבוצות. אם אותו אופרטור של קבוצה חוזר על עצמו, אין צורך בסוגריים. |
תחביר DML
בקטע הזה נסביר על ההבדלים בתחביר של שפת ניהול הנתונים בין Snowflake לבין BigQuery.
INSERT דוחות
Snowflake מציעה מילת מפתח DEFAULT שניתנת להגדרה לעמודות. ב-BigQuery, הערך DEFAULT בעמודות שאפשר להשאיר ריקות הוא NULL, והערך DEFAULT לא נתמך בעמודות חובה. רוב ההצהרות של Snowflake INSERT תואמות ל-BigQuery. בטבלה הבאה מוצגים יוצאים מן הכלל.
| Snowflake | BigQuery |
|---|---|
הערה: ב-BigQuery אין תמיכה בהוספה של אובייקטים מסוג JSON באמצעות INSERT statement. |
VALUES (DEFAULT [, ...])הערה: ב-BigQuery אין תמיכה בחלופה ישירה ל-OVERWRITE של Snowflake. במקום זאת, אתם צריכים להשתמש ב-DELETE. |
|
|
...הערה: <intoClause> מייצג את INSERT statement הרגיל, שמפורט למעלה. |
BigQuery לא תומך ב-INSERTsmulti-table עם תנאים או ללא תנאים. |
BigQuery תומך גם בהוספת ערכים באמצעות שאילתת משנה (כאשר אחד מהערכים מחושב באמצעות שאילתת משנה), אבל Snowflake לא תומך בכך. לדוגמה:
INSERT INTO table (column1, column2)
VALUES ('value_1', (
SELECT column2
FROM table2
))
COPY דוחות
Snowflake תומך בהעתקת נתונים מקבצים זמניים לטבלה קיימת ומטבלה למיקום זמני פנימי עם שם, למיקום זמני חיצוני עם שם ולמיקום חיצוני (Amazon S3, Google Cloud Storage או Microsoft Azure).
ב-BigQuery לא משתמשים בפקודה COPY של SQL כדי לטעון נתונים, אבל אפשר להשתמש בכמה כלים ואפשרויות שאינם SQL כדי לטעון נתונים לטבלאות של BigQuery. אפשר גם להשתמש ב-sink-ים של פייפליין שזמינים ב-Apache Spark או ב-Apache Beam כדי לכתוב נתונים ב-BigQuery.
UPDATE דוחות
רוב ההצהרות של Snowflake UPDATE תואמות ל-BigQuery.
בטבלה הבאה מוצגים חריגים.
| Snowflake | BigQuery | |
|---|---|---|
|
הערה: כל הצהרות UPDATE ב-BigQuery דורשות מילת מפתח WHERE, ואחריה תנאי. |
|
DELETE ודוחות TRUNCATE TABLE
ההצהרות DELETE ו-TRUNCATE TABLE הן שתי דרכים להסרת שורות מטבלה בלי להשפיע על סכימת הטבלה או על האינדקסים.
ב-Snowflake, גם DELETE וגם TRUNCATE TABLE שומרים נתונים שנמחקו באמצעות Time Travel של Snowflake למטרות שחזור למשך תקופת שמירת הנתונים.
עם זאת, הפקודה DELETE לא מוחקת את היסטוריית הטעינה של הקובץ החיצוני ואת מטא-הנתונים של הטעינה.
ב-BigQuery, להצהרת DELETE חייב להיות סעיף WHERE. מידע נוסף על DELETE ב-BigQuery זמין בדוגמאות לשימוש ב-DELETE ב-BigQuery במסמכי ה-DML.
| Snowflake | BigQuery |
|---|---|
|
הערה: בהצהרות של BigQuery DELETE נדרש WHERE clause. |
MERGE דוחות
ההצהרה MERGE יכולה לשלב פעולות של INSERT, UPDATE ו-DELETE בהצהרה אחת של 'עדכון או הוספה' ולבצע את הפעולות באופן אוטומטי. MERGEהפעולה צריכה להתאים לשורת מקור אחת לכל היותר עבור כל שורת יעד.
ההגבלה על טבלאות BigQuery היא 1,000 הצהרות DML ביום, ולכן מומלץ לאחד הצהרות INSERT, UPDATE ו-DELETE להצהרת MERGE אחת, כמו שמוצג בטבלה הבאה:
| Snowflake | BigQuery |
|---|---|
הערה: ב-Snowflake יש תמיכה בפרמטר של סשן ERROR_ON_NONDETERMINISTIC_MERGE לטיפול בתוצאות לא דטרמיניסטיות. |
הערה: אם מעדכנים את כל העמודות, צריך לכלול את כולן. |
GET ודוחות LIST
ההצהרה GET מורידה קבצי נתונים מאחד משלבי Snowflake הבאים לספרייה או לתיקייה מקומיות במחשב לקוח:
- שלב פנימי עם שם
- שלב פנימי של טבלה ספציפית
- שלב פנימי למשתמש הנוכחי
ההצהרה LIST (LS) מחזירה רשימה של קבצים שהועלו (כלומר, הועלו ממערכת קבצים מקומית או נפרקו מטבלה) באחד משלבי Snowflake הבאים:
- שלב פנימי עם שם
- שלב חיצוני עם שם
- שלב לטבלה ספציפית
- השלב של המשתמש הנוכחי
BigQuery לא תומך במושג של העברה זמנית של נתונים, ואין לו מקבילות ל-GET ול-LIST.
PUT ודוחות REMOVE
ההעלאות של הצהרות PUT (כלומר, שלבים) הן קבצי נתונים מספרייה או מתיקייה מקומיות במחשב לקוח לאחד מהשלבים הבאים ב-Snowflake:
- שלב פנימי עם שם
- שלב פנימי של טבלה ספציפית
- שלב פנימי למשתמש הנוכחי
ההצהרה REMOVE
(RM) מסירה קבצים שהועברו לסביבת Staging באחד מהשלבים הפנימיים הבאים של Snowflake:
- שלב פנימי עם שם
- שלב לטבלה ספציפית
- השלב של המשתמש הנוכחי
BigQuery לא תומך במושג של העברה זמנית של נתונים, ואין לו מקבילות ל-PUT ול-REMOVE.
תחביר DDL
בקטע הזה מוסבר על ההבדלים בתחביר של שפת הגדרת הנתונים בין Snowflake לבין BigQuery.
DDL של מסד נתונים, סכימה ושיתוף
רוב המינוחים ב-Snowflake זהים לאלה שב-BigQuery, חוץ מהמינוח Snowflake Database שדומה ל-BigQuery Dataset. מיפוי מפורט של המינוח מ-Snowflake ל-BigQuery
CREATE DATABASE דוחות
ב-Snowflake אפשר ליצור מסד נתונים ולנהל אותו באמצעות פקודות לניהול מסד נתונים, וב-BigQuery יש כמה אפשרויות ליצירת מערכי נתונים, כמו שימוש ב-Console, ב-CLI, בספריות לקוח וכו'. בקטע הזה נשתמש בפקודות BigQuery CLI שמתאימות לפקודות Snowflake כדי להסביר את ההבדלים.
| Snowflake | BigQuery |
|---|---|
הערה: Snowflake מספקת את הדרישות האלה למתן שמות למסדי נתונים. השם יכול לכלול עד 255 תווים. |
הערה: ב-BigQuery יש דרישות דומות לשמות של מערכי נתונים כמו ב-Snowflake, אבל שם אפשר להשתמש בשם באורך של עד 1,024 תווים. |
|
אין תמיכה בהחלפת מערך הנתונים ב-BigQuery. |
|
אין תמיכה ביצירת מערך נתונים זמני ב-BigQuery. |
|
מושג שלא נתמך ב-BigQuery |
|
אין תמיכה בשיבוט של מערכי נתונים ב-BigQuery. |
|
אין תמיכה ב-BigQuery בשינוי של מערך נתונים לנקודת זמן קודמת. עם זאת, יש תמיכה בשינוי התקופה שמוצגת בטבלה ובתוצאות השאילתה. |
|
אין תמיכה בהשוואה ב-DDL ב-BigQuery. |
|
|
|
אין תמיכה ביצירת מערכי נתונים משותפים ב-BigQuery. עם זאת, אחרי שיוצרים את מערך הנתונים, המשתמשים יכולים לשתף אותו דרך המסוף או ממשק המשתמש. |
הערה: ב-Snowflake יש אפשרות לתחזוקה אוטומטית ברקע של תצוגות חומריות במסד הנתונים המשני, אבל האפשרות הזו לא נתמכת ב-BigQuery. |
|
ב-BigQuery יש גם את אפשרויות הפקודה הבאות bq mk, שאין להן מקבילה ישירה ב-Snowflake:
--location <dataset_location>--default_table_expiration <time_in_seconds>--default_partition_expiration <time_in_seconds>
ALTER DATABASE דוחות
בקטע הזה נשתמש בפקודות BigQuery CLI שמתאימות לפקודות Snowflake כדי לטפל בהבדלים בהצהרות ALTER.
| Snowflake | BigQuery |
|---|---|
|
אין תמיכה בשינוי השם של מערכי נתונים ב-BigQuery, אבל יש תמיכה בהעתקה של מערכי נתונים. |
|
אין תמיכה בהחלפת מערכי נתונים ב-BigQuery. |
|
אין תמיכה בניהול של שמירת נתונים ואיסוף נתונים ברמת מערך הנתונים ב-BigQuery. |
|
|
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
|
המושג לא נתמך ב-BigQuery. |
DROP DATABASE דוחות
בקטע הזה נשתמש בפקודת BigQuery CLI שמתאימה לפקודת Snowflake כדי לטפל בהבדל בהצהרת DROP.
| Snowflake | BigQuery |
|---|---|
הערה: ב-Snowflake, מחיקת מסד נתונים לא מסירה אותו מהמערכת באופן סופי. גרסה של מסד הנתונים שהוסר נשמרת למספר הימים שצוין בפרמטר DATA_RETENTION_TIME_IN_DAYS של מסד הנתונים. |
-r הסרת כל האובייקטים במערך הנתונים
-d מציין מערך נתוניםהערה: ב-BigQuery, מחיקה של מערך נתונים היא פעולה קבועה. בנוסף, לא ניתן להשתמש בהעברה מדורגת ברמת מערך הנתונים, כי כל הנתונים והאובייקטים במערך הנתונים נמחקים. |
Snowflake תומך גם בפקודה UNDROP DATASET, שמשחזרת את הגרסה האחרונה של מערכי נתונים שנמחקו. האפשרות הזו לא נתמכת ב-BigQuery ברמת מערך הנתונים.
USE DATABASE דוחות
ב-Snowflake יש אפשרות להגדיר את מסד הנתונים לסשן של משתמש באמצעות הפקודה USE DATABASE. כך אין צורך לציין שמות אובייקטים שמוגדרים במלואם בפקודות SQL. ב-BigQuery אין חלופה לפקודה USE DATABASE של Snowflake.
SHOW DATABASE דוחות
בקטע הזה נשתמש בפקודת BigQuery CLI שמתאימה לפקודת Snowflake כדי להסביר את ההבדל בהצהרת SHOW.
| Snowflake | BigQuery |
|---|---|
|
הערה: Snowflake מספקת אפשרות אחת לרישום ולהצגת פרטים על כל מסדי הנתונים, כולל מסדי נתונים שהוסרו שנמצאים בתוך תקופת השמירה. |
bq ls --format=prettyjsonאו
הערה: ב-BigQuery, הפקודה ls מספקת רק את השמות של מערכי הנתונים ומידע בסיסי, והפקודה show מספקת פרטים כמו חותמת הזמן של השינוי האחרון, רשימות ACL ותוויות של מערך נתונים. ב-BigQuery אפשר גם לקבל פרטים נוספים על מערכי הנתונים באמצעות Information Schema. |
|
הערה: באפשרות TERSE, Snowflake מאפשרת להציג רק מידע או שדות ספציפיים לגבי מערכי נתונים. |
המושג לא נתמך ב-BigQuery. |
| המושג 'מסע בזמן' לא נתמך ב-BigQuery ברמת מערך הנתונים. | |
SHOW DATABASES
|
סינון תוצאות לפי שמות של מערכי נתונים לא נתמך ב-BigQuery. עם זאת, יש תמיכה בסינון לפי תוויות. |
SHOW DATABASES
הערה: כברירת מחדל, Snowflake לא מגביל את מספר התוצאות. עם זאת, הערך של LIMIT לא יכול להיות גבוה מ-10,000. |
הערה: כברירת מחדל, ב-BigQuery מוצגות רק 50 תוצאות. |
ב-BigQuery יש גם את אפשרויות הפקודה הבאות bq, שאין להן מקבילה ישירה ב-Snowflake:
- bq ls --format=pretty: מחזירה תוצאות בפורמט בסיסי
- *bq ls -a: *מחזירה רק מערכי נתונים אנונימיים (אלה שמתחילים בקו תחתון)
- bq ls --all: מחזירה את כל מערכי הנתונים, כולל אנונימיים
- bq ls --filter labels.key:value: מחזירה תוצאות מסוננות לפי תווית של מערך נתונים
- bq ls --d: לא כולל בתוצאות מערכי נתונים אנונימיים
- bq show --format=pretty: מחזירה תוצאות מפורטות בפורמט בסיסי לכל מערכי הנתונים
ניהול SCHEMA
Snowflake מספקת כמה פקודות לניהול סכימות , בדומה לפקודות לניהול מסדי נתונים. הקונספט הזה של יצירה וניהול של סכימה לא נתמך ב-BigQuery.
עם זאת, ב-BigQuery אפשר להגדיר את הסכימה של הטבלה כשאתם טוענים נתונים לטבלה, וכשאתם יוצרים טבלה ריקה. לחלופין, אפשר להשתמש בזיהוי אוטומטי של סכימה עבור פורמטים נתמכים של נתונים.
ניהול SHARE
Snowflake מספקת כמה פקודות לניהול שיתופים , בדומה לפקודות לניהול מסדי נתונים וסכימות. המושג הזה של יצירה וניהול של שיתוף לא נתמך ב-BigQuery.
DDL של טבלה, תצוגה ורצף
CREATE TABLE דוחות
רוב ההצהרות של Snowflake CREATE TABLE תואמות ל-BigQuery, למעט רכיבי התחביר הבאים שלא נמצאים בשימוש ב-BigQuery:
| Snowflake | BigQuery |
|---|---|
הערה: UNIQUE ו-PRIMARY KEY הן הגבלות שמיועדות למתן מידע, והמערכת של Snowflake לא אוכפת אותן. |
|
כאשר table_constraints הם:
הערה: UNIQUE וגם PRIMARY KEY אילוצים הם אינפורמטיביים ולא נאכפים על ידי מערכת Snowflake. |
הערה: ב-BigQuery לא נעשה שימוש באילוצי טבלה מסוג UNIQUE, PRIMARY KEY או FOREIGN KEY. כדי להשיג אופטימיזציה דומה לזו שמספקות המגבלות האלה במהלך ביצוע השאילתה, צריך לבצע חלוקה למחיצות ואשכול בטבלאות BigQuery. CLUSTER BY תומך בעד ארבע עמודות. |
|
בדוגמה הזו מוסבר איך להשתמש בטבלאות INFORMATION_SCHEMA כדי להעתיק שמות של עמודות, סוגי נתונים ואילוצים של NOT NULL לטבלה חדשה. |
הערה:ב-Snowflake, ההגדרה BACKUP NO מצוינת כ'שמירת זמן העיבוד כשיוצרים תמונות מצב ומשחזרים מתמונות מצב, וצמצום נפח האחסון'. |
לא נעשה שימוש באפשרות הטבלה BACKUP NO, והיא גם לא נדרשת, כי BigQuery שומר באופן אוטומטי עד 7 ימים של גרסאות היסטוריות של כל הטבלאות, בלי להשפיע על זמן העיבוד או על נפח האחסון שמחויב. |
כאשר table_attributes הם:
|
BigQuery תומך ביצירת אשכולות, שמאפשרת לאחסן מפתחות בסדר ממוין. |
|
|
|
|
BigQuery תומך גם בהצהרת DDL CREATE OR REPLACE
TABLEשמחליפה טבלה אם היא כבר קיימת.
הצהרת CREATE TABLE של BigQuery תומכת גם בסעיפים הבאים, שלא קיימים ב-Snowflake:
מידע נוסף על CREATE TABLE ב-BigQuery זמין בדוגמאות להצהרות CREATE TABLE במסמכי ה-DDL.
ALTER TABLE דוחות
בקטע הזה נשתמש בפקודות BigQuery CLI שמתאימות לפקודות Snowflake כדי לטפל בהבדלים בהצהרות ALTER לטבלאות.
| Snowflake | BigQuery |
|---|---|
|
|
|
אין תמיכה בהחלפת טבלאות ב-BigQuery. |
|
ניהול אוסף כללים (collation) לטבלאות לא אפשרי ב-BigQuery. |
|
|
|
|
בנוסף, Snowflake מספקת אפשרויות של אשכולות, עמודות ואילוצים לשינוי טבלאות שלא נתמכות על ידי BigQuery.
DROP TABLE ודוחות UNDROP TABLE
בקטע הזה נשתמש בפקודת BigQuery CLI שמתאימה לפקודת Snowflake כדי לטפל בהבדל בין הצהרות DROP ו-UNDROP.
| Snowflake | BigQuery |
|---|---|
הערה: ב-Snowflake, מחיקת טבלה לא מסירה אותה מהמערכת באופן סופי. גרסה של הטבלה שהוסרה נשמרת למספר הימים שצוין בפרמטר DATA_RETENTION_TIME_IN_DAYS של מסד הנתונים. |
-f משמש לדילוג על אישור לביצוע -d מציין מערך נתונים הערה: ב-BigQuery, גם מחיקה של טבלה היא לא קבועה, אבל נשמרת תמונה של הטבלה למשך 7 ימים בלבד. |
|
הערה: ב-BigQuery, קודם צריך לקבוע את חותמת הזמן של מערכת UNIX שבה הטבלה הייתה קיימת (באלפיות השנייה). אחר כך מעתיקים את הטבלה בחותמת הזמן הזו לטבלה חדשה. השם של הטבלה החדשה צריך להיות שונה מהשם של הטבלה שנמחקה. |
CREATE EXTERNAL TABLE דוחות
ב-BigQuery אפשר ליצור טבלאות חיצוניות קבועות וזמניות ולהריץ שאילתות על נתונים ישירות מ:
ב-Snowflake אפשר ליצור טבלה חיצונית קבועה, שכשמבצעים עליה שאילתה, היא קוראת נתונים מקבוצה של קובץ אחד או יותר בשלב חיצוני שצוין.
בקטע הזה נשתמש בפקודת BigQuery CLI שמתאימה לפקודת Snowflake כדי לטפל בהבדלים בפקודה CREATE EXTERNAL TABLE.
| Snowflake | BigQuery |
|---|---|
CREATE [OR REPLACE] EXTERNAL TABLE
הערה: ב-Snowflake אפשר להכין את הקבצים שמכילים את הנתונים לקריאה, ולציין אפשרויות של סוג פורמט לטבלאות חיצוניות. סוגי פורמטים של Snowflake – BigQuery תומך בכל הפורמטים האלה (CSV, JSON, AVRO, PARQUET, ORC) חוץ מפורמט XML. |
הערה: ב-BigQuery אפשר ליצור טבלה קבועה שמקושרת למקור הנתונים באמצעות קובץ הגדרת טבלה [1], קובץ סכימת JSON [2] או הגדרת סכימה מוטבעת [3]. אין תמיכה בהעברה של קבצים זמניים לקריאה ובהגדרת אפשרויות של סוג פורמט ב-BigQuery. |
|
הערה: BigQuery לא תומך באף אחת מהאפשרויות של הפרמטרים האופציונליים ש-Snowflake מספקת ליצירת טבלאות חיצוניות. לצורך חלוקה למחיצות, BigQuery תומך בשימוש בעמודה הווירטואלית _FILE_NAME כדי ליצור טבלאות או תצוגות מחולקות למחיצות על בסיס הטבלאות החיצוניות. מידע נוסף זמין במאמר בנושא שאילתות על פסאודו-עמודה של _FILE_NAME. |
בנוסף, BigQuery תומך גם בשאילתות של נתונים עם חלוקה חיצונית למחיצות בפורמטים AVRO, PARQUET, ORC, JSON ו-CSV, שמאוחסנים ב-Google Cloud Storage באמצעות פריסת חלוקה למחיצות של Hive כברירת מחדל.
CREATE VIEW דוחות
בטבלה הבאה מוצגים מקבילים בין Snowflake לבין BigQuery עבור הצהרת CREATE VIEW.
| Snowflake | BigQuery |
|---|---|
|
|
|
CREATE OR REPLACE VIEW
|
|
|
| לא נתמך | CREATE VIEW IF NOT EXISTS
|
|
כדי ליצור תצוגה ב-BigQuery, כל האובייקטים שהתצוגה מפנה אליהם צריכים כבר להתקיים. ב-BigQuery אפשר להריץ שאילתות על מקורות נתונים חיצוניים. |
CREATE SEQUENCE דוחות
לא נעשה שימוש ברצפים ב-BigQuery, אבל אפשר להשיג את אותה תוצאה באמצעות השיטה הבאה לעיבוד אצווה. למידע נוסף על מפתחות חלופיים ומאפיינים שמשתנים לאט (SCD), אפשר לעיין במדריכים הבאים:
|
|---|
הוראות DDL לטעינה ולפריקה של נתונים
מערכת Snowflake תומכת בטעינה ובפריקה של נתונים באמצעות פקודות לניהול שלב, פורמט קובץ וצינור. ב-BigQuery יש גם כמה אפשרויות כמו bq load, שירות העברת נתונים ל-BigQuery, bq extract וכו'. בקטע הזה מוסבר על ההבדלים בשימוש במתודולוגיות האלה לטעינה ולפריקה של נתונים.
DDL של חשבון וסשן
המושגים 'חשבון' ו'סשן' של Snowflake לא נתמכים ב-BigQuery. ב-BigQuery אפשר לנהל חשבונות באמצעות Cloud IAM בכל הרמות. בנוסף, טרנזקציות עם כמה הצהרות אינן אפשריות ב-BigQuery.
פונקציות בהגדרת המשתמש (UDF)
פונקציה מוגדרת על ידי המשתמש מאפשרת לכם ליצור פונקציות לפעולות בהתאמה אישית. הפונקציות האלה מקבלות עמודות קלט, מבצעות פעולות ומחזירות את התוצאה של הפעולות האלה בתור ערך.
גם Snowflake וגם BigQuery תומכים בפונקציות בהגדרת המשתמש (UDF) באמצעות ביטויי SQL וקוד JavaScript.
במאגר GitHub GoogleCloudPlatform/bigquery-utils/ אפשר למצוא ספרייה של פונקציות נפוצות מוגדרות על ידי המשתמש (UDF) ב-BigQuery.
תחביר CREATE FUNCTION
בטבלה הבאה מפורטים ההבדלים בתחביר של יצירת פונקציות מוגדרות על ידי המשתמש (UDF) ב-SQL בין Snowflake לבין BigQuery.
| Snowflake | BigQuery |
|---|---|
|
הערה: ב-SQL UDF ב-BigQuery, סוג הנתונים שמוחזר הוא אופציונלי. מערכת BigQuery מסיקה את סוג התוצאה של הפונקציה מגוף פונקציית ה-SQL כששאילתה קוראת לפונקציה. |
|
הערה:ב-SQL UDF ב-BigQuery אין תמיכה בהחזרת סוג טבלה, אבל התכונה הזו נמצאת בתוכנית הפיתוח של המוצר ותהיה זמינה בקרוב. עם זאת, BigQuery תומך בהחזרת ARRAY מסוג STRUCT. |
|
הערה: Snowflake מספקת אפשרות מאובטחת להגבלת ההגדרה והפרטים של פונקציות UDF רק למשתמשים מורשים (כלומר, משתמשים שהוקצה להם התפקיד שכולל את התצוגה). |
הערה: אבטחת הפונקציה היא לא פרמטר שאפשר להגדיר ב-BigQuery. BigQuery תומך ביצירת תפקידים והרשאות של IAM כדי להגביל את הגישה לנתונים הבסיסיים ולהגדרת הפונקציה. |
|
הערה: ההתנהגות של הפונקציה עבור קלט null מטופלת באופן מרומז ב-BigQuery, ואין צורך לציין אותה כאפשרות נפרדת. |
|
הערה:תנודתיות הפונקציה היא לא פרמטר שאפשר להגדיר ב-BigQuery. כל התנודתיות של UDF ב-BigQuery שווה לתנודתיות של IMMUTABLE ב-Snowflake (כלומר, היא לא מבצעת חיפושים במסד הנתונים או משתמשת במידע שלא מופיע ישירות ברשימת הארגומנטים שלה). |
|
CREATE [OR REPLACE] FUNCTION
הערה: שימוש בגרשיים בודדים או ברצף תווים כמו ציטוט באמצעות סימן הדולר ($$) is not required or supported in BigQuery. BigQuery implicitly interprets the SQL expression. |
|
Note: Adding comments or descriptions in UDFs is not supported in BigQuery. |
|
Note: BigQuery supports using ANY TYPE as argument type. The function will accept an input of any type for this argument. For more information, see templated parameter in BigQuery. |
BigQuery also supports the CREATE FUNCTION IF NOT EXISTSstatement
which treats the query as successful and takes no action if a function with the
same name already exists.
BigQuery's CREATE FUNCTIONstatement also supports creating
TEMPORARY or TEMP functions, which do
not have a Snowflake equivalent. See
calling UDFs
for details on executing a BigQuery persistent UDF.
DROP FUNCTION syntax
The following table addresses differences in DROP FUNCTION syntax between Snowflake and BigQuery.
| Snowflake | BigQuery |
|---|---|
|
Note: BigQuery does not require using the function's signature (argument data type) for deleting the function. |
BigQuery requires that you specify the project_name if the function
is not located in the current project.
Additional function commands
This section covers additional UDF commands supported by Snowflake that are not directly available in BigQuery.
ALTER FUNCTION syntax
Snowflake supports the following operations using
ALTER FUNCTION
syntax.
- Renaming a UDF
- Converting to (or reverting from) a secure UDF
- Adding, overwriting, removing a comment for a UDF
As configuring function security and adding function comments is not available
in BigQuery, ALTER FUNCTION syntax is not supported. However,
the CREATE FUNCTION
statement can be used to create a UDF with the same function definition but a
different name.
DESCRIBE FUNCTION syntax
Snowflake supports describing a UDF using DESC[RIBE] FUNCTION syntax. This is not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
SHOW USER FUNCTIONS syntax
In Snowflake, SHOW USER FUNCTIONS syntax can be used to list all UDFs for which users have access privileges. This is not supported in BigQuery. However, querying UDF metadata via INFORMATION SCHEMA will be available soon as part of the product roadmap.
Stored procedures
Snowflake stored procedures are written in JavaScript, which can execute SQL statements by calling a JavaScript API. In BigQuery, stored procedures are defined using a block of SQL statements.
CREATE PROCEDURE syntax
In Snowflake, a stored procedure is executed with a CALL command while in BigQuery, stored procedures are executed like any other BigQuery function.
The following table addresses differences in stored procedure creation syntax between Snowflake and BigQuery.
| Snowflake | BigQuery |
|---|---|
|
Note: Snowflake requires that stored procedures return a single value. Hence, return data type is a required option. |
CREATE [OR REPLACE] PROCEDURE
Note: BigQuery doesn't support a return type for stored procedures. Also, it requires specifying argument mode for each argument passed. |
|
|
|
CREATE [OR REPLACE] PROCEDURE
הערה: ההתנהגות של הפרוצדורה עבור קלט null מטופלת באופן מרומז ב-BigQuery, ואין צורך לציין אותה כאפשרות נפרדת. |
CREATE [OR REPLACE] PROCEDURE
|
הערה:התנודתיות של הפרוצדורה היא לא פרמטר שאפשר להגדיר ב-BigQuery. היא מקבילה ל- IMMUTABLE volatility של Snowflake. |
CREATE [OR REPLACE] PROCEDURE
|
הערה: הוספת הערות או תיאורים בהגדרות של פרוצדורות אינה נתמכת ב-BigQuery. |
CREATE [OR REPLACE] PROCEDURE
הערה: Snowflake תומך בהגדרת המתקשר או הבעלים של הפרוצדורה לביצוע |
הערה: תהליכים מאוחסנים ב-BigQuery תמיד מופעלים כמתקשר |
BigQuery תומך גם בהצהרה CREATE PROCEDURE IF NOT EXISTS, שמטפלת בשאילתה כהצלחה ולא מבצעת פעולה אם כבר קיימת פונקציה עם אותו שם.
תחביר DROP PROCEDURE
בטבלה הבאה מפורטים ההבדלים בתחביר של DROP FUNCTION בין Snowflake לבין BigQuery.
| Snowflake | BigQuery |
|---|---|
|
הערה: כדי למחוק את הפרוצדורה ב-BigQuery, לא צריך להשתמש בחתימה שלה (סוג הנתונים של הארגומנט). |
ב-BigQuery, חובה לציין את project_name אם הפרוצדורה לא נמצאת בפרויקט הנוכחי.
פקודות נוספות של הליך
ב-Snowflake יש פקודות נוספות כמו ALTER PROCEDURE, DESC[RIBE] PROCEDURE ו-SHOW PROCEDURES לניהול הפרוצדורות המאוחסנות. אין תמיכה בערכים האלה ב-BigQuery.
מטא-נתונים והצהרות SQL של טרנזקציות
| Snowflake | BigQuery |
|---|---|
|
ב-BigQuery תמיד נעשה שימוש בבידוד של תמונת מצב. פרטים נוספים זמינים בקטע הבטחות עקביות בהמשך המאמר הזה. |
|
לא בשימוש ב-BigQuery. |
|
לא בשימוש ב-BigQuery |
|
לא בשימוש ב-BigQuery. |
הצהרות SQL מרובות שורות והצהרות SQL מרובות
גם Snowflake וגם BigQuery תומכות בטרנזקציות (סשנים), ולכן תומכות בהצהרות שמופרדות באמצעות נקודה-פסיק ומופעלות יחד באופן עקבי. מידע נוסף מופיע במאמר בנושא טרנזקציות עם כמה תדפיסי חשבון.
עמודות של מטא-נתונים לקבצים בהמתנה
Snowflake יוצרת אוטומטית מטא-נתונים לקבצים בשלבים פנימיים וחיצוניים. אפשר לשאול שאילתות על המטא-נתונים האלה ולטעון אותם לטבלה לצד עמודות נתונים רגילות. אפשר להשתמש בעמודות המטא-נתונים הבאות:
התחייבויות עקביות ורמת בידוד של טרנזקציה
גם Snowflake וגם BigQuery הן אטומיות – כלומר, הן תואמות ל-ACID ברמת כל שינוי, על פני שורות רבות.
טרנזקציות
לכל עסקה ב-Snowflake מוקצה זמן התחלה ייחודי (כולל אלפיות השנייה) שמוגדר כמזהה העסקה. Snowflake תומך רק ברמת הבידוד READ COMMITTED. עם זאת, יכול להיות שמשפט יראה שינויים שבוצעו על ידי משפט אחר אם שניהם נמצאים באותה עסקה – גם אם השינויים האלה עדיין לא אושרו. ב-Snowflake, עסקאות מקבלות נעילות על משאבים (טבלאות) כשמתבצע שינוי במשאב. המשתמשים יכולים לשנות את הזמן המקסימלי שבו הצהרה חסומה תמתין עד שתפוג. פקודות DML עוברות אישור אוטומטי אם הפרמטר AUTOCOMMIT מופעל.
BigQuery גם תומך בעסקאות. BigQuery עוזר להבטיח בקרת בו-זמניות אופטימית (הראשון שמבצע commit זוכה) באמצעות בידוד snapshot, שבו שאילתה קוראת את הנתונים האחרונים שבוצעו לפני שהשאילתה מתחילה. גישה זו מבטיחה את אותה רמת עקביות בכל שורה, בכל שינוי ובכל השורות באותה פקודת DML, ועדיין מונעת מצבי קיפאון. במקרה של כמה עדכוני DML באותה טבלה, BigQuery עובר לבקרת בו-זמניות פסימית. אפשר להריץ משימות טעינה באופן עצמאי לחלוטין ולצרף אותן לטבלאות. עם זאת, ב-BigQuery אין גבולות ברורים לטרנזקציות או להפעלות.
חזרה לגרסה קודמת
אם סשן של עסקה ב-Snowflake מסתיים באופן לא צפוי לפני שהעסקה מאושרת או מבוטלת, העסקה נשארת במצב מנותק. המשתמש צריך להריץ את הפקודה SYSTEM$ABORT_TRANSACTION כדי לבטל את העסקה המנותקת, אחרת Snowflake יבצע Rollback לעסקה המנותקת אחרי ארבע שעות של חוסר פעילות. אם מתרחש מצב של קיפאון, Snowflake מזהה את הקיפאון ובוחר את ההצהרה העדכנית ביותר לביטול. אם פקודת ה-DML בעסקה שנפתחה באופן מפורש נכשלת, השינויים מבוטלים, אבל העסקה נשארת פתוחה עד שהיא מאושרת או מבוטלת. אי אפשר לבטל הצהרות DDL ב-Snowflake כי הן מתבצעות אוטומטית.
BigQuery תומך בהצהרת ROLLBACK TRANSACTION.
אין הצהרה של ABORT ב-BigQuery.
מגבלות על מסדי נתונים
חשוב תמיד לעיין במסמכים הציבוריים של BigQuery כדי לראות את המכסות והמגבלות העדכניות. משתמשים עם נפח גדול יכולים לפנות לצוות התמיכה של Cloud כדי להגדיל את המכסות שלהם.
בכל החשבונות ב-Snowflake מוגדרות כברירת מחדל מגבלות רכות. הגבלות רכות מוגדרות במהלך יצירת החשבון, והן עשויות להשתנות. אפשר להגדיל הרבה מהמגבלות הרכות של Snowflake באמצעות צוות ניהול החשבון של Snowflake או כרטיס תמיכה.
בטבלה הבאה מוצגת השוואה בין מגבלות מסד הנתונים של Snowflake ושל BigQuery.
| מגבלה | Snowflake | BigQuery |
|---|---|---|
| גודל הטקסט של השאילתה | 1MB | 1MB |
| מספר מקסימלי של שאילתות בו-זמנית | XS Warehouse - 8 S Warehouse - 16 M Warehouse - 32 L Warehouse - 64 XL Warehouse - 128 |
100 |