שאילתות לדוגמה בנושא ייצוא נתוני חיוב ב-Cloud

כאן מפורטות כמה דוגמאות לשאילתות של נתוני החיוב ב-Cloud שיוצאו ואוחסנו ב-BigQuery.

למידע נוסף על ייצוא נתוני החיוב ל-BigQuery, תוכלו לקרוא את הסקירה הכללית ואת המידע בנושא מגבלות.

יצירת שאילתות SQL מדוח חיוב

כדי לכתוב מהר שאילתת SQL שמחזירה תוצאות ב-BigQuery שזהות לאלו שמוצגות בדוח החיוב, אפשר להשתמש במאפיין Generate query בדוחות החיוב שזמינים במסוף Google Cloud‏ .

ציון שם הטבלה לשימוש בשאילתות

בדוגמאות הבאות צריך לציין את הנתיב המלא לשם הטבלה בקטע FROM, כדי לשלוח שאילתות לגבי נתוני החיוב שיוצאו מ-Cloud ל-BigQuery. שם הטבלה נקבע לפי שלושה ערכים שמופרדים באמצעות נקודות:

project-ID.dataset_name.BQ_table_name

לדוגמה, נניח שיש לכם חשבון לחיוב ב-Cloud, בחרתם לייצא נתונים מפורטים של עלויות השימוש, ואלו הן הגדרות הייצוא:

  • project-ID: ‏my-billing-project
  • dataset_name: ‏my_billing_dataset
  • BQ_table_name: ‏gcp_billing_export_resource_v1_<BILLING-ACCOUNT-ID>
  • BILLING-ACCOUNT-ID: ‏010101-F0FFF0-10X10X – זה המזהה של החשבון לחיוב ב-Cloud שמכיל את נתוני החיוב שמייצאים. איך מוצאים את המזהה של החשבון לחיוב?

כך כותבים את התנאי FROM בהתאם לערכים לדוגמה:

my-billing-project.my_billing_dataset.gcp_billing_export_resource_v1_010101-F0FFF0-10X10X

שאילתות לדוגמה לפי סוג הנתונים לחיוב ב-Cloud

כאן מופיעות דוגמאות לשאילתות על נתונים סטנדרטיים של עלויות השימוש ,נתונים מפורטים של עלויות השימוש ונתוני תמחור.

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

נתונים סטנדרטיים של עלויות השימוש נתונים מפורטים של עלויות שימוש נתוני תמחור
דוגמאות לשאילתות על נתונים סטנדרטיים של עלויות שימוש דוגמאות לשאילתות של נתונים מפורטים של עלויות שימוש דוגמאות לשאילתות של נתוני תמחור

דוגמאות לשאילתות על נתונים סטנדרטיים של עלויות השימוש

בקטע הזה מפורטות דוגמאות לשאילתות על נתונים סטנדרטיים של עלויות השימוש בחיוב ב-Cloud, שיוצאו ל-BigQuery.

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

ערכים נפוצים שכלולים בדוגמאות לשאילתות על נתוני עלות סטנדרטיים של שימוש

בשאילתות לדוגמה בקטע הזה נעשה שימוש בערך הבא בשביל Table name: project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX

הצגת העלויות הכוללות בחשבונית

השאילתות הבאות מדגימות שתי דרכים להצגת ערכי עלויות וזיכויים באמצעות ייצוא נתוני החיוב.

  • השדה total מסכם באופן ישיר את ערכי העלויות והזיכויים בנקודה צפה (floating point). כתוצאה מכך עלולות להיות שגיאות של עיגול הנקודה הצפה.
  • השדה total_exact ממיר את ערכי העלויות והזיכויים לערכי מיקרו לפני חישוב הסיכום, ואז מבצע המרה בחזרה לדולר אחרי החישוב כדי להימנע משגיאה של עיגול הנקודה הצפה.

דוגמה 1: סיכום של כל העלויות, לכל חשבונית

בשאילתה הזו מוצג הסכום הכולל בחשבונית לכל חודש, כסכום של העלויות הקבועות, המיסים, ההתאמות ושגיאות העיגול.

SQL סטנדרטי

SELECT
  invoice.month,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1
