查詢記錄系統數據表參考

本文包含查詢記錄系統數據表的相關信息,包括數據表架構的大綱。

資料表路徑:此系統資料表位於 system.query.history。

紀錄可用性

紀錄通常一小時內可取得。 新工作空間的資料傳輸可能比這更久。

當查詢歷史表使用客戶管理的金鑰時,此可用性不適用。 參見 「讀取加密欄位」。

使用查詢記錄數據表

查詢歷史表包含使用 SQL 倉庫執行的查詢紀錄、筆記本與作業的無伺服器計算,以及使用 serverless 或經典運算的 Lakeflow 管線。 這個表格包含了你帳戶中所有與你用來存取該工作區相同區域的工作區記錄。

根據預設,只有系統管理員可以存取系統數據表。 如果您想要與使用者或群組共用數據表的數據,Databricks 建議為每個使用者或群組建立動態檢視。 請參閱建立動態檢視。

查詢記錄系統數據表架構

查詢歷程記錄資料表會使用下列架構:

欄位名稱 數據類型 Description Example
account_id 字串 帳戶的 ID。 11e22ba4-87b9-4cc2
-9770-d10b894b7118
workspace_id 字串 執行查詢之工作區的識別碼。 1234567890123456
statement_id 字串 可唯一識別該陳述執行過程的 ID。 可以使用此 ID 來查找「查詢歷史」UI 中的陳述執行狀態。 7a99b43c-b46c-432b
-b0a7-814217701909
session_id 字串 Spark 工作階段 ID。 01234567-cr06-a2mp
-t0nd-a14ecfb5a9c2
execution_status 字串 陳述式終止狀態。 可能的值為:
  • FINISHED:執行成功
  • FAILED:執行失敗,原因如隨附的錯誤訊息中所述
  • CANCELED:執行已取消
