分享方式:


倉儲事件系統數據表參考

重要

此系統資料表處於公開預覽狀態。 若要存取資料表,必須在system目錄啟用結構描述。 如需詳細資訊,請參閱啟用系統資料表結構描述

在本文中,您將瞭解如何使用倉儲事件系統數據表來監視和管理工作區中的 SQL 倉儲。 此數據表會在每次倉儲啟動、停止、執行及相應增加和減少時記錄一個數據列。 您可以使用本文中的範例查詢搭配警示,讓您知道倉儲的變更。

資料表路徑:此系統資料表位於 system.compute.warehouse_events

記錄的倉儲事件類型

此系統資料表會記錄下列型態的事件:

  • SCALED_UP:已將新的叢集新增至倉儲。
  • SCALED_DOWN:叢集已從倉儲中移除。
  • STOPPING:倉儲正在停止。
  • RUNNING:倉儲正在主動執行。
  • STARTING:倉儲正在進行啟動。
  • STOPPED:倉儲已完全停止執行。

倉儲事件架構

系統 warehouse_events 資料表會使用下列架構:

資料行名稱 資料類型 描述 範例
account_id 字串 Azure Databricks 帳戶的識別碼。 7af234db-66d7-4db3-bbf0-956098224879
workspace_id 字串 部署倉儲之工作區的標識碼。 123456789012345
warehouse_id 字串 事件相關的 SQL 倉儲標識碼。 123456789012345
event_type 字串 倉儲事件的類型。 可能的值為 SCALED_UPSCALED_DOWNSTOPPINGRUNNINGSTARTINGSTOPPED SCALED_UP
cluster_count 整數 正在執行中的叢集數目。 2
event_time timestamp 事件發生在 UTC 時的時間戳。 2023-07-20T19:13:09.504Z

範例查詢

下列範例查詢是範本。 插入任何對您的組織有意義的值。 您也可以將這些查詢新增警示,以協助您隨時了解倉儲的變更。 請參閱 建立警示

使用下列範例查詢來深入瞭解倉儲行為:

哪些倉儲正在主動執行,以及多久時間?

此查詢會識別哪些倉儲目前處於作用中狀態,以及其運行時間以小時為單位。

USE CATALOG `system`;

SELECT
we.warehouse_id,
we.event_time,
TIMESTAMPDIFF(MINUTE, we.event_time, CURRENT_TIMESTAMP()) / 60.0 AS running_hours,
we.cluster_count
FROM
compute.warehouse_events we
WHERE
we.event_type = 'RUNNING'
AND NOT EXISTS (
SELECT 1
FROM compute.warehouse_events we2
WHERE we2.warehouse_id = we.warehouse_id
AND we2.event_time > we.event_time
)

警示機會:身為工作區系統管理員,如果倉儲的執行時間超過預期,您可能會想要收到警示。 例如,您可以使用查詢結果來設定警示條件,以在運行時間超過特定閾值時觸發。

識別超預期的超大規模倉儲

此查詢會識別哪些倉儲目前處於作用中狀態,以及其運行時間以小時為單位。

use catalog `system`;

SELECT
   we.warehouse_id,
   we.event_time,
   TIMESTAMPDIFF(MINUTE, we.event_time, CURRENT_TIMESTAMP()) / 60.0 AS upscaled_hours,
   we.cluster_count
FROM
   compute.warehouse_events we
WHERE
   we.event_type = 'SCALED_UP'
   AND we.cluster_count >= 2
   AND NOT EXISTS (
       SELECT 1
       FROM compute.warehouse_events we2
       WHERE we2.warehouse_id = we.warehouse_id
       AND (
           (we2.event_type = 'SCALED_DOWN') OR
           (we2.event_type = 'SCALED_UP' AND we2.cluster_count < 2)
       )
       AND we2.event_time > we.event_time
   )

警示機會:此條件的警示可協助您監視資源和成本。 您可以在高檔時數超過特定限制時設定警示。

第一次啟動的倉儲

此查詢會通知您第一次啟動的新倉儲。

use catalog `system`;

SELECT
   we.warehouse_id,
   we.event_time,
   we.cluster_count
FROM
   compute.warehouse_events we
WHERE
   (we.event_type = 'STARTING' OR we.event_type = 'RUNNING')
   AND NOT EXISTS (
       SELECT 1
       FROM compute.warehouse_events we2
       WHERE we2.warehouse_id = we.warehouse_id
       AND we2.event_time < we.event_time
   )

警示機會:對新倉儲發出警示可協助您的組織追蹤資源配置。 例如,您可以設定每次啟動新倉儲時觸發的警示。

調查計費費用

