מדריך לתרגום של Apache Hive SQL
במאמר הזה מפורטים הדמיון וההבדלים בתחביר של SQL בין Apache Hive לבין BigQuery, כדי לעזור לכם לתכנן את המיגרציה. כדי להעביר את סקריפטים של SQL בכמות גדולה, משתמשים בתרגום SQL באצווה. כדי לתרגם שאילתות אד-הוק, משתמשים בתרגום SQL אינטראקטיבי.
במקרים מסוימים, אין מיפוי ישיר בין רכיב SQL ב-Hive לבין BigQuery. עם זאת, ברוב המקרים, BigQuery מציע רכיב חלופי ל-Hive שיעזור לכם להשיג את אותה הפונקציונליות, כמו שמוצג בדוגמאות במסמך הזה.
המסמך הזה מיועד לאדריכלים ארגוניים, לאדמינים של מסדי נתונים, למפתחי אפליקציות ולמומחי אבטחת IT. ההנחה היא שאתם מכירים את Hive.
סוגי נתונים
ל-Hive ול-BigQuery יש מערכות שונות של סוגי נתונים. ברוב המקרים, אפשר למפות סוגי נתונים ב-Hive לסוגי נתונים ב-BigQuery, עם כמה יוצאים מן הכלל, כמו MAP ו-UNION. Hive תומך ביותר המרות מרומזות של סוגי נתונים מאשר BigQuery. כתוצאה מכך, כלי התרגום של SQL באצווה מוסיף הרבה המרות מפורשות.
| Hive | BigQuery |
|---|---|
TINYINT |
INT64 |
SMALLINT |
INT64 |
INT |
INT64 |
BIGINT |
INT64 |
DECIMAL |
NUMERIC |
FLOAT |
FLOAT64 |
DOUBLE |
FLOAT64 |
BOOLEAN |
BOOL |
STRING |
STRING |
VARCHAR |
STRING |
CHAR |
STRING |
BINARY |
BYTES |
DATE |
DATE |
| - | DATETIME |
| - | TIME |
TIMESTAMP |
DATETIME/TIMESTAMP |
INTERVAL |
- |
ARRAY |
ARRAY |
STRUCT |
STRUCT |
MAPS |
STRUCT עם ערכי מפתח (שדה REPEAT) |
UNION |
STRUCT עם סוגים שונים |
| - | GEOGRAPHY |
| - | JSON |
תחביר של שאילתות
בקטע הזה מוסבר על ההבדלים בתחביר של שאילתות בין Hive לבין BigQuery.
SELECT דוחות
רוב ההצהרות של Hive SELECT תואמות ל-BigQuery. בטבלה הבאה מפורטים כמה הבדלים קטנים:
| Case | Hive | BigQuery |
|---|---|---|
| שאילתת משנה |
|
|
| סינון עמודות |
|
|
| הרחבת מערך |
|
|
סעיף FROM
הפסקה FROM בשאילתה מפרטת את ההפניות לטבלאות שמהן נבחרים הנתונים. ב-Hive, הפניות אפשריות לטבלה כוללות טבלאות, תצוגות מקדימות ושאילתות משנה. BigQuery תומך גם בכל ההפניות האלה לטבלאות.
אפשר להפנות לטבלאות BigQuery בסעיף FROM באמצעות:
[project_id].[dataset_id].[table_name][dataset_id].[table_name][table_name]
BigQuery תומך גם בהפניות נוספות לטבלאות:
- גרסאות היסטוריות של הגדרת הטבלה והשורות באמצעות
FOR SYSTEM_TIME AS OF - נתיבי שדות,
או כל נתיב שמוביל לשדה בתוך סוג נתונים (כמו
STRUCT) - מערכים שטוחים
אופרטורים להשוואה
בטבלה הבאה מפורטים אופרטורים להמרה מ-Hive ל-BigQuery:
| פונקציה או אופרטור | Hive | BigQuery |
|---|---|---|
- מינוס אונרי * כפל / חילוק + חיבור - חיסור
|
כל סוגי המספרים | כל סוגי המספרים. כדי למנוע שגיאות במהלך פעולת החילוק, כדאי להשתמש ב- |
~ Bitwise not | Bitwise OR & Bitwise AND ^ Bitwise XOR
|
סוג נתונים בוליאני | סוג הנתונים הוא בוליאני. |
| Shift שמאלי |
|
|
| Shift ימני |
|
|
| מודולוס (שארית) |
X % Yכל סוגי המספרים |
MOD(X, Y) |
| חילוק של מספרים שלמים | A DIV B ו-A/B לדיוק מפורט |
כל סוגי המספרים. הערה: כדי למנוע שגיאות במהלך פעולת החלוקה, מומלץ להשתמש בפונקציה |
| שלילה אונארית | !, NOT |
NOT |
| סוגים שתומכים בהשוואות שוויון | כל הסוגים הפרימיטיביים | כל הסוגים להשוואה וSTRUCT.
|
a <=> b |
לא נתמך. תרגם את הטקסט הבא:
|
|
a <> b |
לא נתמך. תרגם את הטקסט הבא:
|
|
אופרטורים יחסיים ( =, ==, !=, <, >, >= ) |
כל הסוגים הפרימיטיביים | כל הסוגים להשוואה. |
| השוואת מחרוזות | RLIKE, REGEXP
|
פונקציה מובנית REGEXP_CONTAINS. משתמש בתבניות של ביטויים רגולריים בתחביר של ביטויים רגולריים של BigQuery לפונקציות של מחרוזות. |
[NOT] LIKE, [NOT] BETWEEN, IS [NOT] NULL |
A [NOT] BETWEEN B AND C, A IS [NOT] (TRUE|FALSE), A [NOT] LIKE B
|
כמו ב-Hive. בנוסף, BigQuery תומך גם באופרטור IN. |
תנאי JOIN
גם Hive וגם BigQuery תומכים בסוגי הצירופים הבאים:
[INNER] JOINLEFT [OUTER] JOINRIGHT [OUTER] JOINFULL [OUTER] JOIN
CROSS JOINו-comma cross join המרומז המקביל
מידע נוסף זמין במאמרים בנושא איחוד בין מערכי נתונים ואיחוד בין מערכי נתונים ב-Hive.
המרת סוגים (type conversion) והמרת טיפוסים (casting)
בטבלה הבאה מפורטות פונקציות להמרה מ-Hive ל-BigQuery:
| פונקציה או אופרטור | Hive | BigQuery |
|---|---|---|
| המרה של סוגים | אם ההמרה נכשלת, הפונקציה מחזירה `NULL`. | תחביר זהה ל-Hive. מידע נוסף על כללי המרה של סוגים ב-BigQuery זמין במאמר כללי המרה. אם ההפעלה של Cast נכשלת, מוצגת שגיאה. כדי לקבל את אותה התנהגות כמו ב-Hive, משתמשים במקום זאת ב- |
SAFE בקשות להפעלת פונקציות |
אם מוסיפים את הקידומת SAFE לקריאות לפונקציה, הפונקציה מחזירה את הערך NULL במקום לדווח על כשל. לדוגמה, הפונקציה SAFE.SUBSTR('foo', 0, -2) AS safe_output; מחזירה NULL.הערה: אם ההפעלה של Cast מתבצעת בצורה בטוחה וללא שגיאות, אפשר להשתמש ב- |
סוגי המרות משתמעים
כשמבצעים מיגרציה ל-BigQuery, צריך להמיר את רוב ההמרות המרומזות של Hive להמרות מפורשות של BigQuery, למעט סוגי הנתונים הבאים, ש-BigQuery ממיר באופן מרומז.
| מהסוג BigQuery | לסוג BigQuery |
|---|---|
INT64 |
FLOAT64, NUMERIC, BIGNUMERIC |
BIGNUMERIC |
FLOAT64 |
NUMERIC |
BIGNUMERIC, FLOAT64 |
ב-BigQuery מתבצעות גם המרות מרומזות של הערכים המילוליים הבאים:
| מהסוג BigQuery | לסוג BigQuery |
|---|---|
STRING מילולי (לדוגמה, "2008-12-25") |
DATE |
STRING מילולי (לדוגמה, "2008-12-25 15:30:00") |
TIMESTAMP |
STRING מילולי (לדוגמה, "2008-12-25T07:30:00") |
DATETIME |
STRING מילולי (לדוגמה, "15:30:00") |
TIME |
סוגי המרות מפורשים
אם רוצים להמיר סוגי נתונים של Hive ש-BigQuery לא ממיר באופן מרומז, צריך להשתמש בפונקציה CAST(expression AS type) של BigQuery.
פונקציות
בקטע הזה מפורטות פונקציות נפוצות שמשמשות ב-Hive וב-BigQuery.
פונקציות צבירה
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של Hive לחישוב מצטבר, לחישוב מצטבר סטטיסטי ולחישוב מצטבר משוער, לבין הפונקציות המקבילות שלהן ב-BigQuery:
| Hive | BigQuery |
|---|---|
count(DISTINCT expr[, expr...])
|
count(DISTINCT expr[, expr...])
|
percentile_approx(DOUBLE col, array(p1 [, p2]...) [, B]) WITHIN GROUP (ORDER BY expression)
|
APPROX_QUANTILES(expression, 100)[OFFSET(CAST(TRUNC(percentile * 100) as INT64))]BigQuery לא תומך בשאר הארגומנטים שמוגדרים ב-Hive. |
AVG
|
AVG
|
X | Y
|
BIT_OR / X | Y
|
X ^ Y
|
BIT_XOR / X ^ Y
|
X & Y
|
BIT_AND / X & Y
|
COUNT
|
COUNT
|
COLLECT_SET(col), \
COLLECT_LIST(col)
|
ARRAY_AGG(col)
|
COUNT
|
COUNT
|
MAX
|
MAX
|
MIN
|
MIN
|
REGR_AVGX
|
AVG(
|
REGR_AVGY
|
AVG(
|
REGR_COUNT
|
SUM(
|
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
|
CONCAT_WS
|
STRING_AGG
|
פונקציות אנליטיות
בטבלה הבאה מוצגים מיפויים בין פונקציות אנליטיות נפוצות של Hive לבין הפונקציות המקבילות שלהן ב-BigQuery:
| Hive | BigQuery |
|---|---|
AVG
|
AVG
|
COUNT
|
COUNT
|
COVAR_POP
|
COVAR_POP
|
COVAR_SAMP
|
COVAR_SAMP
|
CUME_DIST
|
CUME_DIST
|
DENSE_RANK
|
DENSE_RANK
|
FIRST_VALUE
|
FIRST_VALUE
|
LAST_VALUE
|
LAST_VALUE
|
LAG
|
LAG
|
LEAD
|
LEAD
|
COLLECT_LIST, \
COLLECT_SET
|
ARRAY_AGG
ARRAY_CONCAT_AGG
|
MAX
|
MAX
|
MIN
|
MIN
|
NTILE
|
NTILE(constant_integer_expression)
|
PERCENT_RANK
|
PERCENT_RANK
|
RANK ()
|
RANK
|
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). |
פונקציות של תאריך ושעה
בטבלה הבאה מוצגים מיפויים בין פונקציות נפוצות של תאריך ושעה ב-Hive לבין הפונקציות המקבילות ב-BigQuery:
DATE_ADD
|
DATE_ADD(date_expression, INTERVAL int64_expression date_part)
|
DATE_SUB
|
DATE_SUB(date_expression, INTERVAL int64_expression date_part)
|
CURRENT_DATE
|
CURRENT_DATE
|
CURRENT_TIME
|
CURRENT_TIME
|
CURRENT_TIMESTAMP
|
CURRENT_DATETIME
מומלץ, כי הערך הזה לא תלוי באזור זמן והוא זהה לערך
CURRENT_TIMESTAMP \
CURRENT_TIMESTAMP
ב-Hive.
|
EXTRACT(field FROM source)
|
EXTRACT(part FROM datetime_expression)
|
LAST_DAY
|
DATE_SUB( DATE_TRUNC( DATE_ADD(
|
MONTHS_BETWEEN
|
DATE_DIFF(date_expression, date_expression, MONTH)
|
NEXT_DAY
|
DATE_ADD(
|
TO_DATE
|
PARSE_DATE
|
FROM_UNIXTIME
|
UNIX_SECONDS
|
FROM_UNIXTIMESTAMP
|
FORMAT_TIMESTAMP
|
YEAR \
QUARTER \
MONTH \
HOUR \
MINUTE \
SECOND \
WEEKOFYEAR
|
EXTRACT
|
DATEDIFF
|
DATE_DIFF
|
BigQuery מציע את הפונקציות הנוספות הבאות של תאריך ושעה:
פונקציות מחרוזת
בטבלה הבאה מוצגים מיפויים בין פונקציות מחרוזת של Hive לבין הפונקציות המקבילות שלהן ב-BigQuery:
| Hive | BigQuery |
|---|---|
ASCII
|
TO_CODE_POINTS(string_expr)[OFFSET(0)]
|
HEX
|
TO_HEX
|
LENGTH
|
CHAR_LENGTH
|
LENGTH
|
CHARACTER_LENGTH
|
CHR
|
CODE_POINTS_TO_STRING
|
CONCAT
|
CONCAT
|
LOWER
|
LOWER
|
LPAD
|
LPAD
|
LTRIM
|
LTRIM
|
REGEXP_EXTRACT
|
REGEXP_EXTRACT
|
REGEXP_REPLACE
|
REGEXP_REPLACE
|
REPLACE
|
REPLACE
|
REVERSE
|
REVERSE
|
RPAD
|
RPAD
|
RTRIM
|
RTRIM
|
SOUNDEX
|
SOUNDEX
|
SPLIT
|
SPLIT(instring, delimiter)[ORDINAL(tokennum)]
|
SUBSTR, \
SUBSTRING
|
SUBSTR
|
TRANSLATE
|
TRANSLATE
|
LTRIM
|
LTRIM
|
RTRIM
|
RTRIM
|
TRIM
|
TRIM
|
UPPER
|
UPPER
|
BigQuery מציע את הפונקציות הנוספות הבאות למחרוזות:
פונקציות מתמטיות
בטבלה הבאה מוצגים מיפויים בין פונקציות מתמטיות ב-Hive לבין הפונקציות המקבילות ב-BigQuery:
| Hive | BigQuery |
|---|---|
ABS
|
ABS
|
ACOS
|
ACOS
|
ASIN
|
ASIN
|
ATAN
|
ATAN
|
CEIL
|
CEIL
|
CEILING
|
CEILING
|
COS
|
COS
|
FLOOR
|
FLOOR
|
GREATEST
|
GREATEST
|
LEAST
|
LEAST
|
LN
|
LN
|
LNNVL
|
שימוש עם ISNULL.
|
LOG
|
LOG
|
MOD (% operator)
|
MOD
|
POWER
|
POWER, POW
|
RAND
|
RAND
|
ROUND
|
ROUND
|
SIGN
|
SIGN
|
SIN
|
SIN
|
SQRT
|
SQRT
|
HASH
|
FARM_FINGERPRINT, MD5, SHA1, SHA256, SHA512
|
STDDEV_POP
|
STDDEV_POP
|
STDDEV_SAMP
|
STDDEV_SAMP
|
TAN
|
TAN
|
TRUNC
|
TRUNC
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
ב-BigQuery יש פונקציות מתמטיות נוספות:
פונקציות לוגיות ותנאיות
בטבלה הבאה מוצגים מיפויים בין פונקציות לוגיות ומותנות של Hive לבין הפונקציות המקבילות שלהן ב-BigQuery:
| Hive | BigQuery |
|---|---|
CASE
|
CASE
|
COALESCE
|
COALESCE
|
NVL
|
IFNULL(expr, 0), COALESCE(exp, 0)
|
NULLIF
|
NULLIF
|
IF
|
IF(expr, true_result, else_result)
|
ISNULL
|
IS NULL
|
ISNOTNULL
|
IS NOT NULL
|
NULLIF
|
NULLIF
|
פונקציות UDF ופונקציות UDAF
Apache Hive תומך בכתיבת פונקציות בהגדרת המשתמש (UDF) ב-Java. אפשר לטעון פונקציות UDF ל-Hive כדי להשתמש בהן בשאילתות רגילות. פונקציות UDF ב-BigQuery צריך לכתוב ב-GoogleSQL או ב-JavaScript. מומלץ להמיר את פונקציות UDF של Hive לפונקציות UDF של SQL כי פונקציות UDF של SQL פועלות טוב יותר. אם אתם צריכים להשתמש ב-JavaScript, כדאי לקרוא את המאמר שיטות מומלצות לשימוש בפונקציות מוגדרות על ידי המשתמש (UDF) ב-JavaScript. בשפות אחרות, BigQuery תומך בפונקציות מרוחקות שמאפשרות להפעיל את הפונקציות בפונקציות Cloud Run או ב-Cloud Run משאילתות GoogleSQL.
BigQuery לא תומך בפונקציות צבירה שהוגדרו על ידי המשתמש (UDAFs).
תחביר DML
בקטע הזה מוסבר על ההבדלים בתחביר של שפת טיפול בנתונים (DML) בין Hive לבין BigQuery.
INSERT דוחות
רוב ההצהרות של Hive INSERT תואמות ל-BigQuery. בטבלה הבאה מוצגים חריגים:
| Hive | BigQuery |
|---|---|
INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
|
INSERT INTO table (...) VALUES (...);
הערה: ב-BigQuery, השמטת שמות העמודות בהצהרת |
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
|
BigQuery לא תומך בפעולות insert-overwrite.
אפשר להעביר את התחביר הזה של Hive להצהרות TRUNCATE ו-INSERT.
|
ב-BigQuery יש מכסות DML שמגבילות את מספר הצהרות ה-DML שאפשר להריץ מדי יום. כדי להפיק את המרב מהמכסה, כדאי לשקול את הגישות הבאות:
לשלב כמה שורות בהצהרת
INSERTאחת, במקום שורה אחת לכל פעולתINSERT.אפשר לשלב כמה פקודות DML (כולל
INSERT) באמצעות פקודתMERGE.משתמשים ב-
CREATE TABLE ... AS SELECTכדי ליצור טבלאות חדשות ולאכלס אותן.
UPDATE דוחות
רוב ההצהרות של Hive UPDATE תואמות ל-BigQuery. בטבלה הבאה מוצגים חריגים:
| Hive | BigQuery |
|---|---|
UPDATE tablename SET column = value [, column = value ...] [WHERE expression]
|
UPDATE table
הערה: כל הצהרות ב-BigQuery דורשות מילת מפתח , ואחריה תנאי. |
DELETE ודוחות TRUNCATE
אפשר להשתמש בהצהרות DELETE או TRUNCATE כדי להסיר שורות מטבלה בלי להשפיע על הסכימה או על האינדקסים של הטבלה.
ב-BigQuery, להצהרת DELETE חייב להיות סעיף WHERE.
מידע נוסף על DELETE ב-BigQuery זמין במאמר דוגמאות לשימוש ב-DELETE.
| Hive | BigQuery |
|---|---|
DELETE FROM tablename [WHERE expression]
|
DELETE FROM table_name
WHERE TRUE
הצהרות BigQuery |
TRUNCATE [TABLE] table_name [PARTITION partition_spec];
|
TRUNCATE TABLE [[project_name.]dataset_name.]table_name
|
MERGE דוחות
ההצהרה MERGE יכולה לשלב פעולות של INSERT, UPDATE ו-DELETE בהצהרת upsert אחת ולבצע את הפעולות. הפעולה MERGE צריכה להתאים לשורת מקור אחת לכל היותר לכל שורת יעד.
| Hive | BigQuery |
|---|---|
MERGE INTO
ON
|
MERGE target
USING source
הערה: חובה לפרט את כל העמודות שצריך לעדכן. |
ALTER דוחות
בטבלה הבאה מפורטות המרות של הצהרות CREATE VIEW מ-Hive ל-BigQuery:
| פונקציה | Hive | BigQuery |
|---|---|---|
Rename table
|
ALTER TABLE table_name RENAME TO new_table_name;
|
לא נתמך. פתרון עקיף הוא להשתמש במשימת העתקה עם השם שרוצים בתור טבלת היעד, ואז למחוק את הטבלה הישנה.
|
Table properties
|
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
|
{ALTER TABLE | ALTER TABLE IF EXISTS}
|
SerDe properties (Serialize and deserialize)
|
ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];
|
הסדרות והדה-סדרות מנוהלות על ידי שירות BigQuery ולא ניתן להגדיר אותן על ידי המשתמש.
במאמר יצירת טבלאות חיצוניות ב-Cloud Storage מוסבר איך מאפשרים ל-BigQuery לקרוא נתונים מקובצי CSV, JSON, AVRO, PARQUET או ORC. תמיכה בפורמטים לייצוא: CSV, JSON, AVRO ו-PARQUET. מידע נוסף זמין במאמר פורמטים לייצוא וסוגי דחיסה. |
Table storage properties
|
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
|
התכונה לא נתמכת בהצהרות ALTER.
|
Skewed table
|
Skewed:
ALTER TABLE table_name SKEWED BY (col_name1, col_name2, ...)
ON ([(col_name1_value, col_name2_value, ...) [, (col_name1_value, col_name2_value), ...]
|
שירות BigQuery מנהל את האיזון בין האחסון לבין שאילתות הביצועים, ואי אפשר להגדיר אותו. |
Table constraints
|
ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column, ...) DISABLE NOVALIDATE;
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column, ...) REFERENCES table_name(column, ...) DISABLE NOVALIDATE RELY;
|
ALTER TABLE [[project_name.]dataset_name.]table_nameADD [CONSTRAINT [IF NOT EXISTS] [constraint_name]] constraint NOT ENFORCED;ALTER TABLE [[project_name.]dataset_name.]table_nameADD PRIMARY KEY(column_list) NOT ENFORCED;
מידע נוסף זמין בדף החשבון של |
Add partition
|
ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
|
לא נתמך. מחיצות נוספות מתווספות לפי הצורך כשנטענים נתונים עם ערכים חדשים בעמודות המחיצה. מידע נוסף זמין במאמר בנושא ניהול טבלאות מחולקות. |
Rename partition
|
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
|
לא נתמך. |
Exchange partition
|
-- Move partition from table_name_1 to table_name_2
|
לא נתמך. |
Recover partition
|
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
|
לא נתמך. |
Drop partition
|
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
[IGNORE PROTECTION] [PURGE];
|
אפשר להשתמש בשיטות הבאות:
מידע נוסף מופיע במאמר בנושא מחיקת מחיצה. |
(Un)Archive partition
|
ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
|
לא נתמך. |
Table and partition file format
|
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
|
לא נתמך. |
Table and partition location
|
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
|
לא נתמך. |
Table and partition touch
|
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
|
לא נתמך. |
Table and partition protection
|
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];
|
לא נתמך. |
Table and partition compact
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
|
לא נתמך. |
Table and artition concatenate
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
|
לא נתמך. |
Table and partition columns
|
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
|
התכונה לא נתמכת בהצהרות ALTER TABLE.
|
Column name, type, position, and comment
|
ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type
[COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];
|
לא נתמך. |
תחביר DDL
בקטע הזה מוסבר על ההבדלים בתחביר של שפת הגדרת נתונים (DDL) בין Hive לבין BigQuery.
CREATE TABLE ודוחות DROP TABLE
בטבלה הבאה מפורטות המרות של הצהרות CREATE TABLE מ-Hive ל-BigQuery:
| סוג | Hive | BigQuery |
|---|---|---|
| טבלאות מנוהלות | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
| טבלאות מחולקות למחיצות | create table table_name (
|
CREATE TABLE `myproject`.mydataset.table_name (
|
Create table as select (CTAS)
|
CREATE TABLE new_key_value_store
|
CREATE TABLE `myproject`.mydataset.new_key_value_store
כשמבצעים חלוקה למחיצות לפי תאריך, מבטלים את ההערה של השורות הבאות:
כשמבצעים חלוקה למחיצות לפי תאריך, מבטלים את ההערה בשורות הבאות. מומלץ להשתמש ב-
|
Create Table Like:
הצורה |
CREATE TABLE empty_key_value_store
|
לא נתמך. |
| טבלאות ממוינות עם חלוקה לדליים (clustered במינוח של BigQuery) | CREATE TABLE page_view(
|
CREATE TABLE `myproject` mydataset.page_view (
מידע נוסף זמין במאמר בנושא יצירה ושימוש בטבלאות מקובצות. |
| טבלאות מוטות (טבלאות שבהן עמודה אחת או יותר כוללות ערכים מוטים) | CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
|
לא נתמך. |
| טבלאות זמניות | CREATE TEMPORARY TABLE list_bucket_multiple (
|
כדי לעשות את זה, אפשר להשתמש בזמן התפוגה באופן הבא:
|
| טבלאות של עסקאות | CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
|
כל השינויים בטבלאות ב-BigQuery תואמים ל-ACID (אטומיות, עקביות, בידוד ועמידות). |
| הסרת טבלה | DROP TABLE [IF EXISTS] table_name [PURGE];
|
{DROP TABLE | DROP TABLE IF EXISTS}
|
| חיתוך טבלה | TRUNCATE TABLE table_name [PARTITION partition_spec];
|
לא נתמך. אלה הפתרונות האפשריים:
הערה: אפשר גם לקטוע מחיצות ספציפיות. מידע נוסף מופיע במאמר בנושא מחיקת מחיצה. |
CREATE EXTERNAL TABLE ודוחות DROP EXTERNAL TABLE
מידע על תמיכה בטבלאות חיצוניות ב-BigQuery זמין במאמר מבוא למקורות נתונים חיצוניים.
CREATE VIEW ודוחות DROP VIEW
בטבלה הבאה מפורטות המרות של הצהרות CREATE VIEW מ-Hive ל-BigQuery:
| Hive | BigQuery |
|---|---|
CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], ...) ]
|
{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
|
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db_name.]materialized_view_name
|
CREATE MATERIALIZED VIEW [IF NOT EXISTS] \
[project_id].[dataset_id].materialized_view_name
|
CREATE FUNCTION ודוחות DROP FUNCTION
בטבלה הבאה מפורטות המרות של פרוצדורות מאוחסנות מ-Hive ל-BigQuery:
| Hive | BigQuery |
|---|---|
CREATE TEMPORARY FUNCTION function_name AS class_name;
|
CREATE { TEMPORARY | TEMP } FUNCTION function_name ([named_parameter[, ...]])
|
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
|
לא נתמך. |
CREATE FUNCTION [db_name.]function_name AS class_name
|
התכונה נתמכת בפרויקטים שנמצאים ברשימת ההיתרים כגרסת אלפא.
|
DROP FUNCTION [IF EXISTS] function_name;
|
DROP FUNCTION [ IF EXISTS ] function_name
|
RELOAD FUNCTION;
|
לא נתמך. |
CREATE MACRO ודוחות DROP MACRO
בטבלה הבאה מפורטים פרטים על המרת הצהרה והקצאה של משתנים מ-Hive ל-BigQuery, ועל המרת הצהרות SQL פרוצדורליות שמשמשות ליצירת פקודות מאקרו.
| Hive | BigQuery |
|---|---|
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
|
לא נתמך. במקרים מסוימים, אפשר להשתמש במקום זאת בפונקציה מוגדרת על ידי המשתמש (UDF). |
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
|
לא נתמך. |
קודי שגיאה והודעות שגיאה
קודי השגיאה של Hive שונים מקודי השגיאה של BigQuery. אם הלוגיקה של האפליקציה שלכם מזהה שגיאות, צריך לסלק את מקור השגיאה כי BigQuery לא מחזיר את אותם קודי שגיאה.
ב-BigQuery, נהוג להשתמש בתצוגות INFORMATION_SCHEMA או ברישום ביומן ביקורת כדי לבדוק שגיאות.
התחייבויות עקביות ורמת בידוד של טרנזקציה
גם Hive וגם BigQuery תומכים בעסקאות עם סמנטיקה של ACID. האפשרות Transactions מופעלת כברירת מחדל ב-Hive 3.
סמנטיקה של ACID
Hive תומך בבידוד snapshot. כשמריצים שאילתה, היא מקבלת תמונת מצב עקבית של מסד הנתונים, והיא משתמשת בה עד לסיום ההרצה. Hive מספקת סמנטיקה מלאה של ACID ברמת השורה, ומאפשרת לאפליקציה אחת להוסיף שורות בזמן שאפליקציה אחרת קוראת מאותה מחיצה, בלי שהפעולות יפריעו זו לזו.
BigQuery מספק בקרת בו-זמניות אופטימית (הראשון שמבצע commit זוכה) עם בידוד snapshot, שבו שאילתה קוראת את הנתונים האחרונים שעברו commit לפני שהיא מתחילה. גישה זו מבטיחה את אותה רמת עקביות לכל שורה ולכל שינוי, ובין שורות באותה פקודת DML, תוך הימנעות מקיפאון. אם יש כמה עדכונים של DML לאותה טבלה, BigQuery עובר לבקרת בו-זמניות פסימית. משימות טעינה יכולות לפעול באופן עצמאי ולצרף טבלאות. עם זאת, BigQuery לא מספק גבולות או סשנים מפורשים של טרנזקציות.
טרנזקציות
Hive לא תומך בעסקאות עם כמה הצהרות. הוא לא תומך בהצהרות BEGIN, COMMIT ו-ROLLBACK. ב-Hive, כל פעולות השפה מתבצעות אוטומטית.
BigQuery תומך בעסקאות מרובות הצהרות בתוך שאילתה אחת או בכמה שאילתות כשמשתמשים בסשנים. טרנזקציה עם כמה הצהרות מאפשרת לבצע פעולות שינוי, כמו הוספה או מחיקה של שורות מטבלה אחת או יותר, וגם לבצע commit או rollback של השינויים. מידע נוסף מופיע במאמר בנושא טרנזקציות עם כמה תדפיסי חשבון.