FINISHED
compute 結構 結構,表示用來執行語句的計算資源類型,以及適用之資源的標識碼。 其 type 價值為以下之一:
  • WAREHOUSE: 在 SQL 倉庫上執行。
  • SERVERLESS_COMPUTE:運行於無伺服器運算,例如筆記本、工作或 無伺服器的 Lakeflow 管線。
  • CLASSIC_COMPUTE: 運行於經典運算,例如 經典 Lakeflow 管線。
    warehouse_id當 type 是 時WAREHOUSE,欄位才會被填入。 cluster_id這個田野從來沒有人。
{
type: WAREHOUSE,
cluster_id: NULL,
warehouse_id: ec58ee3772e8d305
}
executed_by_user_id 字串 執行語句的使用者 ID。 2967555311742259
executed_by 字串 執行陳述式之使用者的電子郵件地址或使用者名稱。 example@databricks.com
statement_text 字串 SQL 語句的文本。 預設情況下,除非你是帳戶管理員或帳戶層級群組成員databricks_pii_access,否則此欄位會回傳<REDACTED>。 請參閱 存取遮蔽聲明文字。 如果您已設定客戶管理金鑰,請參閱 「讀取加密欄位」。 由於記憶體限制,會壓縮較長的語句文字值。 即使壓縮,您也可能達到字元限制。 SELECT 1
statement_type 字串 陳述式類型。 例如:ALTER、COPY和 INSERT。 SELECT
error_message 字串 描述錯誤狀況的訊息。 如果您已設定客戶管理金鑰,請參閱 「讀取加密欄位」。 [INSUFFICIENT_PERMISSIONS]
Insufficient privileges:
User does not have
permission SELECT on table
'default.nyctaxi_trips'.
client_application 字串 執行語句的用戶端應用程式。 例如:Databricks SQL Editor、Tableau 和 Power BI。 此欄位衍生自用戶端應用程式提供的資訊。 雖然值預期會隨著時間保持靜態,但無法保證這一點。 Databricks SQL Editor
client_driver 字串 用來連線到 Databricks 以執行 語句的連接器。 例如:Databricks SQL Driver for Go、Databricks ODBC Driver、Databricks JDBC Driver。 Databricks JDBC Driver
cache_origin_statement_id 字串 對於從快取擷取的查詢結果,此欄位包含原本將結果插入快取的查詢語句標識符。 如果未從快取擷取查詢結果,此欄位會包含查詢自己的語句標識碼。 01f034de-5e17-162d
-a176-1f319b12707b
total_duration_ms Bigint 語句的總運行時間以毫秒為單位(不包括結果擷取時間)。 1
waiting_for_compute_duration_ms Bigint 等待佈建計算資源所花費的時間 (毫秒)。 1
waiting_at_capacity_duration_ms Bigint 在佇列中等待可用計算容量所花費的時間 (毫秒)。 1
execution_duration_ms Bigint 執行陳述式所花費的時間 (毫秒)。 1
compilation_duration_ms Bigint 載入中繼資料並優化陳述式所花費的時間 (毫秒)。 1
total_task_duration_ms Bigint 所有任務持續時間的總和 (毫秒)。 此時間代表跨所有節點的所有核心執行查詢所花費的總時間。 如果並行執行多個任務,可能會比掛鐘持續時間長得多。 如果任務等待可用節點,則可能會比掛鐘持續時間短。 1
result_fetch_duration_ms Bigint 執行完成後擷取陳述式結果所花費的時間 (毫秒)。 1
start_time 時間戳記 Databricks 收到要求的時間。 時區資訊會記錄在值結尾,+00:00 表示 UTC。 2022-12-05T00:00:00.000+0000
end_time 時間戳記 陳述式執行結束的時間,不包括結果擷取時間。 時區資訊會記錄在值結尾,+00:00 表示 UTC。 2022-12-05T00:00:00.000+00:00
update_time 時間戳記 陳述上次收到進度更新的時間。 時區資訊會記錄在值結尾,+00:00 表示 UTC。 2022-12-05T00:00:00.000+00:00
read_partitions Bigint 修剪後讀取分割區的數量。 1
pruned_files Bigint 剪除的檔案數目。 1
read_files Bigint 修剪後讀取的檔案數目。 1
read_rows Bigint 陳述式所讀取的資料列總數。 1
produced_rows Bigint 陳述式所傳回的資料列總數。 1
read_bytes Bigint 陳述式讀取的資料總大小為位元組數。 1
pruned_files_bytes Bigint 在資料表分割區和檔案修剪後,所剪除的檔案位元組數。 1
read_files_bytes Bigint 在資料表分割區和檔案修剪後,所讀取的檔案位元組數。 1
read_io_cache_percent int 從 IO 快取中讀取的持久性數據的位元組百分比。 50
from_result_cache boolean TRUE 表示從快取中擷取陳述式結果。 TRUE
spilled_local_bytes Bigint 執行陳述式時暫時寫入磁碟的資料大小 (位元組)。 1
written_bytes Bigint 寫入雲端物件儲存體之永續性資料的位元組大小。 1
written_rows Bigint 寫入雲端物件記憶體的持續性數據列數。 1
written_files Bigint 寫入雲端物件記憶體之永續性數據的檔案數目。 1
shuffle_read_bytes Bigint 透過網路傳送的資料總量 (位元組)。 1
query_source 結構 結構體,包含代表參與執行此語句的 Databricks 實體的鍵值對,例如作業、筆記本或儀表板。 此欄位只會記錄 Databricks 實體。 {
alert_id: 81191d77-184f-4c4e-9998-b6a4b5f4cef1,
sql_query_id: null,
dashboard_id: null,
notebook_id: null,
job_info: {
job_id: 12781233243479,
job_run_id: null,
job_task_run_id: 110373910199121
},
legacy_dashboard_id: null,
genie_space_id: null
}
query_parameters 結構 結構,包含參數化查詢中使用的具名和位置參數。 具名參數會以鍵值對表示,將參數名稱對應至值。 位置參數會以清單表示,其中索引會指出參數位置。 一次只能有一種類型(命名或位置)存在。 {
named_parameters: {
"param-1": 1,
"param-2": "hello"
},
pos_parameters: null,
is_truncated: false
}
executed_as 字串 用來執行陳述式之權限的使用者或服務主體名稱。 example@databricks.com
executed_as_user_id 字串 用來執行陳述式之權限的使用者或服務主體識別碼。 2967555311742259
query_tags map<string, string> 在查詢中套用自訂的鍵值標籤,以進行分組、篩選及成本歸因。 標籤可透過會話設定參數或 SET QUERY_TAGS SQL 陳述式設定。 僅含鍵的標籤具有null值。 此欄位僅用於在 SQL 倉庫執行的查詢。 請參閱 查詢標籤。 {
"team": "engineering",
"cost_center": "701",
"env": "prod"
}

存取遮罩語句文字

SQL 語句可能包含敏感資訊,如客戶姓名、電子郵件地址或其他個人識別資訊(PII)。 statement_text該欄位預設會回傳<REDACTED>。 帳號管理員及群組成員 databricks_pii_access 可閱讀完整的查詢文字。

要建立群組並管理其成員資格與權限,請參閱 「建立與管理 databricks_pii_access 群組」。

排解重疊欄位遮罩問題

例如,如果你已經對 套用欄位遮罩statement_text,例如使用屬性基礎存取控制(ABAC)政策,對 system.query.history 的查詢可能會失敗。COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS 同一使用者只能套用一個欄位遮罩。

要解決衝突,你必須是元商店管理員或有 MANAGE 相關討論。 使用衝突過濾器和遮罩來辨識重疊的政策,然後縮小範圍或移除遮罩。statement_text

讀取加密欄位

