מדריך לתרגום 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 ל-ML. כדי להמיר משימות של 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
בקטע הזה נסביר על ההבדלים בתחביר של שפת הגדרת הנתונים בין 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) של קבוצת נתונים: יוצרים קבוצת נתונים עם אורך חיים (TTL) קצר (למשל, שעה אחת) כדי שכל הטבלאות שנוצרות בקבוצת הנתונים יהיו זמניות (כי הן לא יישארו מעבר לאורך החיים (TTL) של קבוצת הנתונים). כדי לציין בבירור שהטבלאות זמניות, אפשר להוסיף את הקידומת
tempלכל שמות הטבלאות במערך הנתונים הזה. 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 מספקת רמות בידוד של טרנזקציות שמאפשרות קריאה של טרנזקציות שבוצעו או סריאליזציה. יכול להיות שיהיו מבויים סתומים. משימות הוספה של Oracle פועלות באופן עצמאי.
ב-BigQuery אפשר גם לבצע טרנזקציות.
ב-BigQuery, בקרת בו-זמניות אופטימית (הראשון שמבצע commit מנצח) מובטחת באמצעות בידוד snapshot, שבו שאילתה קוראת את הנתונים האחרונים שבוצע להם commit לפני שהשאילתה מתחילה. הגישה הזו מבטיחה את אותה רמת עקביות לכל שורה, לכל מוטציה ובכל השורות באותה פקודת DML, אבל מונעת מבוי סתום. אם יש כמה הצהרות UPDATE באותה טבלה, BigQuery עובר לבקרת בו-זמניות פסימית ומוסיף לתור כמה הצהרות UPDATE, ומנסה שוב באופן אוטומטי במקרה של התנגשויות. INSERT אפשר להריץ פקודות DML ומשימות טעינה בו-זמנית ובאופן עצמאי כדי להוסיף נתונים לטבלאות.
חזרה לגרסה קודמת
Oracle תומכת בהחזרות למצב קודם. ב-BigQuery אין גבולות מפורשים לעסקאות, ולכן אין מושג של ביטול מפורש. הפתרונות העקיפים הם מעצבי טבלאות או שימוש ב-FOR SYSTEM_TIME AS OF.
מגבלות של מסדי נתונים
המכסות והמגבלות העדכניות של BigQuery משתמשים עם נפח שימוש גדול יכולים לפנות ל-Cloud Customer Care כדי להגדיל הרבה מהמכסות. בטבלה הבאה מוצגת השוואה בין המגבלות של מסדי הנתונים של Oracle ו-BigQuery.
| הגבלה | Oracle | BigQuery |
|---|---|---|
| טבלאות לכל מסד נתונים | לא מוגבל | לא מוגבל |
| עמודות בכל טבלה | 1000 | 10,000 |
| גודל שורה מקסימלי | ללא הגבלה (תלוי בסוג העמודה) | 100MB |
| אורך השמות של עמודות וטבלאות | אם גרסה 12.2>= 128 בתים
אחרת 30 בייטים |
16,384 תווים ב-Unicode |
| שורות בכל טבלה | ללא הגבלה | ללא הגבלה |
| האורך המקסימלי של בקשת SQL | ללא הגבלה | 1MB (האורך המקסימלי של שאילתת GoogleSQL לא פתורה)
12MB (אורך מקסימלי של שאילתת GoogleSQL ושאילתה מדור קודם) סטרימינג:
|
| גודל מקסימלי של בקשה ותגובה | ללא הגבלה | 10MB (בקשה) ו-10GB (תגובה), או כמעט ללא הגבלה אם משתמשים בחלוקה לדפים או ב-Cloud Storage API. |
| מספר מקסימלי של סשנים בו-זמנית | מוגבל על ידי הפרמטרים של הסשנים או התהליכים | 100 שאילתות בו-זמניות (אפשר להגדיל את המספר באמצעות הזמנת משבצות), 300 בקשות API בו-זמניות לכל משתמש. |
| מספר מקסימלי של טעינות בו-זמניות (מהירות) | מוגבל על ידי הפרמטרים של הסשנים או התהליכים | אין מגבלה על מספר המשימות בו-זמנית, המשימות נכנסות לתור. 100,000 משימות טעינה ליום בכל פרויקט. |
מגבלות אחרות של Oracle Database כוללות מגבלות על סוגי נתונים, מגבלות פיזיות על מסדי נתונים, מגבלות לוגיות על מסדי נתונים ומגבלות על תהליכים וזמני ריצה.