ORDER BY 1 ASC
;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row month total total_exact
1 201901 ‎1005.004832999999984$ 1005.00$‎
2 201902 992.3101739999999717$‎ 992.31$‎
3 201903 1220.761089999999642$‎ 1220.76$‎

דוגמה 2: הצגת פירוט לפי סוג העלות, לכל חודש חיוב בחשבונית

השאילתה הזו מציגה את הסכומים הכוללים לכל ערך בשדה cost_type בכל חודש. סוגי העלויות כוללים עלויות קבועות, מיסים, התאמות ושגיאות עיגול.

SQL סטנדרטי

SELECT
  invoice.month,
  cost_type,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row month cost_type total total_exact
1 201901 regular 1000.501209987994782$‎ 1000.50$‎
2 201901 rounding_error $‎-0.500489920049387 $0.50–
3 201901 tax 10.000329958477891$‎ 10.00$‎
4 201901 adjustment ‎-5.002572999387045$ ‎-5.00$

דוגמאות לשאילתות עם תוויות

בדוגמאות הבאות מופיעות דרכים נוספות לשליחת שאילתות לגבי הנתונים באמצעות תוויות.

לגבי הדוגמאות בקטע הזה, נניח את הפרטים הבאים:

  • יש לכם 2 אפליקציות (grapefruit-squeezer ו-chocolate-masher).
  • לכל אפליקציה יש 2 סביבות (dev ו-prod).
  • בסביבת dev יש מכונה אחת קטנה לכל אפליקציה.
  • בסביבת prod יש מכונה אחת קטנה באמריקה ומכונה אחת קטנה באסיה.
  • כל מכונה מסומנת בתווית שמכילה את האפליקציה והסביבה.
  • יש לכם מכונה אחת בלי תוויות שמשמשת לביצוע ניסויים.

החיוב הכולל הוא 24$‎ לפי הפירוט הבא:

Instance Labels Total Cost
Small instance with 1 vCPU running in Americas אין 4$‎
Small instance with 1 vCPU running in Americas app: chocolate-masher
environment: dev
2$‎
Small instance with 1 vCPU running in Americas app: grapefruit-squeezer
environment: dev
3$‎
Small instance with 1 vCPU running in Americas app: chocolate-masher
environment: prod
3.25$‎
Small instance with 1 vCPU running in Asia app: chocolate-masher
environment: prod
3.75$‎
Small instance with 1 vCPU running in Americas app: grapefruit-squeezer
environment: prod
3.50$‎
Small instance with 1 vCPU running in Asia app: grapefruit-squeezer
environment: prod
4.50$‎

שליחת שאילתה לגבי כל שורה ללא קיבוץ

שאילתה לכל שורה ללא קיבוץ תיצור את התצוגה המפורטת ביותר של העלויות האלה. נניח שכל השדות, מלבד תוויות ותיאורי מק"ט, זהים (פרויקט, שירות וכו').

SQL סטנדרטי

