שאילתות בפורמטים פתוחים של טבלאות באמצעות קובצי מניפסט
במאמר הזה מוסבר איך להשתמש בקובצי מניפסט כדי לשלוח שאילתות לנתונים שמאוחסנים בפורמטים של טבלאות בקוד פתוח, כמו Apache Hudi ו-Delta Lake.
חלק מהפורמטים של טבלאות בקוד פתוח, כמו Hudi ו-Delta Lake, מייצאים את המצב הנוכחי שלהם כקובץ מניפסט אחד או יותר. קובץ מניפסט מכיל רשימה של קובצי נתונים שיוצרים טבלאות. התמיכה במניפסט ב-BigQuery מאפשרת לשלוח שאילתות ולטעון נתונים שמאוחסנים בפורמטים של טבלאות פתוחות.
לפני שמתחילים
מפעילים את ממשקי ה-API של BigQuery Connection, BigQuery Reservation ו-BigLake, אם הם עדיין לא מופעלים.
תפקידים שנדרשים להפעלת ממשקי API
כדי להפעיל ממשקי API, נדרשת ההרשאה
serviceusage.services.enable. אם יצרתם את הפרויקט, סביר להניח שכבר יש לכם את ההרשאה הזו דרך התפקיד 'בעלים' (roles/owner). אחרת, תוכלו לקבל את ההרשאה הזו דרך התפקיד 'אדמין בממשק Service Usage' (roles/serviceusage.serviceUsageAdmin). איך מקצים תפקידיםכדי ליצור טבלאות BigLake, אפשר להריץ את פקודות Spark באחת מהשיטות הבאות:
יצירת אשכול של Managed Service for Apache Spark. כדי לשלוח שאילתות לטבלאות Hudi, מגדירים את השדה
--optional-componentsלערךHUDI. כדי לשלוח שאילתות לטבלאות Delta, מגדירים את--optional-componentsל-Presto.שימוש בתהליך מאוחסן ל-Spark ב-BigQuery. כדי לעשות זאת:
כדי לאחסן את קובץ המניפסט ב-Cloud Storage, צריך ליצור קטגוריה של Cloud Storage. כדי לגשת לקובץ המניפסט, צריך להתחבר לקטגוריה של Cloud Storage. כדי לעשות זאת:
התפקידים הנדרשים
כדי להריץ שאילתות על טבלאות BigLake שמבוססות על נתוני Hudi ו-Delta Lake, צריך לוודא שיש לכם את התפקידים הבאים:
- BigQuery Connection User (
roles/bigquery.connectionUser) - צפייה בנתוני BigQuery (
roles/bigquery.dataViewer) - משתמש BigQuery (
roles/bigquery.user)
אפשר גם להריץ שאילתות על טבלאות חיצוניות של Hudi. עם זאת, מומלץ לשדרג את הטבלה החיצונית ל-BigLake. כדי להריץ שאילתות בטבלאות חיצוניות של Hudi, צריך לוודא שיש לכם את התפקידים הבאים:
- צפייה בנתוני BigQuery (
roles/bigquery.dataViewer) - משתמש BigQuery (
roles/bigquery.user) - צפייה באובייקטים באחסון (
roles/storage.objectViewer)
בהתאם להרשאות שלכם, אתם יכולים להקצות לעצמכם את התפקידים האלה או לבקש מהאדמין להקצות אותם לכם. מידע נוסף על הקצאת תפקידים זמין במאמר איך בודקים אילו תפקידים אפשר לתת במשאבים.
כדי לראות את ההרשאות הנדרשות לשאילתות בטבלאות BigLake, מרחיבים את הקטע ההרשאות הנדרשות:
ההרשאות הנדרשות
bigquery.connections.usebigquery.jobs.createbigquery.readsessions.create(נדרש רק אם קוראים נתונים באמצעות BigQuery Storage Read API)bigquery.tables.getbigquery.tables.getData
יכול להיות שתוכלו לקבל את ההרשאות האלה גם באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.
שאילתות של עומסי עבודה ב-Hudi
כדי להריץ שאילתות על נתוני Hudi, פועלים לפי השלבים הבאים:
- יצירת טבלה חיצונית על סמך נתוני Hudi.
- משדרגים את הטבלה החיצונית ל-BigLake.
יצירת טבלאות חיצוניות של Hudi
כשמסנכרנים טבלאות באמצעות כלי הסנכרון של Hudi ו-BigQuery, צריך להפעיל את הדגל use-bq-manifest-file כדי לעבור לגישה של קובץ המניפסט. הדגל הזה מייצא גם קובץ מניפסט בפורמט שנתמך על ידי BigQuery, ומשתמש בו כדי ליצור טבלה חיצונית עם השם שצוין בפרמטר --table.
כדי ליצור טבלת Hudi חיצונית, פועלים לפי השלבים הבאים:
כדי ליצור טבלת Hudi חיצונית, צריך לשלוח משימה לאשכול קיים של Managed Service for Apache Spark. כשמגדירים את המחבר Hudi-BigQuery, צריך להפעיל את הדגל
use-bq-manifest-fileכדי לעבור לגישה של קובץ המניפסט. הדגל הזה מייצא קובץ מניפסט בפורמט שנתמך על ידי BigQuery, ומשתמש בו כדי ליצור טבלה חיצונית עם השם שצוין בפרמטר--table.spark-submit \ --master yarn \ --packages com.google.cloud:google-cloud-bigquery:2.10.4 \ --class org.apache.hudi.gcp.bigquery.BigQuerySyncTool \ JAR \ --project-id PROJECT_ID \ --dataset-name DATASET \ --dataset-location LOCATION \ --table TABLE \ --source-uri URI \ --source-uri-prefix URI_PREFIX \ --base-path BASE_PATH \ --partitioned-by PARTITION_BY \ --use-bq-manifest-file
מחליפים את מה שכתוב בשדות הבאים:
JAR: אם אתם משתמשים במחבר Hudi-BigQuery, מצייניםhudi-gcp-bundle-0.14.0.jar. אם אתם משתמשים ברכיב Hudi ב-Managed Service for Apache Spark 2.1, צריך לציין/usr/lib/hudi/tools/bq-sync-tool/hudi-gcp-bundle-0.12.3.1.jar
PROJECT_ID: מזהה הפרויקט שבו רוצים ליצור את טבלת Hudi BigLake
DATASET: מערך הנתונים שבו רוצים ליצור את טבלת Hudi BigLake.
LOCATION: המיקום שבו רוצים ליצור את טבלת Hudi BigLake.
TABLE: השם של הטבלה שרוצים ליצוראם אתם עוברים מגרסה קודמת של מחבר Hudi-BigQuery (גרסה 0.13.0 ומטה) שיצרה תצוגות (Views) בקובצי המניפסט, חשוב לוודא שאתם משתמשים באותו שם טבלה, כי כך תוכלו לשמור את קוד הצינור הקיים במורד הזרם.
URI: ה-URI של Cloud Storage שיצרתם כדי לאחסן את קובץ המניפסט של Hudiה-URI הזה מצביע על המחיצה ברמה הראשונה. חשוב לכלול את מפתח המחיצה. לדוגמה,
gs://mybucket/hudi/mydataset/EventDate=*
URI_PREFIX: הקידומת של נתיב ה-URI של Cloud Storage, בדרך כלל זה הנתיב לטבלאות Hudi
BASE_PATH: נתיב הבסיס לטבלאות Hudiלדוגמה,
gs://mybucket/hudi/mydataset/
PARTITION_BY: ערך המחיצהלדוגמה,
EventDate
למידע נוסף על הגדרת המחבר, ראו מחבר Hudi-BigQuery.
כדי להגדיר אמצעי בקרה מתאימים ברמת הגרנולריות או כדי לשפר את הביצועים באמצעות הפעלת שמירת מטא-נתונים במטמון, ראו שדרוג טבלאות BigLake.
שאילתות של עומסי עבודה של Delta
יש עכשיו תמיכה מובנית בטבלאות דלתא. מומלץ ליצור טבלאות Delta BigLake לעומסי עבודה של Delta. טבלאות BigLake של Delta Lake תומכות בטבלאות Delta Lake מתקדמות יותר, כולל טבלאות עם מיפוי מחדש של עמודות ווקטורים של מחיקה. בנוסף, טבלאות Delta BigLake קוראות ישירות את תמונת המצב האחרונה, כך שהעדכונים זמינים באופן מיידי.
כדי להריץ שאילתות על עומסי עבודה של Delta, פועלים לפי השלבים הבאים:
- יוצרים קובץ מניפסט.
- יוצרים טבלת BigLake על סמך קובץ המניפסט.
- כדי לשפר את הביצועים, אפשר להגדיר אמצעי בקרה מתאימים ברמת פירוט גבוהה או להפעיל שמירת מטמון של מטא-נתונים. הוראות מפורטות מופיעות במאמר שדרוג טבלאות BigLake.
יצירת קובץ מניפסט
BigQuery תומך בקובץ המניפסט בפורמט SymLinkTextInputFormat, שהוא רשימה של כתובות URI שמופרדות בשורות חדשות. מידע נוסף על יצירת קובץ מניפסט זמין במאמר הגדרת שילוב של Presto עם Delta Lake ושאילתות בטבלאות Delta.
כדי ליצור קובץ מניפסט, שולחים משימה לאשכול קיים של Managed Service for Apache Spark:
SQL
באמצעות Spark, מריצים את הפקודה הבאה בטבלת Delta במיקום path-to-delta-table:
GENERATE symlink_format_manifest FOR TABLE delta.``
Scala
באמצעות Spark, מריצים את הפקודה הבאה בטבלת Delta במיקום path-to-delta-table:
val deltaTable = DeltaTable.forPath() deltaTable.generate("symlink_format_manifest")
Java
באמצעות Spark, מריצים את הפקודה הבאה בטבלת Delta במיקום path-to-delta-table:
DeltaTable deltaTable = DeltaTable.forPath(); deltaTable.generate("symlink_format_manifest");
Python
באמצעות Spark, מריצים את הפקודה הבאה בטבלת Delta במיקום path-to-delta-table:
deltaTable = DeltaTable.forPath() deltaTable.generate("symlink_format_manifest")
יצירת טבלאות Delta BigLake
כדי ליצור טבלת Delta BigLake, משתמשים בהצהרת CREATE EXTERNAL TABLE עם השדה file_set_spec_type שמוגדר לערך NEW_LINE_DELIMITED_MANIFEST:
עוברים לדף BigQuery.
בעורך השאילתות, מריצים את ההצהרה
CREATE EXTERNAL TABLE:CREATE EXTERNAL TABLE PROJECT_ID.DATASET_NAME.TABLE_NAME WITH PARTITION COLUMNS( `PARTITION_COLUMN PARTITION_COLUMN_TYPE`,) WITH CONNECTION `PROJECT_IDREGION.CONNECTION_NAME` OPTIONS ( format = "DATA_FORMAT", uris = ["URI"], file_set_spec_type = 'NEW_LINE_DELIMITED_MANIFEST', hive_partition_uri_prefix = "PATH_TO_DELTA_TABLE" max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
מחליפים את מה שכתוב בשדות הבאים:
-
DATASET_NAME: השם של מערך הנתונים שיצרתם TABLE_NAME: השם שרוצים לתת לטבלה-
REGION: המיקום שבו נמצא החיבור (לדוגמה,us-east1) CONNECTION_NAME: השם של החיבור שיצרתם-
DATA_FORMAT: כל אחד מהפורמטים הנתמכים (למשלPARQUET) -
URI: הנתיב לקובץ המניפסט (לדוגמה,gs://mybucket/path) -
PATH_TO_DELTA_TABLE: קידומת משותפת לכל מזהי ה-URI של המקור לפני שמתחיל הקידוד של מפתח החלוקה -
STALENESS_INTERVAL: מציין אם פעולות בטבלת BigLake משתמשות במטא-נתונים שנשמרו במטמון, ומה מידת העדכניות של המטא-נתונים שנשמרו במטמון שנדרשת כדי שהפעולה תשתמש בהם. מידע נוסף על שיקולים לגבי שמירת מטא-נתונים במטמון זמין במאמר שמירת מטא-נתונים במטמון לשיפור הביצועים.כדי להשבית את שמירת המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)
כדי להפעיל שמירת מטא-נתונים במטמון, צריך לציין ערך של מרווח זמן בין 30 דקות ל-7 ימים. לדוגמה, כדי להגדיר מרווח של 4 שעות, מציינים
INTERVAL 4 HOUR. אם הערך הזה קיים, פעולות שמתבצעות בטבלה משתמשות במטא-נתונים ששמורים במטמון אם הם רעננו ב-4 השעות האחרונות. אם המטא-נתונים שבזיכרון המטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Delta Lake במקום זאת. -
CACHE_MODE: מציין אם מטמון המטא-נתונים מתעדכן באופן אוטומטי או ידני. מידע נוסף על שיקולים לגבי שמירת מטא-נתונים במטמון זמין במאמר שמירת מטא-נתונים במטמון לשיפור הביצועים.אם מגדירים את הערך
AUTOMATIC, מטמון המטא-נתונים מתעדכן במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את מטמון המטא-נתונים לפי לוח זמנים שקובעים. במקרה כזה, אפשר להתקשר אלBQ.REFRESH_EXTERNAL_METADATA_CACHEהפרוצדורה של המערכת כדי לרענן את המטמון.אם הערך של
STALENESS_INTERVALגדול מ-0, צריך להגדיר אתCACHE_MODE.
דוגמה:
CREATE EXTERNAL TABLE mydataset.mytable WITH CONNECTION `us-east1.myconnection` OPTIONS ( format="PARQUET", uris=["gs://mybucket/path/partitionpath=*"], file_set_spec_type = 'NEW_LINE_DELIMITED_MANIFEST' hive_partition_uri_prefix = "gs://mybucket/path/" max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
-
שדרוג טבלאות BigLake
אפשר גם לשפר את הביצועים של עומסי העבודה באמצעות שמירת מטא-נתונים במטמון ותצוגות חומריות. אם רוצים להשתמש בשמירת מטא-נתונים במטמון, אפשר לציין את ההגדרות לכך באותו זמן. כדי לקבל פרטים על הטבלה, כמו פורמט המקור ו-URI המקור, אפשר לעיין במאמר בנושא קבלת מידע על טבלה.
כדי לעדכן טבלה חיצונית לטבלת BigLake או לעדכן טבלת BigLake קיימת, בוחרים באחת מהאפשרויות הבאות:
SQL
כדי לעדכן טבלה, משתמשים בCREATE OR REPLACE EXTERNAL TABLEהצהרת DDL:
במסוף Google Cloud , עוברים לדף BigQuery.
בעורך השאילתות, מזינים את ההצהרה הבאה:
CREATE OR REPLACE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH CONNECTION {`REGION.CONNECTION_ID` | DEFAULT} OPTIONS( format ="TABLE_FORMAT", uris = ['BUCKET_PATH'], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: השם של הפרויקט שמכיל את הטבלה -
DATASET: השם של מערך הנתונים שמכיל את הטבלה -
EXTERNAL_TABLE_NAME: שם הטבלה -
REGION: האזור שבו נמצא החיבור -
CONNECTION_ID: השם של החיבור שרוצים להשתמש בוכדי להשתמש ב חיבור שמוגדר כברירת מחדל, מציינים
DEFAULTבמקום מחרוזת החיבור שמכילהREGION.CONNECTION_ID. -
TABLE_FORMAT: הפורמט שבו הטבלה משתמשתאי אפשר לשנות את ההגדרה הזו כשמעדכנים את הטבלה.
-
BUCKET_PATH: הנתיב לקטגוריית Cloud Storage שמכילה את הנתונים של הטבלה החיצונית, בפורמט['gs://bucket_name/[folder_name/]file_name'].אפשר לבחור כמה קבצים מהמאגר על ידי ציון כוכבית אחת (
*) בנתיב כתו כללי. לדוגמה,['gs://mybucket/file_name*']. מידע נוסף זמין במאמר תמיכה בתווים כלליים בכתובות URI של Cloud Storage.אפשר לציין כמה מאגרי מידע לאפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:['gs://bucket/path1/myfile.csv']['gs://bucket/path1/*.csv']['gs://bucket/path1/*', 'gs://bucket/path2/file00*']
כשמציינים ערכים של
urisשמיועדים לכמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.מידע נוסף על שימוש בכתובות URI של Cloud Storage ב-BigQuery זמין במאמר בנושא נתיב משאב של Cloud Storage.
-
STALENESS_INTERVAL: מציין אם פעולות שמתבצעות בטבלה משתמשות במטא-נתונים ששמורים במטמון, וכמה עדכניים המטא-נתונים צריכים להיות כדי שהפעולה תוכל להשתמש בהם.מידע נוסף על שיקולים לגבי שמירת מטא-נתונים במטמון זמין במאמר שמירת מטא-נתונים במטמון לשיפור הביצועים.
כדי להשבית את שמירת המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)
כדי להפעיל שמירת מטא-נתונים במטמון, צריך לציין ערך של מרווח זמן בין 30 דקות ל-7 ימים. לדוגמה, כדי להגדיר מרווח של 4 שעות, מציינים
INTERVAL 4 HOUR. אם הערך הזה קיים, פעולות שמתבצעות בטבלה משתמשות במטא-נתונים שנשמרו במטמון, אם הם רעננו ב-4 השעות האחרונות. אם המטא-נתונים במטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Cloud Storage. -
CACHE_MODE: מציין אם מטמון המטא-נתונים מתרענן באופן אוטומטי או ידנימידע נוסף על שיקולים בנוגע לשמירת מטא-נתונים במטמון זמין במאמר שמירת מטא-נתונים במטמון לשיפור הביצועים.
מגדירים את הערך
AUTOMATICכדי שהמטמון של המטא-נתונים יתעדכן במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את מטמון המטא-נתונים לפי לוח זמנים שקובעים. במקרה כזה, אפשר להתקשר אלBQ.REFRESH_EXTERNAL_METADATA_CACHEהפרוצדורה של המערכת כדי לרענן את המטמון.חובה להגדיר את
CACHE_MODEאם הערך שלSTALENESS_INTERVALגדול מ-0.
-
לוחצים על הפעלה.
מידע נוסף על הרצת שאילתות זמין במאמר הרצת שאילתה אינטראקטיבית.
BQ
כדי לעדכן טבלה, משתמשים בפקודות bq mkdef ו-bq update:
ליצור הגדרת טבלה חיצונית שמתארת את ההיבטים של הטבלה שרוצים לשנות:
bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \ --source_format=TABLE_FORMAT \ --metadata_cache_mode=CACHE_MODE \ "BUCKET_PATH" > /tmp/DEFINITION_FILE
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: השם של הפרויקט שמכיל את החיבור -
REGION: האזור שמכיל את החיבור -
CONNECTION_ID: השם של החיבור שרוצים להשתמש בו -
TABLE_FORMAT: הפורמט שבו נעשה שימוש בטבלה. אי אפשר לשנות את ההגדרה הזו כשמעדכנים את הטבלה.
CACHE_MODE: מציין אם מטמון המטא-נתונים מתרענן באופן אוטומטי או ידני. מידע נוסף על שיקולים לגבי שמירת מטא-נתונים במטמון זמין במאמר שמירת מטא-נתונים במטמון לשיפור הביצועים.מגדירים את הערך
AUTOMATICכדי שמטמון המטא-נתונים יתעדכן במרווח זמן שמוגדר על ידי המערכת, בדרך כלל בין 30 ל-60 דקות.מגדירים את הערך
MANUALאם רוצים לרענן את מטמון המטא-נתונים לפי לוח זמנים שקובעים. במקרה כזה, אפשר להתקשר אלBQ.REFRESH_EXTERNAL_METADATA_CACHEמערכת ההליכים כדי לרענן את המטמון.חובה להגדיר את
CACHE_MODEאם הערך שלSTALENESS_INTERVALגדול מ-0.
BUCKET_PATH: הנתיב לדלי ב-Cloud Storage שמכיל את הנתונים של הטבלה החיצונית, בפורמטgs://bucket_name/[folder_name/]file_name.כדי להגביל את הקבצים שנבחרו מהמאגר, מציינים כוכבית אחת (
*) בנתיב כתו כללי. לדוגמה,gs://mybucket/file_name*. מידע נוסף זמין במאמר בנושא תמיכה בתווים כלליים בכתובות URI של Cloud Storage.אפשר לציין כמה דליים לאפשרות
urisעל ידי ציון כמה נתיבים.בדוגמאות הבאות מוצגים ערכים תקינים של
uris:gs://bucket/path1/myfile.csvgs://bucket/path1/*.csvgs://bucket/path1/*,gs://bucket/path2/file00*
כשמציינים
urisערכים שמיועדים לכמה קבצים, לכל הקבצים האלה צריכה להיות סכימה תואמת.מידע נוסף על שימוש בכתובות URI של Cloud Storage ב-BigQuery זמין במאמר בנושא נתיב משאב ב-Cloud Storage.
DEFINITION_FILE: השם של קובץ הגדרת הטבלה שאתם יוצרים.
-
מעדכנים את הטבלה באמצעות ההגדרה החדשה של הטבלה החיצונית:
bq update --max_staleness=STALENESS_INTERVAL \ --external_table_definition=/tmp/DEFINITION_FILE \ PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME
מחליפים את מה שכתוב בשדות הבאים:
STALENESS_INTERVAL: מציין אם פעולות שמתבצעות בטבלה משתמשות במטא-נתונים ששמורים במטמון, וכמה עדכניים צריכים להיות המטא-נתונים כדי שהפעולה תוכל להשתמש בהם. מידע נוסף על שיקולים בנוגע לשמירה במטמון של מטא-נתונים זמין במאמר שמירה במטמון של מטא-נתונים לשיפור הביצועים.כדי להשבית את שמירת המטא-נתונים במטמון, מציינים את הערך 0. (זוהי ברירת המחדל)
כדי להפעיל שמירת מטא-נתונים במטמון, צריך לציין ערך של מרווח זמן בין 30 דקות ל-7 ימים, באמצעות הפורמט
Y-M D H:M:Sשמתואר במסמכי התיעוד של סוג הנתוניםINTERVAL. לדוגמה, מציינים0-0 0 4:0:0למרווח של 4 שעות. אם הערך הזה מוגדר, פעולות שמתבצעות בטבלה משתמשות במטא-נתונים שנשמרו במטמון אם הם רעננו ב-4 השעות האחרונות. אם המטא-נתונים שבמטמון ישנים יותר, הפעולה מאחזרת מטא-נתונים מ-Cloud Storage במקום זאת.
DEFINITION_FILE: השם של קובץ הגדרת הטבלה שיצרתם או עדכנתם.
PROJECT_ID: השם של הפרויקט שמכיל את הטבלה
DATASET: השם של מערך הנתונים שמכיל את הטבלה
EXTERNAL_TABLE_NAME: שם הטבלה
שליחת שאילתות לטבלאות BigLake ולטבלאות חיצוניות
אחרי שיוצרים טבלת BigLake, אפשר להריץ עליה שאילתות באמצעות תחביר GoogleSQL, בדיוק כמו בטבלה ב-BigQuery.
לדוגמה, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.
מגבלות
BigQuery תומך רק בשליחת שאילתות לטבלאות Delta Lake reader בגרסה 1.
השילוב בין Hudi ל-BigQuery פועל רק עם טבלאות מחולקות למחיצות (Partitions) בסגנון Hive
copy-on-write.