如果您想要特別瞭解倉儲產生計費費用的方式,此查詢可以告訴您倉儲相應增加或減少的確切日期和時間,或啟動和停止。

use catalog `system`;

SELECT
    we.warehouse_id AS warehouse_id,
    we.event_type AS event,
    we.event_time AS event_time,
    we.cluster_count AS cluster_count
FROM
    compute.warehouse_events AS we
WHERE
    we.event_type IN (
        'STARTING', 'RUNNING', 'STOPPING', 'STOPPED',
        'SCALING_UP', 'SCALED_UP', 'SCALING_DOWN', 'SCALED_DOWN'
    )
    AND MONTH(we.event_time) = 7
    AND YEAR(we.event_time) = YEAR(CURRENT_DATE())
    AND we.warehouse_id = '19c9d68652189278'
ORDER BY
    event_time DESC

過去 30 天內尚未使用哪一個倉庫?

此查詢可協助您識別未使用的資源,並提供成本優化的機會。

use catalog `system`;

SELECT
    we.warehouse_id,
    we.event_time,
    we.event_type,
    we.cluster_count
FROM
    compute.warehouse_events AS we
WHERE
    we.warehouse_id IN (
        SELECT DISTINCT
            warehouse_id
        FROM
            compute.warehouse_events
        WHERE
            MONTH(event_time) = 6
            AND YEAR(event_time) = YEAR(CURRENT_DATE())
    )
    AND we.warehouse_id NOT IN (
        SELECT DISTINCT
            warehouse_id
        FROM
            compute.warehouse_events
        WHERE
            MONTH(event_time) = 7
            AND YEAR(event_time) = YEAR(CURRENT_DATE())
    )
ORDER BY
    event_time DESC

警示機會:收到未使用資源的警示可協助您的組織將成本優化。 例如,您可以設定當查詢偵測到未使用的倉儲時所觸發的警示。

一個月內運行時間最多的倉儲

此查詢會顯示在特定月份內最常使用的倉儲。 此查詢使用 7 月作為範例。

use catalog `system`;

SELECT
   warehouse_id,
   SUM(TIMESTAMPDIFF(MINUTE, start_time, end_time)) / 60.0 AS uptime_hours
FROM (
   SELECT
      starting.warehouse_id,
      starting.event_time AS start_time,
      (
         SELECT
            MIN(stopping.event_time)
         FROM
            compute.warehouse_events AS stopping
         WHERE
            stopping.warehouse_id = starting.warehouse_id
            AND stopping.event_type = 'STOPPED'
            AND stopping.event_time > starting.event_time
      ) AS end_time
   FROM
      compute.warehouse_events AS starting
   WHERE
      starting.event_type = 'STARTING'
      AND MONTH(starting.event_time) = 7
      AND YEAR(starting.event_time) = YEAR(CURRENT_DATE())
) AS warehouse_uptime
WHERE
   end_time IS NOT NULL
GROUP BY
   warehouse_id
ORDER BY
   uptime_hours DESC

警示機會:您可能想要追蹤高使用率的倉儲。 例如,您可以設定當倉儲運行時間時間超過特定閾值時所觸發的警示。

在一個月內花費最多時間的倉儲

此查詢會通知您在一個月內花費大量時間處於高檔狀態的倉儲。 此查詢使用 7 月作為範例。

use catalog `system`;

SELECT
   warehouse_id,
   SUM(TIMESTAMPDIFF(MINUTE, upscaled_time, downscaled_time)) / 60.0 AS upscaled_hours
FROM (
   SELECT
      upscaled.warehouse_id,
      upscaled.event_time AS upscaled_time,
      (
         SELECT
            MIN(downscaled.event_time)
         FROM
            compute.warehouse_events AS downscaled
         WHERE
            downscaled.warehouse_id = upscaled.warehouse_id
            AND (downscaled.event_type = 'SCALED_DOWN' OR downscaled.event_type = 'STOPPED')
            AND downscaled.event_time > upscaled.event_time
      ) AS downscaled_time
   FROM
      compute.warehouse_events AS upscaled
   WHERE
      upscaled.event_type = 'SCALED_UP'
      AND upscaled.cluster_count >= 2
      AND MONTH(upscaled.event_time) = 7
      AND YEAR(upscaled.event_time) = YEAR(CURRENT_DATE())
) AS warehouse_upscaled
WHERE
   downscaled_time IS NOT NULL
GROUP BY
   warehouse_id
ORDER BY
   upscaled_hours DESC

警示機會:您可能想要追蹤高使用率的倉儲。 例如,您可以設定當倉儲運行時間時間超過特定閾值時所觸發的警示。