SELECT
  sku.description,
  TO_JSON_STRING(labels) as labels,
 cost as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`;

SQL מדור קודם

TO_JSON_STRING not supported.
Row sku.description labels cost
1 Small instance with 1 vCPU running in Americas [] 4$‎
2 Small instance with 1 vCPU running in Americas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}]‎ 2$‎
3 Small instance with 1 vCPU running in Americas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}]‎ 3$‎
4 Small instance with 1 vCPU running in Americas [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}]‎ 3.25$‎
5 Small instance with 1 vCPU running in Asia [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}]‎ 3.75$‎
6 Small instance with 1 vCPU running in Americas [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}]‎ 3.50$‎
7 Small instance with 1 vCPU running in Asia [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}]‎ 4.50$‎
TOTAL 24$‎

קיבוץ לפי מפת תוויות כמחרוזת JSON

זוהי דרך בסיסית לראות את פירוט העלויות לפי כל שילוב של תוויות.

SQL סטנדרטי

SELECT
  TO_JSON_STRING(labels) as labels,
  sum(cost) as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY labels;

SQL מדור קודם

TO_JSON_STRING not supported.
Row labels cost
1 [] 4$‎
2 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"dev"}]‎ 2$‎
3 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"dev"}]‎ 3$‎
4 [{"key":"app","value":"chocolate-masher"},{"key":"environment","value":"prod"}]‎ 7$‎
5 [{"key":"app","value":"grapefruit-squeezer"},{"key":"environment","value":"prod"}]‎ 8$‎
TOTAL 24$‎

קיבוץ לפי ערך תוויות של מפתח ספציפי

פירוט העלויות לפי ערכים של מַפתח תווית ספציפי הוא תרחיש לדוגמה נפוץ. כשמשתמשים בשאילתת LEFT JOIN ומעבירים את מסנן המַפְתח בתור התנאי של JOIN (במקום WHERE), אתם כוללים עלויות שלא מכילות את המַפְתח הזה וכך יכולים לראות את מלוא העלויות שלכם.

SQL סטנדרטי

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "environment"
GROUP BY environment;

SQL מדור קודם

SELECT
  labels.value as environment,
  SUM(cost) as cost
FROM [project-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX]
WHERE labels.key = "environment" OR labels.key IS NULL
GROUP BY environment;
Row environment cost
1 prod 15$‎
2 dev 5$‎
3 null 4$‎
TOTAL 24$‎

קיבוץ לפי צמדי מפתח/ערך

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

SQL סטנדרטי

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost) as cost
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
GROUP BY key, value;

SQL מדור קודם

SELECT
  labels.key as key,
  labels.value as value,
  SUM(cost)
FROM [project-ID:dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX]
GROUP BY key, value;
Row key value cost
1 null null 4$‎
2 app chocolate-masher 9$‎
3 app grapefruit-squeezer 11$‎
4 environment dev 5$‎
5 environment prod 15$‎
TOTAL 44$‎

שימו לב שהסכום הכולל גבוה מסכום החיוב.

שאילתות בנושא הנחה תמורת התחייבות לשימוש

בשאילתות הבאות מופיעות דרכים שונות לראות את החיובים והזיכויים שמשויכים להנחות תמורת התחייבות לשימוש (CUD) בנתוני החיוב שיוצאו. במאמר שיוך (Attribution) של הנחות תמורת התחייבות לשימוש מוסבר איך העמלות והזיכויים של ההתחייבויות משויכים לפרויקטים ולחשבון לחיוב ב-Cloud.

צפייה בעמלות על התחייבות לשימוש

כדי להציג את העמלות על הנחות תמורת התחייבות לשימוש בנתוני החיוב שיוצאו, אפשר להשתמש בשאילתה לדוגמה הבאה.

SQL סטנדרטי

SELECT
    invoice.month AS invoice_month,
    SUM(cost) as commitment_fees
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE LOWER(sku.description) LIKE "commitment%"
GROUP BY 1

צפייה בזיכויים על התחייבות לשימוש

כדי לראות את הזיכויים של ההנחות תמורת התחייבות לשימוש בנתוני החיוב שיוצאו, אפשר להשתמש בשאילתה לדוגמה הבאה.

SQL סטנדרטי

SELECT
    invoice.month AS invoice_month,
    SUM(credits.amount) as CUD_credits
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(credits) AS credits
WHERE credits.type = "COMMITTED_USAGE_DISCOUNT"
GROUP BY 1

שימוש במסננים של היררכיית המשאבים לבדיקת ישות האב

אפשר להשתמש במסננים של היררכיית המשאבים כדי לצבור עלויות לפי רכיבים בהיררכיה, כמו פרויקטים, תיקיות וארגונים. השאילתות לדוגמה האלה מציגות רכיבי method לסיכום עלויות שמסוננות לפי רכיבים בהיררכיית משאבים, וכן להצגת ישות האב של הפרויקט.

דוגמה 1: סינון לפי שם המשאב

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

String method

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%resource_name\":\"folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

UNNEST method

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.resource_name = "folders/1234"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

דוגמה 2: סינון לפי השם המוצג

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

String matching method

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq
  WHERE TO_JSON_STRING(project.ancestors) like "%display_name\":\"MyFolderName%"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

UNNEST method

SELECT
    invoice.month AS invoice_month,
    TO_JSON_STRING(project.ancestors) as ancestors,
    SUM(cost)
        + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0))
        AS net_cost
  FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX` as bq, UNNEST(project.ancestors) as ancestor
  WHERE ancestor.display_name = "MyFolderName"
  GROUP BY invoice_month, ancestors
  ORDER BY invoice_month, ancestors

