מדריך לתרגום Oracle SQL
במסמך הזה מפורטים קווי הדמיון וההבדלים בתחביר של SQL בין Oracle ל-BigQuery, כדי לעזור לכם לתכנן את ההעברה. אתם יכולים להשתמש בתרגום SQL באצווה כדי להעביר את הסקריפטים של SQL בכמות גדולה, או בתרגום SQL אינטראקטיבי כדי לתרגם שאילתות אד-הוק.
סוגי הנתונים
בקטע הזה מוצגים סוגי הנתונים המקבילים ב-Oracle וב-BigQuery.
| Oracle | BigQuery | הערות |
|---|---|---|
VARCHAR2
|
STRING
|
|
NVARCHAR2
|
STRING
|
|
CHAR
|
STRING
|
|
NCHAR
|
STRING
|
|
CLOB
|
STRING
|
|
NCLOB
|
STRING
|
|
INTEGER
|
INT64
|
|
SHORTINTEGER
|
INT64
|
|
LONGINTEGER
|
INT64
|
|
NUMBER
|
NUMERIC
|
ב-BigQuery המשתמשים לא יכולים לציין ערכים מותאמים אישית לדיוק או לקנה מידה. כתוצאה מכך, יכול להיות שעמודה ב-Oracle תוגדר כך שיהיה לה קנה מידה גדול יותר מזה שנתמך ב-BigQuery.
בנוסף, לפני אחסון של מספר עשרוני, Oracle מעגלת כלפי מעלה אם למספר הזה יש יותר ספרות אחרי הנקודה העשרונית מאשר אלה שצוינו בעמודה המתאימה. ב-BigQuery אפשר להטמיע את התכונה הזו באמצעות הפונקציה |
NUMBER(*, x)
|
NUMERIC
|
ב-BigQuery המשתמשים לא יכולים לציין ערכים מותאמים אישית לדיוק או לקנה מידה. כתוצאה מכך, יכול להיות שעמודה ב-Oracle תוגדר כך שיהיה לה קנה מידה גדול יותר מזה שנתמך ב-BigQuery.
בנוסף, לפני אחסון של מספר עשרוני, Oracle מעגלת כלפי מעלה אם למספר הזה יש יותר ספרות אחרי הנקודה העשרונית מאשר אלה שצוינו בעמודה המתאימה. ב-BigQuery אפשר להטמיע את התכונה הזו באמצעות הפונקציה |
NUMBER(x, -y)
|
INT64
|
אם משתמש מנסה לאחסן מספר עשרוני, Oracle מעגל אותו למספר שלם. ב-BigQuery, ניסיון לאחסן מספר עשרוני בעמודה שמוגדרת כ-INT64 יגרום לשגיאה. במקרה כזה, צריך להשתמש בפונקציה ROUND().
סוגי הנתונים |
NUMBER(x)
|
INT64
|
אם משתמש מנסה לאחסן מספר עשרוני, Oracle מעגל אותו למספר שלם. ב-BigQuery, ניסיון לאחסן מספר עשרוני בעמודה שמוגדרת כ-INT64 יוביל לשגיאה. במקרה כזה, צריך להשתמש בפונקציה ROUND().
סוגי הנתונים |
FLOAT
|
NUMERIC/FLOAT64
|
FLOAT הוא סוג נתונים מדויק, והוא סוג משנה של NUMBER ב-Oracle. ב-BigQuery, FLOAT64 הוא סוג נתונים משוער. יכול להיות ש-NUMERIC מתאים יותר לסוג FLOAT ב-BigQuery.
|
BINARY_DOUBLE
|
NUMERIC/FLOAT64
|
FLOAT הוא סוג נתונים מדויק, והוא סוג משנה של NUMBER ב-Oracle. ב-BigQuery, FLOAT64 הוא סוג נתונים משוער. יכול להיות ש-NUMERIC מתאים יותר לסוג FLOAT ב-BigQuery.
|
BINARY_FLOAT
|
NUMERIC/FLOAT64
|
FLOAT הוא סוג נתונים מדויק, והוא סוג משנה של NUMBER ב-Oracle. ב-BigQuery, FLOAT64 הוא סוג נתונים משוער. יכול להיות ש-NUMERIC מתאים יותר לסוג FLOAT ב-BigQuery.
|
LONG
|
BYTES
|
סוג הנתונים LONG משמש בגרסאות קודמות, ולא מומלץ להשתמש בו בגרסאות חדשות של Oracle Database.
אפשר להשתמש בסוג הנתונים |
BLOB
|
BYTES
|
אפשר להשתמש בסוג הנתונים BYTES כדי לאחסן נתונים בינאריים באורך משתנה. אם לא שולחים שאילתות לשדה הזה ולא משתמשים בו בניתוח נתונים, עדיף לאחסן נתונים בינאריים ב-Cloud Storage.
|
BFILE
|
STRING
|
אפשר לאחסן קבצים בינאריים ב-Cloud Storage ולהשתמש בסוג הנתונים STRING כדי להפנות לקבצים בטבלה ב-BigQuery.
|
DATE
|
DATETIME
|
|
TIMESTAMP
|
TIMESTAMP
|
BigQuery תומך בדיוק של מיקרו-שניות (10-6), בהשוואה ל-Oracle שתומך בדיוק בטווח שבין 0 ל-9.
ב-BigQuery יש תמיכה בשם של אזור זמן ממסד נתונים של אזורי זמן ובסטייה של אזור זמן מ-UTC.
ב-BigQuery צריך לבצע המרה של אזור הזמן באופן ידני כדי להתאים לתכונה |
TIMESTAMP(x)
|
TIMESTAMP
|
BigQuery תומך בדיוק של מיקרו-שניות (10-6), בהשוואה ל-Oracle שתומך בדיוק בטווח שבין 0 ל-9.
ב-BigQuery יש תמיכה בשם של אזור זמן ממסד נתונים של אזורי זמן ובסטייה של אזור זמן מ-UTC.
ב-BigQuery צריך לבצע המרה של אזור הזמן באופן ידני כדי להתאים לתכונה |
TIMESTAMP WITH TIME ZONE
|
TIMESTAMP
|
BigQuery תומך בדיוק של מיקרו-שניות (10-6), בהשוואה ל-Oracle שתומך בדיוק בטווח שבין 0 ל-9.
ב-BigQuery יש תמיכה בשם של אזור זמן ממסד נתונים של אזורי זמן ובסטייה של אזור זמן מ-UTC.
ב-BigQuery צריך לבצע המרה של אזור הזמן באופן ידני כדי להתאים לתכונה |
TIMESTAMP WITH LOCAL TIME ZONE
|
TIMESTAMP
|
BigQuery תומך בדיוק של מיקרו-שניות (10-6), בהשוואה ל-Oracle שתומך בדיוק בטווח שבין 0 ל-9.
ב-BigQuery יש תמיכה בשם של אזור זמן ממסד נתונים של אזורי זמן ובסטייה של אזור זמן מ-UTC.
ב-BigQuery צריך לבצע המרה של אזור הזמן באופן ידני כדי להתאים לתכונה |
INTERVAL YEAR TO MONTH
|
STRING
|
אפשר לאחסן ערכי מרווחים כסוג הנתונים STRING ב-BigQuery.
|
INTERVAL DAY TO SECOND
|
STRING
|
אפשר לאחסן ערכי מרווחים כסוג הנתונים STRING ב-BigQuery.
|
RAW
|
BYTES
|
אפשר להשתמש בסוג הנתונים BYTES כדי לאחסן נתונים בינאריים באורך משתנה. אם לא שולחים שאילתות לשדה הזה ולא משתמשים בו בניתוח נתונים, עדיף לאחסן נתונים בינאריים ב-Cloud Storage.
|
LONG RAW
|
BYTES
|
אפשר להשתמש בסוג הנתונים BYTES כדי לאחסן נתונים בינאריים באורך משתנה. אם לא שולחים שאילתות לשדה הזה ולא משתמשים בו בניתוח נתונים, עדיף לאחסן נתונים בינאריים ב-Cloud Storage.
|
ROWID
|
STRING
|
סוגי הנתונים האלה משמשים את Oracle באופן פנימי כדי לציין כתובות ייחודיות לשורות בטבלה. באופן כללי, לא מומלץ להשתמש בשדה ROWID או UROWID באפליקציות. אבל אם זה המצב, אפשר להשתמש בסוג הנתונים STRING כדי להחזיק את הנתונים האלה.
|
עיצוב הטקסט
ב-Oracle SQL נעשה שימוש בקבוצה של פורמטים שמוגדרים כברירת מחדל כפרמטרים להצגת ביטויים ונתוני עמודות, ולהמרות בין סוגי נתונים. לדוגמה, אם NLS_DATE_FORMAT מוגדר כ-YYYY/MM/DD, הפורמט של התאריכים הוא YYYY/MM/DD כברירת מחדל. מידע נוסף על הגדרות ה-NLS זמין במסמכי התיעוד אונליין של Oracle.
ב-BigQuery אין פרמטרים של אתחול.
כברירת מחדל, BigQuery מצפה שכל נתוני המקור יהיו בקידוד UTF-8 בזמן הטעינה. אם יש לכם קובצי CSV עם נתונים בקידוד ISO-8859-1, אתם יכולים לציין את הקידוד באופן מפורש כשאתם מייבאים את הנתונים, כדי ש-BigQuery יוכל להמיר אותם ל-UTF-8 במהלך תהליך הייבוא.
אפשר לייבא רק נתונים שמקודדים ב-ISO-8859-1 או ב-UTF-8. BigQuery מאחסן ומחזיר את הנתונים בקידוד UTF-8.
אפשר להגדיר את הפורמט הרצוי של התאריך או אזור הזמן בפונקציות DATE ו-TIMESTAMP.
פורמט של חותמת זמן וסוג תאריך
כשממירים רכיבים של פורמט חותמת זמן ותאריך מ-Oracle ל-BigQuery, חשוב לשים לב להבדלים באזורי הזמן בין TIMESTAMP ל-DATETIME, כפי שמסוכם בטבלה הבאה.
שימו לב שאין סוגריים בפורמטים של Oracle כי הפורמטים (CURRENT_*) הם מילות מפתח, לא פונקציות.
| Oracle | BigQuery | הערות | |
|---|---|---|---|
CURRENT_TIMESTAMP
|
מידע על TIMESTAMP ב-Oracle יכול לכלול מידע על אזורי זמן שונים, שמוגדר באמצעות WITH TIME ZONE בהגדרה של העמודה או בהגדרה של המשתנה TIME_ZONE.
|
אם אפשר, השתמשו בפונקציה CURRENT_TIMESTAMP(), שמוגדרת בפורמט ISO. עם זאת, בפורמט הפלט תמיד מוצג אזור הזמן UTC. (באופן פנימי, ל-BigQuery אין אזור זמן).
חשוב לשים לב לפרטים הבאים לגבי ההבדלים בפורמט ISO:
הפורמט של
אם רוצים להשתמש בפורמט מפורש, משתמשים בפונקציה |
|
CURRENT_DATE
|
ב-Oracle יש שני סוגים של תאריכים:
SYSDATE or CURRENT_DATE
|
ל-BigQuery יש פורמט DATE נפרד שתמיד מחזיר תאריך בפורמט ISO 8601.
אי אפשר להשתמש ב- |
|
CURRENT_DATE-3
|
ערכי התאריכים מיוצגים כמספרים שלמים. ב-Oracle יש תמיכה באופרטורים אריתמטיים לסוגי תאריכים. | לסוגי תאריכים, משתמשים ב-DATE_ADD() או ב-DATE_SUB().
ב-BigQuery משתמשים באופרטורים אריתמטיים לסוגי נתונים: INT64, NUMERIC ו-FLOAT64.
|
|
NLS_DATE_FORMAT
|
מגדירים את פורמט התאריך של הסשן או של המערכת. | BigQuery תמיד משתמש ב-ISO 8601, לכן חשוב להמיר את התאריכים והשעות של Oracle. | |
תחביר של שאילתות
בקטע הזה מוסברים ההבדלים בתחביר השאילתות בין Oracle ל-BigQuery.
SELECT דפי חשבון
רוב ההצהרות של Oracle SELECT תואמות ל-BigQuery.
פונקציות, אופרטורים וביטויים
בקטעים הבאים מפורטים המיפויים בין פונקציות של Oracle לבין הפונקציות המקבילות ב-BigQuery.
אופרטורים להשוואה
אופרטורים להשוואה ב-Oracle וב-BigQuery תואמים ל-ANSI SQL:2011. האופרטורים להשוואה בטבלה הבאה זהים ב-BigQuery וב-Oracle. ב-BigQuery, אתם יכולים להשתמש ב-REGEXP_CONTAINS במקום ב-REGEXP_LIKE.
| אופרטור | תיאור |
|---|---|
"="
|
שווה |
<>
|
לא שווה |
!=
|
לא שווה |
>
|
גדול מ- |
>=
|
גדול או שווה ל- |
<
|
פחות מ- |
<=
|
קטן או שווה ל- |
IN ( )
|
תואם לערך ברשימה |
NOT
|
ביטול תנאי |
BETWEEN
|
בטווח (כולל) |
IS NULL
|
הערך של NULL
|
IS NOT NULL
|
לא ערך NULL
|
LIKE
|
התאמה לתבנית באמצעות % |
EXISTS
|
התנאי מתקיים אם שאילתת המשנה מחזירה לפחות שורה אחת |
האופרטורים בטבלה זהים גם ב-BigQuery וגם ב-Oracle.
ביטויים ופונקציות לוגיים
פונקציות צבירה
בטבלה הבאה מוצג מיפוי בין פונקציות נפוצות של צבירה, צבירה סטטיסטית וצבירה משוערת ב-Oracle, לבין הפונקציות המקבילות ב-BigQuery:
| Oracle | BigQuery |
|---|---|
ANY_VALUE(מ-Oracle 19c) |
ANY_VALUE |
APPROX_COUNT
|
HLL_COUNT set of functions with specified precision
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT_AGG
|
APPROX_COUNT_DISTINCT
|
APPROX_COUNT_DISTINCT_DETAIL
|
APPROX_COUNT_DISTINCT
|
APPROX_PERCENTILE(percentile) WITHIN GROUP (ORDER BY expression)
|
APPROX_QUANTILES(expression, 100)[ב-BigQuery אין תמיכה בשאר הארגומנטים שמוגדרים ב-Oracle. |
APPROX_PERCENTILE_AGG
|
APPROX_QUANTILES(expression, 100)[
|
APPROX_PERCENTILE_DETAIL
|
APPROX_QUANTILES(expression, 100)[OFFSET(CAST(TRUNC(percentile * 100) as INT64))]
|
APPROX_SUM
|
APPROX_TOP_SUM(expression, weight, number)
|
AVG
|
AVG
|
BIT_COMPLEMENT
|
אופרטור NOT ברמת הביט: ~ |
BIT_OR
|
BIT_OR, X | Y
|
BIT_XOR
|
BIT_XOR, X ^ Y
|
BITAND
|
BIT_AND, X & Y
|
CARDINALITY
|
COUNT
|
COLLECT
|
BigQuery לא תומך ב-TYPE AS TABLE OF.
כדאי להשתמש ב-STRING_AGG() או ב-ARRAY_AGG() ב-BigQuery
|
CORR/CORR_K/
CORR_S
|
CORR
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
FIRST
|
לא קיים באופן משתמע ב-BigQuery. כדאי להשתמש בפונקציות בהגדרת המשתמש (UDF). |
GROUP_ID
|
לא בשימוש ב-BigQuery |
GROUPING
|
GROUPING
|
GROUPING_ID
|
לא בשימוש ב-BigQuery. |
LAST
|
לא קיים באופן משתמע ב-BigQuery. כדאי להשתמש ב-UDF. |
LISTAGG
|
STRING_AGG, ARRAY_CONCAT_AGG(expression [ORDER BY key [{ASC|DESC}] [, ... ]] [LIMIT n])
|
MAX
|
MAX
|
MIN
|
MIN
|
OLAP_CONDITION
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
OLAP_EXPRESSION
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
OLAP_EXPRESSION_BOOL
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
OLAP_EXPRESSION_DATE
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
OLAP_EXPRESSION_TEXT
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
OLAP_TABLE
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
POWERMULTISET
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
POWERMULTISET_BY_CARDINALITY
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
QUALIFY
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
REGR_AVGX
|
AVG(IF(dep_var_expr is NULLOR ind_var_expr is NULL,NULL, ind_var_expr))
|
REGR_AVGY
|
AVG(IF(dep_var_expr is NULLOR ind_var_expr is NULL,NULL, dep_var_expr))
|
REGR_COUNT
|
SUM(IF(dep_var_expr is NULLOR ind_var_expr is NULL,NULL, 1))
|
REGR_INTERCEPT
|
AVG(dep_var_expr)
|
REGR_R2
|
(COUNT(dep_var_expr) *
|
REGR_SLOPE
|
COVAR_SAMP(ind_var_expr,
|
REGR_SXX
|
SUM(POWER(ind_var_expr, 2)) - COUNT(ind_var_expr) * POWER(AVG(ind_var_expr),2)
|
REGR_SXY
|
SUM(ind_var_expr*dep_var_expr) - COUNT(ind_var_expr) * AVG(ind) * AVG(dep_var_expr)
|
REGR_SYY
|
SUM(POWER(dep_var_expr, 2)) - COUNT(dep_var_expr) * POWER(AVG(dep_var_expr),2)
|
ROLLUP
|
ROLLUP
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
WM_CONCAT
|
STRING_AGG
|
ב-BigQuery יש פונקציות צבירה נוספות:
פונקציות אנליטיות
בטבלה הבאה מוצגים מיפויים בין פונקציות ניתוח ופונקציות ניתוח מצטברות נפוצות של Oracle לבין המקבילות שלהן ב-BigQuery.
| Oracle | BigQuery |
|---|---|
AVG
|
AVG
|
BIT_COMPLEMENT
|
אופרטור NOT ברמת הביט: ~ |
BIT_OR
|
BIT_OR, X | Y
|
BIT_XOR
|
BIT_XOR, X ^ Y
|
BITAND
|
BIT_AND, X & Y
|
BOOL_TO_INT
|
CAST(X AS INT64)
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
CUBE_TABLE
|
לא נתמך ב-BigQuery. כדאי להשתמש בכלי BI או בפונקציה מותאמת אישית (UDF) |
CUME_DIST
|
CUME_DIST
|
DENSE_RANK(ANSI)
|
DENSE_RANK
|
FEATURE_COMPARE
|
לא קיים באופן משתמע ב-BigQuery. שימוש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-BigQuery ML |
FEATURE_DETAILS
|
לא קיים באופן משתמע ב-BigQuery. שימוש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-BigQuery ML |
FEATURE_ID
|
לא קיים באופן משתמע ב-BigQuery. שימוש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-BigQuery ML |
FEATURE_SET
|
לא קיים באופן משתמע ב-BigQuery. שימוש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-BigQuery ML |
FEATURE_VALUE
|
לא קיים באופן משתמע ב-BigQuery. שימוש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-BigQuery ML |
FIRST_VALUE
|
FIRST_VALUE
|
HIER_CAPTION
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_CHILD_COUNT
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_COLUMN
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_DEPTH
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_DESCRIPTION
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_HAS_CHILDREN
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_LEVEL
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_MEMBER_NAME
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_ORDER
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
HIER_UNIQUE_MEMBER_NAME
|
אין תמיכה בשאילתות היררכיות ב-BigQuery. |
LAST_VALUE
|
LAST_VALUE
|
LAG
|
LAG
|
LEAD
|
LEAD
|
LISTAGG
|
ARRAY_AGG
|
MATCH_NUMBER
|
אפשר לבצע זיהוי דפוסים וחישובים באמצעות ביטויים רגולריים ופונקציות בהגדרת משתמש (UDF) ב-BigQuery |
MATCH_RECOGNIZE
|
אפשר לבצע זיהוי דפוסים וחישובים באמצעות ביטויים רגולריים ופונקציות בהגדרת משתמש (UDF) ב-BigQuery |
MAX
|
MAX
|
MEDIAN
|
PERCENTILE_CONT(x, 0.5 RESPECT NULLS) OVER()
|
MIN
|
MIN
|
NTH_VALUE
|
NTH_VALUE (value_expression, constant_integer_expression [{RESPECT | IGNORE} NULLS])
|
NTILE
|
NTILE(constant_integer_expression)
|
PERCENT_RANK
|
PERCENT_RANK
|
PERCENTILE_CONT
|
PERCENTILE_CONT
|
PERCENTILE_CONT
|
PERCENTILE_DISC
|
PRESENTNNV
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
PRESENTV
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
PREVIOUS
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
RANK(ANSI)
|
RANK
|
RATIO_TO_REPORT(expr) OVER (partition clause)
|
expr / SUM(expr) OVER (partition clause)
|
ROW_NUMBER
|
ROW_NUMBER
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP, STDDEV
|
SUM
|
SUM
|
VAR_POP
|
VAR_POP
|
VAR_SAMP
|
VAR_SAMP, VARIANCE
|
VARIANCE
|
VARIANCE()
|
WIDTH_BUCKET
|
אפשר להשתמש ב-UDF. |
פונקציות של תאריך/שעה
בטבלה הבאה מוצגים מיפויים בין פונקציות תאריך/שעה נפוצות של Oracle לבין המקבילות שלהן ב-BigQuery.
| Oracle | BigQuery |
|---|---|
ADD_MONTHS(date, integer)
|
DATE_ADD(date, INTERVAL integer MONTH), אם התאריך הוא TIMESTAMP, אפשר להשתמש ב-
|
CURRENT_DATE
|
CURRENT_DATE
|
CURRENT_TIME
|
CURRENT_TIME
|
CURRENT_TIMESTAMP
|
CURRENT_TIMESTAMP
|
DATE - k
|
DATE_SUB(date_expression, INTERVAL k DAY)
|
DATE + k
|
DATE_ADD(date_expression, INTERVAL k DAY)
|
DBTIMEZONE
|
BigQuery לא תומך באזור הזמן של מסד הנתונים. |
EXTRACT
|
EXTRACT(DATE), EXTRACT(TIMESTAMP)
|
LAST_DAY
|
DATE_SUB(
|
LOCALTIMESTAMP
|
ב-BigQuery אין תמיכה בהגדרות אזור הזמן. |
MONTHS_BETWEEN
|
DATE_DIFF(date_expression, date_expression, MONTH)
|
NEW_TIME
|
DATE(timestamp_expression, time zone)
|
NEXT_DAY
|
DATE_ADD(
|
SYS_AT_TIME_ZONE
|
CURRENT_DATE([time_zone])
|
SYSDATE
|
CURRENT_DATE()
|
SYSTIMESTAMP
|
CURRENT_TIMESTAMP()
|
TO_DATE
|
PARSE_DATE
|
TO_TIMESTAMP
|
PARSE_TIMESTAMP
|
TO_TIMESTAMP_TZ
|
PARSE_TIMESTAMP
|
TZ_OFFSET
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית (UDF). |
WM_CONTAINSWM_EQUALSWM_GREATERTHANWM_INTERSECTIONWM_LDIFFWM_LESSTHANWM_MEETSWM_OVERLAPSWM_RDIFF |
ב-BigQuery לא משתמשים בנקודות. אפשר להשתמש בפונקציות UDF כדי להשוות בין שתי תקופות. |
ב-BigQuery יש פונקציות נוספות של תאריך/שעה:
CURRENT_DATETIMEDATE_FROM_UNIX_DATEDATE_TRUNCDATETIMEDATETIME_ADDDATETIME_DIFFDATETIME_SUBDATETIME_TRUNCFORMAT_DATEFORMAT_DATETIME
פונקציות של מחרוזות
בטבלה הבאה מוצג המיפוי בין פונקציות המחרוזת של Oracle לבין הפונקציות המקבילות ב-BigQuery:
| Oracle | BigQuery |
|---|---|
ASCII
|
TO_CODE_POINTS(string_expr)[OFFSET(0)]
|
ASCIISTR
|
BigQuery לא תומך ב-UTF-16 |
RAWTOHEX
|
TO_HEX
|
LENGTH
|
CHAR_LENGTH
|
LENGTH
|
CHARACTER_LENGTH
|
CHR
|
CODE_POINTS_TO_STRING(
|
COLLATION
|
לא קיים ב-BigQuery. BigQuery לא תומך ב-COLLATE ב-DML |
COMPOSE
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
CONCAT, (|| operator)
|
CONCAT
|
DECOMPOSE
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
ESCAPE_REFERENCE (UTL_I18N)
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה בהגדרת המשתמש (UDF). |
INITCAP
|
INITCAP
|
INSTR/INSTR2/INSTR4/INSTRB/INSTRC
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
LENGTH/LENGTH2/LENGTH4/LENGTHB/LENGTHC
|
LENGTH
|
LOWER
|
LOWER
|
LPAD
|
LPAD
|
LTRIM
|
LTRIM
|
NLS_INITCAP
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
NLS_LOWER
|
LOWER
|
NLS_UPPER
|
UPPER
|
NLSSORT
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
POSITION
|
STRPOS(string, substring)
|
PRINTBLOBTOCLOB
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. |
REGEXP_COUNT
|
ARRAY_LENGTH(REGEXP_EXTRACT_ALL(value, regex))
|
REGEXP_INSTR
|
STRPOS(source_string, REGEXP_EXTRACT(source_string, regexp_string))
הערה: הפונקציה מחזירה את המופע הראשון. |
REGEXP_REPLACE
|
REGEXP_REPLACE
|
REGEXP_LIKE
|
IF(REGEXP_CONTAINS,1,0)
|
REGEXP_SUBSTR
|
REGEXP_EXTRACT, REGEXP_EXTRACT_ALL
|
REPLACE
|
REPLACE
|
REVERSE
|
REVERSE
|
RIGHT
|
SUBSTR(source_string, -1, length)
|
RPAD
|
RPAD
|
RTRIM
|
RTRIM
|
SOUNDEX
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית (UDF) |
STRTOK
|
SPLIT(instring, delimiter)[ORDINAL(tokennum)]
|
SUBSTR/SUBSTRB/SUBSTRC/SUBSTR2/SUBSTR4
|
SUBSTR
|
TRANSLATE
|
REPLACE
|
TRANSLATE USING
|
REPLACE
|
TRIM
|
TRIM
|
UNISTR
|
CODE_POINTS_TO_STRING
|
UPPER
|
UPPER
|
|| (עמודות אנכיות)
|
CONCAT
|
ב-BigQuery יש פונקציות נוספות של מחרוזות:
BYTE_LENGTHCODE_POINTS_TO_BYTESENDS_WITHFROM_BASE32FROM_BASE64FROM_HEXNORMALIZENORMALIZE_AND_CASEFOLDREPEATSAFE_CONVERT_BYTES_TO_STRINGSPLITSTARTS_WITHSTRPOSTO_BASE32TO_BASE64TO_CODE_POINTS
פונקציות מתמטיות
בטבלה הבאה מוצג המיפוי בין פונקציות מתמטיות של Oracle לבין הפונקציות המקבילות ב-BigQuery.
| Oracle | BigQuery |
|---|---|
ABS
|
ABS
|
ACOS
|
ACOS
|
ACOSH
|
ACOSH
|
ASIN
|
ASIN
|
ASINH
|
ASINH
|
ATAN
|
ATAN
|
ATAN2
|
ATAN2
|
ATANH
|
ATANH
|
CEIL
|
CEIL
|
CEILING
|
CEILING
|
COS
|
COS
|
COSH
|
COSH
|
EXP
|
EXP
|
FLOOR
|
FLOOR
|
GREATEST
|
GREATEST
|
LEAST
|
LEAST
|
LN
|
LN
|
LNNVL
|
שימוש עם ISNULL
|
LOG
|
LOG
|
MOD (% operator)
|
MOD
|
POWER (** operator)
|
POWER, POW
|
DBMS_RANDOM.VALUE
|
RAND
|
RANDOMBYTES
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית שמוגדרת על ידי המשתמש (UDF) ובפונקציה RAND |
RANDOMINTEGER
|
CAST(FLOOR(10*RAND()) AS INT64)
|
RANDOMNUMBER
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית שמוגדרת על ידי המשתמש (UDF) ובפונקציה RAND |
REMAINDER
|
MOD
|
ROUND
|
ROUND
|
ROUND_TIES_TO_EVEN
|
ROUND()
|
SIGN
|
SIGN
|
SIN
|
SIN
|
SINH
|
SINH
|
SQRT
|
SQRT
|
STANDARD_HASH
|
FARM_FINGERPRINT, MD5, SHA1, SHA256, SHA512
|
STDDEV
|
STDDEV |
TAN
|
TAN
|
TANH
|
TANH
|
TRUNC
|
TRUNC
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
ב-BigQuery יש פונקציות מתמטיות נוספות:
פונקציות להמרת סוגים
בטבלה הבאה מוצג המיפוי בין פונקציות המרת הטיפוסים של Oracle לבין הפונקציות המקבילות ב-BigQuery.
| Oracle | BigQuery | |
|---|---|---|
BIN_TO_NUM
|
SAFE_CONVERT_BYTES_TO_STRING(value)
|
|
BINARY2VARCHAR
|
SAFE_CONVERT_BYTES_TO_STRING(value)
|
|
CAST
|
CAST(expr AS typename)
|
|
CHARTOROWID
|
לא צריך את Oracle ספציפית. | |
CONVERT
|
ב-BigQuery אין תמיכה בקבוצות תווים. כדאי להשתמש בפונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. | |
EMPTY_BLOB
|
השדה BLOB לא נמצא בשימוש ב-BigQuery.
|
|
EMPTY_CLOB
|
השדה CLOB לא נמצא בשימוש ב-BigQuery.
|
|
FROM_TZ
|
סוגים עם אזורי זמן לא נתמכים ב-BigQuery. כדאי להשתמש בפונקציה בהגדרת המשתמש (UDF) וב-FORMAT_TIMESTAMP | |
INT_TO_BOOL
|
CAST
|
|
IS_BIT_SET
|
לא קיים באופן משתמע ב-BigQuery. כדאי להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) | |
NCHR
|
אפשר להשתמש ב-UDF כדי לקבל תו מקביל לבינארי | |
NUMTODSINTERVAL
|
סוג הנתונים INTERVAL לא נתמך ב-BigQuery
|
|
NUMTOHEX
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה TO_HEX ובפונקציה מותאמת אישית שמוגדרת על ידי המשתמש (UDF)
|
|
NUMTOHEX2
|
||
NUMTOYMINTERVAL
|
סוג הנתונים INTERVAL לא נתמך ב-BigQuery.
|
|
RAW_TO_CHAR
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAW_TO_NCHAR
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAW_TO_VARCHAR2
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAWTOHEX
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAWTONHEX
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAWTONUM
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAWTONUM2
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
RAWTOREF
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
REFTOHEX
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
REFTORAW
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
ROWIDTOCHAR
|
ROWID הוא סוג ספציפי של Oracle ולא קיים ב-BigQuery. הערך הזה צריך להיות מיוצג כמחרוזת.
|
|
ROWIDTONCHAR
|
ROWID הוא סוג ספציפי של Oracle ולא קיים ב-BigQuery. הערך הזה צריך להיות מיוצג כמחרוזת.
|
|
SCN_TO_TIMESTAMP
|
SCN הוא סוג ספציפי של Oracle והוא לא קיים ב-BigQuery. הערך הזה צריך להיות מיוצג כחותמת זמן.
|
|
TO_ACLIDTO_TIMESTAMP TO_TIMESTAMP_TZ TO_TIME_TZ TO_UTC_TIMEZONE_TZ TO_YMINTERVAL |
CAST(expr AS typename)PARSE_DATEPARSE_TIMESTAMPתחביר ההמרה משמש בשאילתה כדי לציין שצריך להמיר את סוג התוצאה של ביטוי לסוג אחר. |
|
TREAT
|
ספציפי ל-Oracle, לא קיים ב-BigQuery. | |
VALIDATE_CONVERSION
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית (UDF) | |
VSIZE
|
לא נתמך ב-BigQuery. כדאי להשתמש בפונקציה מותאמת אישית (UDF) | |
פונקציות JSON
בטבלה הבאה מוצג המיפוי בין פונקציות JSON של Oracle לבין הפונקציות המקבילות ב-BigQuery.
| Oracle | BigQuery |
|---|---|
AS_JSON
|
TO_JSON_STRING(value[, pretty_print])
|
JSON_ARRAY
|
כדאי להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) ובפונקציה TO_JSON_STRING
|
JSON_ARRAYAGG
|
כדאי להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) ובפונקציה TO_JSON_STRING
|
JSON_DATAGUIDE
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
JSON_EQUAL
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
JSON_EXIST
|
כדאי להשתמש בפונקציות UDF וב-JSON_EXTRACT או ב-JSON_EXTRACT_SCALAR
|
JSON_MERGEPATCH
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
JSON_OBJECT
|
לא נתמך ב-BigQuery. |
JSON_OBJECTAGG
|
לא נתמך ב-BigQuery. |
JSON_QUERY
|
כדאי להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-JSON_EXTRACT או ב-JSON_EXTRACT_SCALAR.
|
JSON_TABLE
|
פונקציה בהגדרת המשתמש (UDF) בהתאמה אישית. |
JSON_TEXTCONTAINS
|
כדאי להשתמש בפונקציות מוגדרות על ידי המשתמש (UDF) וב-JSON_EXTRACT או ב-JSON_EXTRACT_SCALAR.
|
JSON_VALUE
|
JSON_EXTRACT_SCALAR
|
פונקציות XML
ב-BigQuery אין פונקציות XML מרומזות. אפשר לטעון XML ל-BigQuery כמחרוזת ולהשתמש בפונקציות UDF כדי לנתח XML. לחלופין, אפשר לעבד את קובצי ה-XML באמצעות כלי ETL/ELT כמו Dataflow. ברשימה הבאה מוצגות פונקציות XML של Oracle:
| Oracle | BigQuery |
|---|---|
DELETEXML
|
כדי לעבד XML, אפשר להשתמש ב-UDFs של BigQuery או בכלי ETL כמו Dataflow. |
ENCODE_SQL_XML | |
EXISTSNODE | |
EXTRACTCLOBXML | |
EXTRACTVALUE | |
INSERTCHILDXML | |
INSERTCHILDXMLAFTER | |
INSERTCHILDXMLBEFORE | |
INSERTXMLAFTER | |
INSERTXMLBEFORE | |
SYS_XMLAGG | |
SYS_XMLANALYZE | |
SYS_XMLCONTAINS | |
SYS_XMLCONV | |
SYS_XMLEXNSURI | |
SYS_XMLGEN | |
SYS_XMLI_LOC_ISNODE | |
SYS_XMLI_LOC_ISTEXT | |
SYS_XMLINSTR | |
SYS_XMLLOCATOR_GETSVAL | |
SYS_XMLNODEID | |
SYS_XMLNODEID_GETLOCATOR | |
SYS_XMLNODEID_GETOKEY | |
SYS_XMLNODEID_GETPATHID | |
SYS_XMLNODEID_GETPTRID | |
SYS_XMLNODEID_GETRID | |
SYS_XMLNODEID_GETSVAL | |
SYS_XMLT_2_SC | |
SYS_XMLTRANSLATE | |
SYS_XMLTYPE2SQL | |
UPDATEXML | |
XML2OBJECT | |
XMLCAST | |
XMLCDATA | |
XMLCOLLATVAL | |
XMLCOMMENT | |
XMLCONCAT | |
XMLDIFF | |
XMLELEMENT | |
XMLEXISTS | |
XMLEXISTS2 | |
XMLFOREST | |
XMLISNODE | |
XMLISVALID | |
XMLPARSE | |
XMLPATCH | |
XMLPI | |
XMLQUERY | |
XMLQUERYVAL | |
XMLSERIALIZE | |
XMLTABLE | |
XMLTOJSON | |
XMLTRANSFORM | |
XMLTRANSFORMBLOB | |
XMLTYPE |
פונקציות של למידת מכונה
פונקציות למידת המכונה (ML) ב-Oracle וב-BigQuery שונות.
ב-Oracle נדרשים חבילת ניתוח מתקדם ורישיונות כדי להפעיל למידת מכונה במסד הנתונים.
Oracle משתמשת בחבילה DBMS_DATA_MINING ללמידת מכונה. כדי להמיר משימות של Oracle Data Miner, צריך לשכתב את הקוד כך שיעבוד עם התכונות של BigQuery.
אתם יכולים לבחור מתוך מגוון רחב של מוצרי Google AI, כולל המוצרים והתכונות הבאים:
אתם יכולים להשתמש ב-BigQuery ML או בכלי הפיתוח של Agent Platform כדי לפתח, לאמן ולהעריך מודלים של למידת מכונה.
בטבלה הבאה מוצגות פונקציות של Oracle ML:
| Oracle | BigQuery |
|---|---|
CLASSIFIER
|
אפשרויות לסיווג ולרגרסיה של למידת מכונה מפורטות במאמר BigQuery ML. |
CLUSTER_DETAILS
|
|
CLUSTER_DISTANCE
|
|
CLUSTER_ID
|
|
CLUSTER_PROBABILITY
|
|
CLUSTER_SET
|
|
PREDICTION
|
|
PREDICTION_BOUNDS
|
|
PREDICTION_COST
|
|
PREDICTION_DETAILS
|
|
PREDICTION_PROBABILITY
|
|
PREDICTION_SET
|
פונקציות אבטחה
בטבלה הבאה מוצגות הפונקציות לזיהוי המשתמש ב-Oracle וב-BigQuery:
| Oracle | BigQuery |
|---|---|
UID
|
SESSION_USER
|
USER/SESSION_USER/CURRENT_USER
|
SESSION_USER()
|
פונקציות של קבוצות או מערכים
בטבלה הבאה מוצגות פונקציות של קבוצות או מערכים ב-Oracle והמקבילות שלהן ב-BigQuery:
| Oracle | BigQuery |
|---|---|
MULTISET
|
ARRAY_AGG
|
MULTISET EXCEPT
|
ARRAY_AGG([DISTINCT] expression)
|
MULTISET INTERSECT
|
ARRAY_AGG([DISTINCT])
|
MULTISET UNION
|
ARRAY_AGG
|
פונקציות אנליטיות (window functions)
בטבלה הבאה מוצגות פונקציות אנליטיות ב-Oracle והמקבילות שלהן ב-BigQuery.
| Oracle | BigQuery |
|---|---|
LAG
|
LAG (value_expression[, offset [, default_expression]])
|
LEAD
|
LEAD (value_expression[, offset [, default_expression]])
|
שאילתות היררכיות או רקורסיביות
ב-BigQuery לא משתמשים בשאילתות היררכיות או רקורסיביות. אם עומק ההיררכיה ידוע, אפשר להשיג פונקציונליות דומה באמצעות צירופים, כמו בדוגמה הבאה. פתרון אחר הוא להשתמש ב-BigQueryStorage API וב-Spark.
select
array(
select e.update.element
union all
select c1 from e.update.element.child as c1
union all
select c2 from e.update.element.child as c1, c1.child as c2
union all
select c3 from e.update.element.child as c1, c1.child as c2, c2.child as c3
union all
select c4 from e.update.element.child as c1, c1.child as c2, c2.child as c3, c3.child as c4
union all
select c5 from e.update.element.child as c1, c1.child as c2, c2.child as c3, c3.child as c4, c4.child as c5
) as flattened,
e as event
from t, t.events as e
בטבלה הבאה מוצגות פונקציות היררכיות ב-Oracle.
| Oracle | BigQuery |
|---|---|
DEPTH
|
ב-BigQuery לא משתמשים בשאילתות היררכיות. |
PATH
|
|
SYS_CONNECT_BY_PATH (hierarchical)
|
פונקציות UTL
UTL_File
משמש בעיקר לקריאה ולכתיבה של קובצי מערכת ההפעלה מ-PL/SQL. אפשר להשתמש ב-Cloud Storage לכל סוג של אחסון קבצים גולמיים.
כדי לקרוא ולכתוב קבצים מ-Cloud Storage ואליו, צריך להשתמש בטבלאות חיצוניות ובטעינה וייצוא של BigQuery. מבוא למקורות נתונים חיצוניים
פונקציות מרחביות
אתם יכולים להשתמש בניתוח נתונים גיאו-מרחביים ב-BigQuery כדי להחליף את הפונקציונליות המרחבית. יש SDO_* פונקציות וסוגים ב-Oracle, כמו SDO_GEOM_KEY, SDO_GEOM_MBR ו-SDO_GEOM_MMB. הפונקציות האלה משמשות לניתוח מרחבי. אתם יכולים להשתמש בניתוח נתונים גיאו-מרחביים כדי לבצע ניתוח מרחבי.
תחביר DML
בקטע הזה נתייחס להבדלים בתחביר של שפת ניהול הנתונים בין Oracle ל-BigQuery.
הצהרה של INSERT
רוב ההצהרות של Oracle INSERT תואמות ל-BigQuery. בטבלה הבאה מפורטים החריגים.
לסקריפטים של DML ב-BigQuery יש סמנטיקה של עקביות שונה במקצת מההצהרות המקבילות ב-Oracle. לסקירה כללית על בידוד snapshot ועל הטיפול בסשנים ובעסקאות, קראו את CREATE [UNIQUE] INDEX
section במקום אחר במסמך הזה.
| Oracle | BigQuery |
|---|---|
INSERT INTO table VALUES (...);
|
INSERT INTO table (...) VALUES (...);
ב-Oracle יש מילת מפתח
הערה: ב-BigQuery, השמטת שמות העמודות בהצהרה |
INSERT INTO table VALUES (1,2,3);
|
INSERT INTO table VALUES (1,2,3),
(4,5,6),
BigQuery מטיל מכסות DML, שמגבילות את הקצב ואת מספר פקודות ה-DML שאפשר להריץ בו-זמנית בכל טבלה. כדי לנצל את המכסה בצורה הטובה ביותר, כדאי להשתמש בגישות הבאות:
|
הצהרה של UPDATE
הצהרות UPDATE של Oracle תואמות ברובן ל-BigQuery, אבל ב-BigQuery ההצהרה UPDATE חייבת לכלול סעיף WHERE.
מומלץ להשתמש בפקודות DML באצווה במקום בכמה פקודות UPDATE ו-INSERT בודדות. לסקריפטים של DML ב-BigQuery יש סמנטיקה של עקביות ששונה קצת מהצהרות מקבילות ב-Oracle.
לסקירה כללית על בידוד snapshot ועל הטיפול בסשנים ובעסקאות, אפשר לעיין בקטע CREATE INDEX במסמך הזה.
בטבלה הבאה מוצגות הצהרות של Oracle UPDATE והצהרות של BigQuery שמבצעות את אותן משימות.
ב-BigQuery, ההצהרה UPDATE חייבת לכלול את הסעיף WHERE.
למידע נוסף על UPDATE ב-BigQuery, קראו את הדוגמאות ל-UPDATE ב-BigQuery במסמכי התיעוד של DML.
הצהרות DELETE ו-TRUNCATE
ההצהרות DELETE ו-TRUNCATE הן שתי דרכים להסיר שורות מטבלה בלי להשפיע על הסכימה של הטבלה. השדה TRUNCATE לא נמצא בשימוש ב-BigQuery.
עם זאת, אפשר להשתמש בהצהרות DELETE כדי להשיג את אותה תוצאה.
ב-BigQuery, ההצהרה DELETE חייבת לכלול את הסעיף WHERE.
למידע נוסף על DELETE ב-BigQuery, קראו את הדוגמאות של DELETE ב-BigQuery במסמכי התיעוד של DML.
| Oracle | BigQuery |
|---|---|
DELETE database.table;
|
DELETE FROM table WHERE TRUE;
|
הצהרה של MERGE
ההצהרה MERGE יכולה לשלב את הפעולות INSERT, UPDATE ו-DELETE בהצהרת UPSERT אחת, ולבצע את הפעולות באופן אטומי. הפעולה MERGE חייבת להתאים לכל היותר לשורת מקור אחת לכל שורת יעד.
גם BigQuery וגם Oracle פועלים לפי תחביר ANSI.
עם זאת, לסקריפטים של DML ב-BigQuery יש סמנטיקה של עקביות שונה במקצת מההצהרות המקבילות ב-Oracle.
תחביר DDL
בקטע הזה נסביר על ההבדלים בתחביר של שפת הגדרת הנתונים (DDL) בין Oracle ל-BigQuery.
הצהרה של CREATE TABLE
רוב ההצהרות של Oracle CREATE TABLE תואמות ל-BigQuery, חוץ מהאילוצים ורכיבי התחביר הבאים שלא משתמשים בהם ב-BigQuery:
STORAGETABLESPACEDEFAULTGENERATED ALWAYS ASENCRYPTPRIMARY KEY (col, ...). מידע נוסף זמין במאמרCREATE INDEX.UNIQUE INDEX. מידע נוסף זמין במאמרCREATE INDEX.CONSTRAINT..REFERENCESDEFAULTPARALLELCOMPRESS
למידע נוסף על CREATE TABLE ב-BigQuery, קראו את הדוגמאות של CREATE TABLE ב-BigQuery.
אפשרויות ומאפיינים של עמודות
עמודות זהות נוספו בגרסת Oracle 12c, והן מאפשרות הגדלה אוטומטית של עמודה. האפשרות הזו לא קיימת ב-BigQuery, אבל אפשר להשיג את אותה תוצאה באמצעות הפעולה הבאה באצווה. למידע נוסף על מפתחות חלופיים ועל מאפיינים שמשתנים לאט (SCD), אפשר לעיין במדריכים הבאים:
| Oracle | BigQuery |
|---|---|
CREATE TABLE table (
|
INSERT INTO dataset.table SELECT
|
תגובות בעמודה
ב-Oracle משתמשים בתחביר Comment כדי להוסיף הערות לעמודות. אפשר להטמיע את התכונה הזו באופן דומה ב-BigQuery באמצעות תיאור העמודה, כפי שמוצג בטבלה הבאה:
| Oracle | BigQuery |
|---|---|
Comment on column table is 'column desc';
|
CREATE TABLE dataset.table (
|
טבלאות זמניות
Oracle תומך בטבלאות זמניות, שמשמשות לעיתים קרובות לאחסון תוצאות ביניים בסקריפטים. ב-BigQuery יש תמיכה בטבלאות זמניות.
| Oracle | BigQuery |
|---|---|
CREATE GLOBAL TEMPORARY TABLE
|
CREATE TEMP TABLE temp_tab
|
הרכיבים הבאים של Oracle לא נמצאים בשימוש ב-BigQuery:
ON COMMIT DELETE ROWS;ON COMMIT PRESERVE ROWS;
יש עוד כמה דרכים לדמות טבלאות זמניות ב-BigQuery:
- אורך חיים (TTL) של קבוצת נתונים: יוצרים קבוצת נתונים עם אורך חיים קצר (לדוגמה, שעה אחת) כדי שכל הטבלאות שנוצרות בקבוצת הנתונים יהיו זמניות (כי הן לא יישמרו מעבר לאורך החיים של קבוצת הנתונים). כדי לציין בבירור שהטבלאות זמניות, אפשר להוסיף את הקידומת
tempלכל שמות הטבלאות במערך הנתונים הזה. Table TTL: יצירת טבלה עם זמן חיים קצר שספציפי לטבלה, באמצעות הצהרות DDL שדומות להצהרות הבאות:
CREATE TABLE temp.name (col1, col2, ...)
OPTIONS(expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 HOUR));הסעיף
WITH: אם צריך טבלה זמנית רק באותו בלוק, משתמשים בתוצאה זמנית באמצעות הצהרה או שאילתת משנה שלWITH.
הצהרה של CREATE SEQUENCE
ב-BigQuery לא משתמשים ברצפים, אבל אפשר להשיג את אותה תוצאה באמצעות השיטה הבאה לעיבוד באצווה. למידע נוסף על מפתחות פונדקאיים ומאפיינים שמשתנים לאט (SCD), אפשר לעיין במדריכים הבאים:
INSERT INTO dataset.table
SELECT *,
ROW_NUMBER() OVER () AS id
FROM dataset.table
הצהרה של CREATE VIEW
בטבלה הבאה מוצגים המקבילים בין Oracle ל-BigQuery להצהרה CREATE VIEW.
| Oracle | BigQuery | הערות |
|---|---|---|
CREATE VIEW view_name AS SELECT ...
|
CREATE VIEW view_name AS SELECT ...
|
|
CREATE OR REPLACE VIEW view_name AS SELECT ...
|
CREATE OR REPLACE VIEW
view_name AS
SELECT ...
|
|
| לא נתמך | CREATE VIEW IF NOT EXISTS
view_name
OPTIONS(view_option_list)
AS SELECT ...
|
יוצר תצוגה חדשה רק אם התצוגה לא קיימת כרגע במערך הנתונים שצוין. |
הצהרה של CREATE MATERIALIZED VIEW
ב-BigQuery, פעולות הרענון של תצוגות מהותיות מתבצעות באופן אוטומטי. אין צורך לציין אפשרויות רענון (לדוגמה, בזמן commit או לפי לוח זמנים) ב-BigQuery. מידע נוסף זמין במאמר מבוא לתצוגות חומריות.
אם מסד הנתונים הטבלאי משתנה כל הזמן רק באמצעות הוספות, השאילתה שמשתמשת בתצוגה המהותית (בין אם התצוגה מאוזכרת באופן מפורש או נבחרת על ידי הכלי לאופטימיזציה של שאילתות) סורקת את כל התצוגה המהותית, וגם דלתא במסד הנתונים הטבלאי מאז הרענון האחרון של התצוגה. המשמעות היא שהשאילתות מהירות וזולות יותר.
לעומת זאת, אם היו עדכונים (DML UPDATE / MERGE) או מחיקות (DML DELETE, חיתוך, תפוגת תוקף של מחיצה) במסד הנתונים הטבלאי מאז הרענון האחרון של התצוגה, התצוגה המהותית לא נסרקת ולכן השאילתה לא חוסכת בעלויות עד לרענון הבא של התצוגה. בעיקרון, כל עדכון או מחיקה במסד הנתונים הטבלאי מבטלים את התוקף של מצב התצוגה המהותית.
בנוסף, הנתונים ממאגר הנתונים (buffer) של הסטרימינג של מסד הנתונים הטבלאי לא נשמרים בתצוגה המהותית. מאגר הנתונים הזמני (buffer) של הסטרימינג עדיין נסרק במלואו, גם אם משתמשים בתצוגה המהותית.
בטבלה הבאה מוצגים המקבילים בין Oracle ל-BigQuery להצהרה CREATE MATERIALIZED VIEW.
| Oracle | BigQuery | הערות |
|---|---|---|
CREATE MATERIALIZED VIEW view_name
|
CREATE MATERIALIZED VIEW
|
הצהרה של CREATE [UNIQUE] INDEX
בקטע הזה מתוארות גישות ב-BigQuery ליצירת פונקציונליות שדומה לאינדקסים ב-Oracle.
הוספה לאינדקס לשיפור הביצועים
ב-BigQuery אין צורך באינדקסים מפורשים, כי זהו מסד נתונים מבוסס-עמודות עם אופטימיזציה של שאילתות ואחסון. ב-BigQuery יש פונקציות כמו חלוקה למחיצות ואשכולות וגם שדות בתצוגת עץ, שיכולות לשפר את היעילות והביצועים של השאילתות באמצעות אופטימיזציה של אופן אחסון הנתונים.
הוספה לאינדקס לצורך עקביות (UNIQUE, PRIMARY INDEX)
ב-Oracle, אפשר להשתמש באינדקס ייחודי כדי למנוע שורות עם מפתחות לא ייחודיים בטבלה. אם תהליך מנסה להוסיף או לעדכן נתונים עם ערך שכבר קיים באינדקס, הפעולה נכשלת בגלל הפרת אינדקס.
ב-BigQuery אין אינדקסים מפורשים, ולכן אפשר להשתמש בהצהרת MERGE כדי להוסיף רק רשומות ייחודיות לטבלת יעד מטבלת ביניים, תוך התעלמות מרשומות כפולות. עם זאת, אין דרך למנוע ממשתמש עם הרשאות עריכה להוסיף רשומה כפולה.
כדי ליצור שגיאה ברשומות כפולות ב-BigQuery, אפשר להשתמש בהצהרת MERGE מטבלת ה-staging, כמו בדוגמה הבאה:
| Oracle | BigQuery | |
|---|---|---|
CREATE [UNIQUE] INDEX name;
|
MERGE `prototype.FIN_MERGE` t \
|
|
בדרך כלל, המשתמשים מעדיפים להסיר כפילויות בעצמם כדי למצוא שגיאות במערכות במורד הזרם.
BigQuery לא תומך בעמודות DEFAULT ו-IDENTITY (רצפים).
מתבצעת נעילה
ב-BigQuery אין מנגנון נעילה כמו ב-Oracle, ואפשר להריץ בו שאילתות בו-זמנית (עד המכסה). רק לפקודות DML יש מגבלות מסוימות על בו-זמניות, ויכול להיות שבתרחישים מסוימים הן ידרשו נעילת טבלה במהלך הביצוע.
הצהרות SQL פרוצדורליות
בקטע הזה מוסבר איך להמיר הצהרות SQL פרוצדורליות שמשמשות בפרוצדורות, בפונקציות ובטריגרים מאוחסנים מ-Oracle ל-BigQuery.
הצהרה של CREATE PROCEDURE
הפרוצדורה המאוחסנת נתמכת כחלק מגרסת הבטא של BigQuery Scripting.
| Oracle | BigQuery | הערות |
|---|---|---|
CREATE PROCEDURE
|
CREATE PROCEDURE
|
בדומה ל-Oracle, ב-BigQuery יש תמיכה ב-IN, OUT, INOUT מצבי ארגומנטים. מפרטי תחביר אחרים לא נתמכים ב-BigQuery.
|
CREATE OR REPLACE PROCEDURE
|
CREATE OR REPLACE PROCEDURE
|
|
CALL
|
CALL
|
בקטעים הבאים מתוארות דרכים להמיר הצהרות פרוצדורליות קיימות של Oracle להצהרות סקריפטים של BigQuery עם פונקציונליות דומה.
הצהרה של CREATE TRIGGER
ב-BigQuery לא משתמשים בטריגרים. לוגיקת האפליקציה שמבוססת על שורות צריכה להיות מטופלת בשכבת האפליקציה. אפשר להפעיל את הפונקציונליות של הטריגר באמצעות כלי ההטמעה, Pub/Sub ו/או פונקציות Cloud Run במהלך ההטמעה או באמצעות סריקות קבועות.
הצהרה על משתנה והקצאה
בטבלה הבאה מוצגות הצהרות DECLARE ב-Oracle וההצהרות המקבילות להן ב-BigQuery.
| Oracle | BigQuery |
|---|---|
DECLARE
|
DECLARE L_VAR int64;
|
SET var = value;
|
SET var = value;
|
הצהרות ופעולות של סמן
ב-BigQuery אין תמיכה בסמנים, ולכן ההצהרות הבאות לא משמשות ב-BigQuery:
DECLARE cursor_name CURSOR [FOR | WITH] ...OPEN CUR_VAR FOR sql_str;OPEN cursor_name [USING var, ...];FETCH cursor_name INTO var, ...;CLOSE cursor_name;
הצהרות SQL דינמיות
הצהרת ה-SQL הדינמית הבאה של Oracle והמקבילה שלה ב-BigQuery:
| Oracle | BigQuery |
|---|---|
EXECUTE IMMEDIATE
sql_str
|
EXECUTE IMMEDIATE
|
הצהרות של בקרת זרימה
בטבלה הבאה מוצגות הצהרות בקרת זרימה של Oracle והמקבילות שלהן ב-BigQuery.
| Oracle | BigQuery |
|---|---|
IF condition THEN
|
IF condition THEN
|
SET SERVEROUTPUT ON;
|
DECLARE x INT64 DEFAULT 0;
|
LOOP
|
LOOP
|
WHILE boolean_expression DO
|
WHILE boolean_expression DO
|
FOR LOOP
|
השדה FOR LOOP לא נמצא בשימוש ב-BigQuery. משתמשים בהצהרות LOOP אחרות.
|
BREAK
|
BREAK
|
CONTINUE
|
CONTINUE
|
CONTINUE/EXIT WHEN
|
צריך להשתמש ב-CONTINUE עם התנאי IF.
|
GOTO
|
ההצהרה GOTO לא קיימת ב-BigQuery. צריך להשתמש בתנאי IF.
|
הצהרות SQL של מטא-נתונים ועסקאות
| Oracle | BigQuery |
|---|---|
GATHER_STATS_JOB
|
עדיין לא בשימוש ב-BigQuery. |
LOCK TABLE table_name IN [SHARE/EXCLUSIVE] MODE NOWAIT;
|
עדיין לא בשימוש ב-BigQuery. |
Alter session set isolation_level=serializable; /
|
ב-BigQuery תמיד נעשה שימוש בבידוד snapshot. לפרטים נוספים, ראו הבטחות עקביות ורמת בידוד של טרנזקציה במאמר הזה. |
EXPLAIN PLAN ...
|
לא בשימוש ב-BigQuery.
תכונות דומות הן הסבר על תוכנית לביצוע שאילתה בממשק המשתמש של BigQuery באינטרנט והקצאת יחידות קיבולת (Slot), ורישום ביומן ביקורת ב-Stackdriver. |
SELECT * FROM DBA_[*];
(תצוגות Oracle DBA_/ALL_/V$ ) |
SELECT * FROM mydataset.INFORMATION_SCHEMA.TABLES;
למידע נוסף, קראו את המאמר מבוא ל-INFORMATION_SCHEMA ב-BigQuery. |
SELECT * FROM GV$SESSION;
|
ב-BigQuery אין את הקונספט המסורתי של סשן. אפשר לראות את משימות השאילתות בממשק המשתמש או לייצא את יומני הביקורת של Stackdriver ל-BigQuery ולנתח את יומני BigQuery כדי לנתח את המשימות. מידע נוסף זמין במאמר הצגת פרטי המשימה. |
START TRANSACTION;
|
החלפת התוכן של טבלה בפלט של שאילתה שקולה לעסקה. אפשר לעשות את זה באמצעות פעולת שאילתה או העתקה.
באמצעות שאילתה:
שימוש בעותק:
|
הצהרות SQL עם מספר הצהרות ומספר שורות
גם Oracle וגם BigQuery תומכים בטרנזקציות (סשנים), ולכן תומכים בהצהרות שמופרדות בנקודה ופסיק ומבוצעות יחד באופן עקבי. מידע נוסף מופיע במאמר טרנזקציות עם כמה הצהרות.
קודי שגיאה והודעות
קודי השגיאה של Oracle שונים מקודי השגיאה של BigQuery. אם לוגיקת האפליקציה שלכם תופסת כרגע את השגיאות, נסו לבטל את מקור השגיאה, כי BigQuery לא מחזיר את אותם קודי שגיאה.
התחייבויות לעקביות ורמת בידוד של טרנזקציה
גם Oracle וגם BigQuery הם אטומיים – כלומר, תואמים ל-ACID ברמת המוטציה על פני שורות רבות. לדוגמה, פעולת MERGE היא אטומית, גם אם מוסיפים ומעדכנים כמה ערכים.
טרנזקציות
Oracle מספקת רמות בידוד של טרנזקציות מסוג read committed או serializable. יכול להיות שיהיו מבויים סתומים. משימות הוספה של Oracle פועלות באופן עצמאי.
ב-BigQuery אפשר גם לבצע טרנזקציות.
בעזרת BigQuery אפשר להבטיח בקרת בו-זמניות אופטימית (הראשון שמבצע commit מנצח) עם בידוד snapshot, שבו שאילתה קוראת את הנתונים האחרונים שבוצע להם commit לפני שהשאילתה מתחילה. הגישה הזו מבטיחה את אותה רמת עקביות לכל שורה, לכל מוטציה ובכל השורות באותה פקודת DML, אבל מונעת מבוי סתום. אם יש כמה הצהרות UPDATE באותה טבלה, BigQuery עובר לבקרת בו-זמניות פסימית ומוסיף לתור כמה הצהרות UPDATE, ומנסה שוב באופן אוטומטי במקרה של התנגשויות. אפשר להריץ פקודות DML ומשימות טעינה ב-INSERT בו-זמנית ובאופן עצמאי כדי להוסיף נתונים לטבלאות.
חזרה לגרסה קודמת
Oracle תומך בביטול שינויים. ב-BigQuery אין גבולות מפורשים של טרנזקציות, ולכן אין מושג של ביטול מפורש. הפתרונות העקיפים הם מעצבי טבלאות או שימוש ב-FOR SYSTEM_TIME AS OF.
מגבלות של מסדי נתונים
המכסות והמגבלות העדכניות של BigQuery אם אתם משתמשים בנפח גדול, תוכלו לפנות ל-Cloud Customer Care כדי להגדיל הרבה מהמכסות. בטבלה הבאה מוצגת השוואה בין מגבלות מסד הנתונים של Oracle ושל BigQuery.
| הגבלה | Oracle | BigQuery |
|---|---|---|
| טבלאות לכל מסד נתונים | לא מוגבל | לא מוגבל |
| עמודות בכל טבלה | 1000 | 10,000 |
| גודל שורה מקסימלי | ללא הגבלה (תלוי בסוג העמודה) | 100 MB |
| אורך השמות של עמודות וטבלאות | אם v12.2>= 128 בייטים
אחרת 30 בייטים |
16,384 תווים ב-Unicode |
| שורות בכל טבלה | ללא הגבלה | ללא הגבלה |
| האורך המקסימלי של בקשת SQL | ללא הגבלה | 1MB (האורך המקסימלי של שאילתת GoogleSQL לא פתורה)
12MB (אורך מקסימלי של שאילתת GoogleSQL ושאילתה מדור קודם שנותחה) סטרימינג:
|
| הגודל המקסימלי של בקשה ותגובה | ללא הגבלה | 10MB (בקשה) ו-10GB (תגובה), או כמעט ללא הגבלה אם משתמשים בחלוקה לדפים או ב-Cloud Storage API. |
| מספר מקסימלי של סשנים בו-זמנית | מוגבל על ידי הפרמטרים של הסשנים או התהליכים | 100 שאילתות בו-זמניות (אפשר להגדיל את המספר באמצעות הזמנת משבצות), 300 בקשות API בו-זמניות לכל משתמש. |
| מספר מקסימלי של טעינות בו-זמניות (מהירות) | מוגבל על ידי הפרמטרים של הסשנים או התהליכים | אין מגבלה על מספר המשימות שפועלות בו-זמנית, המשימות נכנסות לתור. 100,000 משימות טעינה ליום בכל פרויקט. |
מגבלות אחרות של מסד נתונים של Oracle כוללות מגבלות על סוגי נתונים, מגבלות פיזיות על מסד הנתונים, מגבלות לוגיות על מסד הנתונים ומגבלות על תהליכים וזמן ריצה.