當工作空間使用 客戶管理的金鑰來管理服務時, statement_text 系統資料表中的 and error_message 欄位預設是加密的。 這是因為系統資料表會儲存區域內所有工作區的資料,且可存取。 要解密並顯示加密的系統表格欄位,帳號管理員必須在 system 目錄本身新增金鑰設定。 你必須擁有 MANAGE 在 system 目錄上的許可才能執行此操作。

當查詢歷史資料表使用客戶管理的金鑰時,典型的紀錄可用性不適用於紀錄 可用性 。

Warning

在目錄中新增金鑰配置 system 會移除你之前套用到 system.query 結構和 system.query.history 表格的任何 Unity 目錄授權,並將它們重置為預設授權。 由於授權是元商店層級,這會影響所有連接於元商店的工作區,包括你未執行該指令的工作區。 啟用客戶管理金鑰後,重新套用所有自訂授權。system.querysystem.query.history

你可以建立 一個新的金鑰 ,或是重複使用現有的金鑰。 使用完整金鑰 ID,執行以下指令:

curl -v -X PATCH https://my-workspace-url/api/2.1/unity-catalog/catalogs/system -H 'Authorization: Bearer <pat token>' --data '{
"managed_encryption_settings": {
        "azure_key_vault_key_id": "https://my-key-vault.vault.azure.net/keys/my-key-name/my-key-version",
        "azure_encryption_settings": {
          "azure_tenant_id": "my-tenant-id"
        }
      }
}'

允許啟用時間最多可達24小時。 啟用完成後, system.query.history 開始顯示所有新紀錄的加密欄位。 啟用前建立的紀錄無法解密。

備註

每個中繼商店的 system 目錄不同,因此客戶管理的金鑰必須分別為每個中繼商店設定。 不過,同一區域內的元儲存庫可以設定使用相同的金鑰。

檢視記錄的查詢概要

若要根據查詢歷史表中的某個記錄導航至查詢設定檔,請執行下列動作:

  1. 辨識感興趣的記錄,然後複製記錄的 statement_id。
  2. 參考記錄的 workspace_id ,以確保您已登入與記錄相同的工作區。
  3. 按一下歷程記錄圖示。在工作區側邊欄中查詢歷程記錄。
  4. 在[陳述式 ID]欄位中,將記錄中的 貼上。
  5. 按一下查詢的名稱。 查詢計量的概觀隨即出現。
  6. 按一下查看查詢設定檔。

了解掃描指標

查詢歷史表包含掃描過程中收集的多項指標。 你可以從表格的欄位計算以下額外指標:

  • table_bytes:掃描資料表中檔案的總壓縮大小(以位元組計)。 計算為 pruned_files_bytes + read_files_bytes。
  • table_files:掃描資料表中檔案總數。 計算為 read_files + pruned_files。

備註

read_bytes 與 不可直接比較 table_bytes。 table_bytes、、 read_files_bytes以及 pruned_files_bytes 是壓縮後的磁碟檔案大小。 與這些檔案大小不同,這是 read_bytes 衡量經過欄位與列群組剪枝後實際讀取的資料。 它結合了從雲端儲存讀取的壓縮資料與從磁碟快取提供的未壓縮資料,且當重試讀取時,讀取值還會進一步增加。 因此,可以 read_bytes 超過 table_bytes。

瞭解 query_source 欄

query_source列包含一組在語句執行中涉及的Azure Databricks實體的唯一識別碼。

如果數據 query_source 行包含多個標識碼,表示語句執行是由多個實體觸發。 例如,作業結果可能會觸發呼叫 SQL 查詢的警示。 在此範例中,這三個識別碼都會填入query_source內。 此數據行的值不會依執行順序排序。

可能的查詢來源如下:

有效的查詢來源組合

下列範例示範如何 query_source 根據查詢的執行方式填入數據行:

  • 作業執行期間執行的查詢包括填入 job_info 的結構體:

    {
    alert_id: null,
    sql_query_id: null,
    dashboard_id: null,
    notebook_id: null,
    job_info: {
    job_id: 64361233243479,
    job_run_id: null,
    job_task_run_id: 110378410199121
    },
    legacy_dashboard_id: null,
    genie_space_id: null
    }

  • 警示查詢包括 sql_query_id 與 : alert_id

    {
    alert_id: e906c0c6-2bcc-473a-a5d7-f18b2aee6e34,
    sql_query_id: 7336ab80-1a3d-46d4-9c79-e27c45ce9a15,
    dashboard_id: null,
    notebook_id: null,
    job_info: null,
    legacy_dashboard_id: null,
    genie_space_id: null
    }

  • 來自儀錶板的查詢包括 dashboard_id,但沒有 job_info:

    {
    alert_id: null,
    sql_query_id: null,
    dashboard_id: 887406461287882,
    notebook_id: null,
    job_info: null,
    legacy_dashboard_id: null,
    genie_space_id: null
    }