דוגמאות לשאילתות עם תגים

בדוגמאות הבאות מתוארות דרכים לשליחת שאילתות לגבי הנתונים באמצעות תגים.

חישוב העלויות לפי חודש החשבונית באמצעות תגים

השאילתה הבאה היא דוגמה להחזרת העלויות לפי חודש החשבונית עם התג cost_center.

SELECT
  invoice.month AS invoice_month,
  tag.value AS cost_center,
  ROUND((SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM (CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0))), 2)
    AS net_cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`, UNNEST(tags) AS tag
WHERE tag.key = "cost_center" AND tag.namespace = "821092389413"
GROUP BY invoice.month, tag.value
ORDER BY invoice.month, tag.value;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row invoice_month cost_center net_cost
1 202208 android_mobile_apps 9.93
2 202208 ios_mobile_apps 9.93
3 202209 android_mobile_apps 25.42
4 202209 ios_mobile_apps 25.4
5 202209 personalization 16.08

צפייה בעלויות של משאבים ללא תגים

בשאילתה הזו מוצג הסכום הכולל בחשבונית לכל משאב ללא תגים, לפי חודש החשבונית.

SELECT
 invoice.month AS invoice_month,
 ROUND((SUM(CAST(cost AS NUMERIC))
   + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                 FROM UNNEST(credits) AS c), 0))), 2)
   AS net_cost
FROM
 `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE "color" NOT IN (SELECT key FROM UNNEST(tags))
GROUP BY invoice_month
ORDER BY invoice_month;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row invoice_month net_cost
1 202202 0
2 202203 16.81
3 202204 54.09
4 202205 55.82
5 202206 54.09
6 202207 55.83
7 202208 31.49

דוגמאות נוספות לשאילתות

שאילתות לפי פרויקט על עלויות וזיכויים בחודש חשבונית ספציפי

אם בחודש של החשבונית מציינים את החודש הספציפי יוני 2020 (בפורמט YYYYMM), השאילתה הזו תחזיר את העלויות והזיכויים כשהם מקובצים לפי פרויקט יחד עם התוויות של הפרויקט.

SQL סטנדרטי

SELECT
  project.name,
  TO_JSON_STRING(project.labels) as project_labels,
  sum(cost) as total_cost,
  SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) as total_credits
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE invoice.month = "202006"
GROUP BY 1, 2
ORDER BY 1;
Row name project_labels total_cost total_credits
1 CTG - Dev [{"key":"ctg_p_env","value":"dev"}]‎ 79.140979 ‎-4.763796
2 CTG - Prod [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"eng"}]‎ 32.466272 ‎-3.073356
3 CTG - Sandbox [{"key":"ctg_p_env","value":"dev"}]‎ 0 0
4 CTG - Storage [{"key":"ctg_p_env","value":"prod"},{"key":"ctg_team","value":"data"}]‎ 7.645793 ‎-0.003761

שאילתות על עלויות כדי לראות תיקונים או עלויות שימוש שחויבו באיחור בחשבונית של חודש ספציפי

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

SQL סטנדרטי

SELECT
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
      FROM   UNNEST(credits) c), 0))
    AS total
FROM `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
    DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01';

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row total
1 3.531752

שאילתות על פרטי עלויות כדי לראות תיקונים או עלויות שימוש שחויבו באיחור לפי שירות בחשבונית של חודש ספציפי

בדוגמה הזו מופיעה שאילתה שבה רואים את סך כל העלויות והזיכויים לפי שירות בחיובים לפי חשבונית, כשתאריך השימוש היה לפני חודש החשבונית. כך אפשר לראות את התיקונים ואת עלויות השימוש שחויבו באיחור (חיובים שהיו אמורים להופיע בחשבונית הקודמת) לפי שירות.

בדוגמה הזו לשאילתה, תנאי השימוש WHERE משמש להצגת כל החיובים שבהם חודש החשבונית הוא מרץ 2024 (בפורמט YYYYMM), אבל שתאריך השימוש היה לפני 1 במרץ 2024.

SELECT
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) AS `Day`,
  service.description AS `Service Description`,
  SUM(CAST(cost_at_list AS NUMERIC)) AS `List cost`,
  SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC)) AS `Negotiated savings`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) AS `Discounts`,
  SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Promotions and others`,
  SUM(CAST(cost_at_list AS NUMERIC)) + SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('SUSTAINED_USAGE_DISCOUNT', 'DISCOUNT', 'SPENDING_BASED_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT', 'FREE_TIER', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'SUBSCRIPTION_BENEFIT', 'RESELLER_MARGIN')), 0)) + SUM(CAST(cost AS NUMERIC)) - SUM(CAST(cost_at_list AS NUMERIC))+ SUM(IFNULL((SELECT SUM(CAST(c.amount AS numeric)) FROM UNNEST(credits) c WHERE c.type IN ('CREDIT_TYPE_UNSPECIFIED', 'PROMOTION')), 0)) AS `Subtotal`
