תצוגת PARTITIONS

התצוגה INFORMATION_SCHEMA.PARTITIONS מכילה שורה אחת לכל מחיצה.

השאילתה של התצוגה INFORMATION_SCHEMA.PARTITIONS מוגבלת ל-1,000 טבלאות. כדי לקבל את הנתונים לגבי המחיצות ברמת הפרויקט, אפשר לפצל את השאילתה לכמה שאילתות ואז לצרף את התוצאות. אם חורגים מהמגבלה, יכול להיות שתופיע שגיאה דומה לזו שבהמשך. כדי לצמצם את התוצאות, אפשר להשתמש במסננים עם ההצהרה WHERE, לדוגמה, table_name = 'mytable' ו-total_logical_bytes IS NOT NULL.

INFORMATION_SCHEMA.PARTITIONS query attempted to read too many tables. Please add more restrictive filters.

ההרשאות הנדרשות

כדי לשלוח שאילתה לתצוגה INFORMATION_SCHEMA.PARTITIONS, צריך את ההרשאות הבאות בממשק לניהול זהויות והרשאות גישה (IAM):

  • bigquery.tables.get
  • bigquery.tables.list

כל אחד מהתפקידים הבאים שמוגדרים מראש ב-IAM כולל את ההרשאות שצוינו למעלה:

  • roles/bigquery.admin
  • roles/bigquery.dataEditor
  • roles/bigquery.dataViewer

מידע נוסף על הרשאות ב-BigQuery זמין במאמר בקרת גישה באמצעות IAM.

סכימה

כשמבצעים שאילתה בתצוגה INFORMATION_SCHEMA.PARTITIONS, בדרך כלל תוצאות השאילתה מכילות שורה אחת לכל מחיצה. החריג הוא כשקיימת שילוב של נתונים ברמת אחסון פעילה ונתונים ברמת אחסון לטווח ארוך במחיצה __UNPARTITIONED__. במקרה כזה, התצוגה מחזירה שתי שורות עבור המחיצה __UNPARTITIONED__, אחת לכל רמת אחסון.

לתצוגה INFORMATION_SCHEMA.PARTITIONS יש את הסכימה הבאה:

שם העמודה סוג נתונים ערך
table_catalog STRING מזהה הפרויקט שמכיל את הטבלה.
table_schema STRING השם של מערך הנתונים שמכיל את הטבלה, שנקרא גם datasetId.
table_name STRING שם הטבלה, שנקרא גם tableId.
partition_id STRING מזהה של מחיצה אחת. בטבלאות לא מחולקות, הערך הוא NULL. בטבלאות עם חלוקה למחיצות שמכילות שורות עם ערכים של NULL בעמודת החלוקה למחיצות, הערך הוא __NULL__.
total_rows INTEGER המספר הכולל של השורות במחיצה.
total_logical_bytes INTEGER המספר הכולל של בייטים לוגיים במחיצה.
total_billable_bytes INTEGER המספר הכולל של בייטים לחיוב במחיצה. אם החיוב על האחסון מבוסס על בייטים פיזיים (דחוסים), הערך הזה לא יהיה זהה למספר TOTAL_LOGICAL_BYTES.
last_modified_time TIMESTAMP הפעם האחרונה שבה נכתבו נתונים למחיצה. הוא משמש לחישוב הזכאות של מחיצה לאחסון לטווח ארוך. אחרי 90 יום, המחיצה עוברת אוטומטית מאחסון פעיל לאחסון לטווח ארוך. מידע נוסף זמין במאמר בנושא תמחור של אחסון ב-BigQuery. השדה הזה מתעדכן כשנתונים מוכנסים, נטענים, מועברים בסטרימינג או משתנים במחיצה. יכול להיות ששינויים שכוללים מחיקות של רשומות לא יסונכרנו.
storage_tier STRING רמת האחסון של המחיצה:

כדי לשמור על יציבות, מומלץ לציין במפורש את העמודות בשאילתות של סכימת המידע, במקום להשתמש בתו כל כללי (SELECT *). ציון מפורש של העמודות מונע את השבירה של השאילתות אם הסכימה הבסיסית משתנה.

היקף ותחביר

שאילתות שמופעלות על התצוגה הזו חייבות לכלול מסנן של מערך נתונים. לשאילתות עם מזהה מערך נתונים, צריכות להיות לכם הרשאות למערך הנתונים. מידע נוסף זמין במאמר בנושא תחביר. בטבלה הבאה מוסברות רמות הפירוט של האזור והמשאבים בתצוגה הזו:

שם התצוגה היקף המשאבים היקף האזור
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.PARTITIONS רמת מערך הנתונים מיקום מערך הנתונים
מחליפים את מה שכתוב בשדות הבאים:
  • אופציונלי: PROJECT_ID: מזהה הפרויקט ב- Google Cloud . אם לא מציינים פרויקט, המערכת משתמשת בפרויקט שמוגדר כברירת מחדל.
  • DATASET_ID: המזהה של מערך הנתונים. מידע נוסף מופיע במאמר בנושא מאפיין מסנן של מערך נתונים.

דוגמאות

דוגמה 1

בדוגמה הבאה מחושב מספר הבייטים הלוגיים שמשמשים כל רמת אחסון בכל הטבלאות במערך נתונים בשם mydataset:

SELECT
  storage_tier,
  SUM(total_logical_bytes) AS logical_bytes
FROM
  `mydataset.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY
  storage_tier;
INFORMATION_SCHEMA

התוצאות אמורות להיראות כך:

+--------------+----------------+
| storage_tier | logical_bytes  |
+--------------+----------------+
| LONG_TERM    |  1311495144879 |
| ACTIVE       |    66757629240 |
+--------------+----------------+

דוגמה 2

בדוגמה הבאה נוצרת עמודה שמחלצת את סוג המחיצה מהשדה partition_id ומצטברת מידע על המחיצה ברמת הטבלה עבור מערך הנתונים הציבורי bigquery-public-data.covid19_usafacts:

SELECT
  table_name,
  CASE
    WHEN regexp_contains(partition_id, '^[0-9]{4}$') THEN 'YEAR'
    WHEN regexp_contains(partition_id, '^[0-9]{6}$') THEN 'MONTH'
    WHEN regexp_contains(partition_id, '^[0-9]{8}$') THEN 'DAY'
    WHEN regexp_contains(partition_id, '^[0-9]{10}$') THEN 'HOUR'
    END AS partition_type,
  min(partition_id) AS earliest_partition,
  max(partition_id) AS latest_partition_id,
  COUNT(partition_id) AS partition_count,
  sum(total_logical_bytes) AS sum_total_logical_bytes,
  max(last_modified_time) AS max_last_updated_time
FROM `bigquery-public-data.covid19_usafacts.INFORMATION_SCHEMA.PARTITIONS`
GROUP BY 1, 2;

התוצאות אמורות להיראות כך:

+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| table_name      | partition_type | earliest_partition | latest_partition_id | partition_count | sum_total_logical_bytes | max_last_updated_time          |
+--------------+-------------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+
| confirmed_cases | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:25.604000 UTC |
| deaths          | DAY            | 20221204           | 20221213            | 10              | 26847302                | 2022-12-13 00:09:24.709000 UTC |
| summary         | DAY            | 20221204           | 20221213            | 10              | 241285338               | 2022-12-13 00:09:27.496000 UTC |
+-----------------+----------------+--------------------+---------------------+-----------------+-------------------------+--------------------------------+