FROM
  `project-ID.dataset.gcp_billing_export_v1_XXXXXX-XXXXXX-XXXXXX`
WHERE
  invoice.month = '202403' AND
  DATE(TIMESTAMP_TRUNC(usage_start_time, Day, 'US/Pacific')) < '2024-03-01'
GROUP BY
  Day,
  service.description
ORDER BY
  Day DESC,
  Subtotal DESC;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row Day Service Description List cost Negotiated savings Discounts Promotions and others Subtotal
1 2024-02-29 Compute Engine 4.39916 0 ‪-1.00916 0 3.39000
2 2024-02-29 Support 0.131969 0 0 0 0.131969
3 2024-02-29 BigQuery 0.005502 0 0 0 0.005502
4 2024-02-29 Networking 0.010972 0 ‪-0.006691 0 0.004281

דוגמאות לשאילתות של נתוני עלות מפורטים של שימוש

בקטע הזה מפורטות דוגמאות לשאילתות על נתונים מפורטים של עלויות השימוש בחיוב ב-Cloud, שיוצאו ל-BigQuery.

מכיוון שהסכימה המפורטת של עלות השימוש כוללת גם את כל השדות מהסכימה הסטנדרטית של עלות השימוש, הדוגמאות לשאילתות שסופקו לנתונים הסטנדרטיים שמיוצאים ל-BigQuery מתאימות גם לנתונים המפורטים שמיוצאים. השאילתות לדוגמה על הנתונים הסטנדרטיים לא מחזירות נתונים ברמת המשאב. כדי לקבל אותם צריך שאילתה על הנתונים המפורטים של עלויות השימוש. כשיוצרים שאילתות על נתונים מפורטים, אפשר להשתמש בשאילתה על הנתונים הסטנדרטיים בתור תבנית, ולאחר מכן לעדכן את שם הטבלה (Table name) ולהוסיף את כל השדות הזמינים בסכימה המפורטת של עלויות השימוש.

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

ערכים נפוצים שכלולים בדוגמאות לשאילתות של נתוני עלות מפורטים

בדוגמאות של השאילתות בקטע הזה נעשה שימוש בערך הבא ל-Table name: project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX

החזרת העלויות ברמת המשאב בחשבונית

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

  • השדה total מסכם באופן ישיר את ערכי העלויות והזיכויים בנקודה צפה (floating point). כתוצאה מכך עלולות להיות שגיאות של עיגול הנקודה הצפה.
  • השדה total_exact ממיר את ערכי העלויות והזיכויים לערכי מיקרו לפני חישוב הסיכום, ואז מבצע המרה בחזרה לדולר אחרי החישוב כדי להימנע משגיאה של עיגול הנקודה הצפה.

סיכום העלויות לכל משאב, לכל חשבונית

בשאילתה הזו מוצג הסכום הכולל בחשבונית לכל משאב resource.name לחודש, כסכום של העלויות הקבועות, המיסים, ההתאמות והשגיאות בעיגול. העלויות שלא משויכות לאף פריט ברמת המשאב נצברות בשם null לאותו החודש.

SQL סטנדרטי

SELECT
  invoice.month,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2
ORDER BY 1 ASC, 2 ASC
;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row month name total total_exact
1 201901 null ‎1005.004832999999984$ 1005.00$‎
2 201901 backend1 781.8499760000028$‎ 781.85$‎
3 201902 null 953.0034923645475983$‎ 953.03$‎
4 201902 backend1 992.3101739999999717$‎ 992.31$‎
5 201902 bitnami-launchpad-wordpress-1-wordpress 1.2817819999999998$‎ 1.28$‎

החזרת פירוט לפי סוג העלות לכל משאב, לכל חודש חיוב בחשבונית

השאילתה הזו מציגה את הסכומים הכוללים לכל cost_type לכל resource.name לחודש. סוגי העלויות כוללים עלויות קבועות, מיסים, התאמות ושגיאות עיגול. העלויות שלא משויכות לאף פריט ברמת המשאב נצברות בשם null לאותו החודש.

SQL סטנדרטי

SELECT
  invoice.month,
  cost_type,
  resource.name,
  SUM(cost)
    + SUM(IFNULL((SELECT SUM(c.amount)
                  FROM   UNNEST(credits) c), 0))
    AS total,
  (SUM(CAST(cost AS NUMERIC))
    + SUM(IFNULL((SELECT SUM(CAST(c.amount AS NUMERIC))
                  FROM UNNEST(credits) AS c), 0)))
    AS total_exact
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
GROUP BY 1, 2, 3
ORDER BY 1 ASC, 2 ASC, 3 ASC
;

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

Row month cost_type name total total_exact
1 201901 regular null 1000.501209987994782$‎ 1000.50$‎
2 201901 rounding_error null $0.500489920049387– $0.50–
3 201901 tax null 10.000329958477891$‎ 10.00$‎
4 201901 adjustment null $5.002572999387045– $5.00–
5 201901 regular backend1 410.998795012082947$‎ 411.00$‎
2 201901 rounding_error backend1 $0.2404900489920378– $0.24–
3 201901 tax backend1 4.105840329977189$‎ 4.11$‎

פירוט העלויות של אשכולות Google Kubernetes Engine (GKE)

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

סינון העלויות ב-GKE

בדוגמאות הבאות מופיעות שאילתות שמאפשרות לסנן ולקבץ את העלויות של GKE לפי סוגי המשאבים הנתמכים, שם האשכול, מרחב השמות והתווית.

עלויות של אשכול GKE לפני זיכויים

SELECT
  SUM(cost) AS cost_before_credits,
  labels.value AS cluster_name
FROM  `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY labels.value
;

עלויות GKE אחרי זיכויים לפי מרחב שמות

SELECT
  labels.value as namespace,
  SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS cost_after_credits,
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
LEFT JOIN UNNEST(labels) as labels
  ON labels.key = "k8s-namespace"
GROUP BY namespace
;

עלויות GKE לפי מק"טים

SELECT
  project.id AS project_id,
  labels.value AS cluster_name,
  sku.id AS sku_id,
  sku.description AS sku_description,
  SUM(cost) AS cost
FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
JOIN UNNEST(labels) AS labels
  ON labels.key = "goog-k8s-cluster-name"
GROUP BY
  cluster_name, project_id, sku_description, sku_id
;

דוגמאות לשאילתות של נתוני תמחור

בקטע הזה מוצגות דוגמאות שונות לשאילתות של נתוני תמחור בחיוב ב-Cloud שיוצאו ל-BigQuery.

ערכים נפוצים שכלולים בדוגמאות לשאילתות של תמחור

בדוגמאות לשאילתות בקטע הזה נעשה שימוש בערכים הבאים:

  • Table name: project-ID.dataset.cloud_pricing_export
  • SKU ID:‏ ‎2DA5-55D3-E679 (Cloud Run – Requests)

הצגת מחירי מחירון למק"ט ספציפי

בדוגמה הזו מופיעה שאילתה בסיסית להצגת הערך בשדה list_price של כל רמת תמחור למק"ט מסוים.

SQL סטנדרטי

SELECT sku.id,  sku.description, list_price.*
FROM `project-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

השדה _PARTITIONTIME נוצר באופן אוטומטי על ידי BigQuery ומייצג את התאריך שאליו שייכים הנתונים. במקום השדה _PARTITIONTIME, אפשר להשתמש בשדה שנוצר באופן מפורש על ידי הייצוא בחיוב ב-Cloud, למשל pricing_as_of_time.

לפניכם אותה שאילתה שהוגדרה להשתמש בשדה pricing_as_of_time:

SELECT sku.id,  sku.description, list_price.*
FROM `project-ID.dataset.cloud_pricing_export`
WHERE DATE(pricing_as_of_time) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

תוצאות השאילתה

Row id description pricing_unit aggregation_info.‎
aggregation_level
aggregation_info.‎
aggregation_interval
tiered_rates.‎
pricing_unit_quantity
tiered_rates.‎
start_usage_amount
tiered_rates.‎
usd_amount
tiered_rates.‎
account_currency_amount
1 2DA5-55D3-E679 Requests COUNT ACCOUNT MONTHLY 1000000 0 0 0
          1000000 2000000 0.4 0.4

הצגת מחירי המחירון למק"ט ספציפי, כולל תיאור של השירות

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

  • בדוגמה 1 מוצג מק"ט אחד לכל שורה, ורמות התמחור מופיעות כנתונים בתצוגת עץ.
  • בדוגמה 2 הנתונים מופיעים שלא בטבלת עץ, כדי להציג שורה אחת לכל מק"ט בכל רמת תמחור.

דוגמה 1: הצגת נתונים בתצוגת עץ

בדוגמה הזו מופיעה שאילתה למק"ט יחיד שנועדה להציג את הנתונים של השדה list_price. למק"ט הזה יש כמה רמות תמחור. הערכים בשדה list price מופיעים בשורות נפרדות, שמוצגות בתצוגת עץ מתחת לשורת מזהה המק"ט.

SQL סטנדרטי

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       list_price.*
FROM project-ID.dataset.cloud_pricing_export
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

תוצאות השאילתה:

Row sku_id sku_description service_id service_description aggregation_info.‎
aggregation_level
aggregation_info.‎
aggregation_interval
tiered_rates.‎
pricing_unit_quantity
tiered_rates.‎
start_usage_amount
tiered_rates.‎
usd_amount
tiered_rates.‎
account_currency_amount
1 2DA5-55D3-E679 Requests 152E-C115-5142 Cloud Run ACCOUNT MONTHLY 1000000 0 0 0
            1000000 2000000 0.4 0.4

דוגמה 2: הצגת נתונים שלא בתצוגת עץ, שמאוחדים באותה טבלה

בדוגמה הזו מופיעה שאילתה למק"ט יחיד שנועדה להציג את הערך בשדה list price. למק"ט יש כמה רמות תמחור. השאילתה מדגימה איך להשתמש באופרטור UNNEST כדי לשטח את המערך tiered_rates ולאחד את השדות לאותה טבלה, כך שכל רמת תמחור תופיע בשורה אחת.

SQL סטנדרטי

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       tier.*
FROM `project-ID.dataset.cloud_pricing_export` as sku_pricing, UNNEST (sku_pricing.list_price.tiered_rates) as tier
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

תוצאות השאילתה:

Row sku_id sku_description service_id service_description pricing_unit_quantity start_usage_amount usd_amount account_currency_amount
1 2DA5-55D3-E679 Requests 152E-C115-5142 Cloud Run 1000000.0 0.0 0.0 0.0
2 2DA5-55D3-E679 Requests 152E-C115-5142 Cloud Run 1000000.0 2000000.0 0.4 0.4

שימוש בטקסונומיית מוצרים ובטקסונומיה גיאוגרפית לשליחת שאילתות לגבי מק"טים

הצגת טקסונומיית המוצרים של מק"ט

בדוגמה הזו מופיעה שאילתה שמציגה את הרשימה product_taxonomy למק"ט מסוים, שבו מזהה המק"ט (SKU ID)‏ = ‎2DA5-55D3-E679 ‏(Cloud Run – Requests)‎.

SQL סטנדרטי

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND sku.id = "2DA5-55D3-E679"
;

תוצאות השאילתה:

Row sku_id sku_description service_id service_description product_taxonomy
1 2DA5-55D3-E679 Requests 152E-C115-5142 Cloud Run GCP
        Serverless
        Cloud Run
        Other

הצגת כל המק"טים בטקסונומיית מוצרים ספציפית

בדוגמה הזו מופיעה שאילתה שמציגה את כל המק"טים שתואמים לערך product_taxonomy מסוים. בשאילתה הזו, הערך Serverless מוגדר בשדה product taxonomy.

SQL סטנדרטי

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       product_taxonomy
FROM `project-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
     AND "Serverless" in UNNEST(product_taxonomy)
LIMIT 10
;

תוצאות השאילתה:

Row sku_id sku_description service_id service_description product_taxonomy
1 0160-BD7B-4C40 Cloud Tasks Network Intra Region Egress F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverless
        Cloud Tasks
        Other
2 FE08-0A74-7AFD Cloud Tasks GOOGLE-API Egress F3A6-D7B7-9BDA Cloud Tasks GCP
        Serverless
        Cloud Tasks
        Other
3 A81A-32A2-B46D Task Queue Storage Salt Lake City F17B-412E-CB64 App Engine GCP
        Serverless
        GAE
        Other
        TaskQueue

הצגת כל המק"טים בטקסונומיה גיאוגרפית ספציפית ובטקסונומיית מוצרים ספציפית

בדוגמה הזו מופיעה שאילתה שמציגה את כל המק"טים שתואמים לאזור geo_taxonomy מסוים ולערך product_taxonomy מסוים, שבהם ‎region = us-east4‎ וגם ‎product_taxonomy = VMs On Demand‎.

SQL סטנדרטי

SELECT sku.id AS sku_id,
       sku.description AS sku_description,
       service.id AS service_id,
       service.description as service_description,
       geo_taxonomy,
       product_taxonomy
FROM `project-ID.dataset.cloud_pricing_export`
WHERE DATE(_PARTITIONTIME) = "2020-07-20"
      AND "VMs On Demand" in UNNEST(product_taxonomy)
      AND geo_taxonomy.type = "REGIONAL"
      AND "us-east4" in UNNEST (geo_taxonomy.regions)
;

תוצאות השאילתה:

Row sku_id sku_description service_id service_description geo_taxonomy.type geo_taxonomy.regions product_taxonomy
1 9174-81EE-425B Sole Tenancy Premium for Sole Tenancy Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
2 C3B9-E891-85ED Sole Tenancy Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB
3 6E2A-DCD9-87ED N1 Predefined Instance Ram running in Virginia 6F81-5844-456A Compute Engine REGIONAL us-east4 GCP
            Compute
            GCE
            VMs On Demand
            Memory: Per GB

שילוב נתוני התמחור עם נתונים מפורטים של עלויות השימוש

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

משתמשים בשם הטבלה של הנתונים המפורטים של עלויות השימוש כדי לשלוף את הנתונים של Exports: ‏gcp_billing_export_resource_v1_<BILLING_ACCOUNT_ID>

משתמשים בשם הטבלה של נתוני התמחור של Prices: ‏project-ID.dataset.cloud_pricing_export

WITH
  Exports AS (
    SELECT *
    FROM `project-ID.dataset.gcp_billing_export_resource_v1_XXXXXX-XXXXXX-XXXXXX`
  ),
  Prices AS (
    SELECT *
    FROM `project-ID.dataset.cloud_pricing_export`
  )
SELECT
  Exports.sku.description AS sku_description,
  Exports.cost,
  Exports.usage,
  FlattenedPrices.pricing_unit_description,
  FlattenedPrices.account_currency_amount,
  FlattenedPrices.account_currency_code,
FROM Exports
JOIN (SELECT * FROM Prices CROSS JOIN UNNEST(Prices.list_price.tiered_rates)) AS FlattenedPrices
  ON
    Exports.sku.id = FlattenedPrices.sku.id
    AND Exports.price.tier_start_amount = FlattenedPrices.start_usage_amount
WHERE
  DATE(Exports.export_time) = '2023-06-30'
  AND DATE(FlattenedPrices.export_time) = '2023-06-30'
  AND cost > 0
LIMIT 1000

לדוגמה, התוצאה של השאילתה הקודמת עשויה להיות:

sku_description cost usage pricing_unit_description account_currency_amount account_currency_code
Balanced PD Capacity 0.001345 ‎{ "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } }‎ gibibyte month 0.1 USD
Balanced PD Capacity 0.001344 ‎{ "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } }‎ gibibyte month 0.1 USD
Balanced PD Capacity 0.001346 ‎{ "usage": { "amount": "38654705664000.0", "unit": "byte-seconds", "amount_in_pricing_units": "0.01345895", "pricing_unit": "gibibyte month" } }‎ gibibyte month 0.1 USD