共用方式為


暫存資料表

適用於:勾選「是」 Databricks SQL

這很重要

這項功能目前處於 公開預覽版

本頁說明如何在 SQL 倉庫運算中,使用暫存資料表進行會話範圍的中介資料儲存與分析。

暫存表會儲存 Azure Databricks 會話期間的資料。 使用暫存資料表來實現探索性分析或 SQL 資料管線的中間結果,而不必在目錄中建立永久資料表。

暫存資料表僅在 SQL 倉庫運算中提供。 經典運算與無伺服器運算尚未支援。

何時使用暫存資料表

當你需要在探索性分析或工作流程開發中儲存短暫的中間資料、在同一會話中重複使用多次操作的查詢結果,或使用類似表格的介面而不在目錄命名空間中新增物件時,可以使用暫存表格。

如果你的資料需要在目前會話之外持續存在,或必須與其他使用者或工作共享,請改用永久的 Unity 目錄資料表。 請參閱 Azure Databricks 中,Unity Catalog 管理的 Delta Lake 和 Apache Iceberg 表格

建立暫存資料表

請用 CREATE TEMPORARY TABLECREATE TEMP TABLE 語法建立一個臨時表格。 你可以建立一個有定義結構的空資料表,或是從查詢結果建立一個資料表。

-- Create an empty temporary table with a defined schema
CREATE TEMPORARY TABLE temp_customers (
  id INT,
  name STRING,
  email STRING
);

-- Create a temporary table from query results
CREATE TEMP TABLE temp_recent_orders AS
SELECT order_id, customer_id, order_date, amount
FROM prod.sales.orders
WHERE order_date >= current_date() - INTERVAL 30 DAYS;

-- Create a temporary table using VALUES clause
CREATE TEMP TABLE temp_test_data AS
VALUES
  (9001, 101, 50.00),
  (9002, 204, 75.00),
  (9003, 101, 25.00)
AS t(order_id, customer_id, amount);

備註

  • CREATE OR REPLACE TEMP TABLE 語法尚未被支援。 要替換臨時資料表,先丟掉它,再重新建立。
  • 建立暫存資料表時不要指定 USING 子句。 暫存資料表預設使用 Delta 格式,明確指定格式會產生錯誤。

查詢暫存資料表

使用單一部分名稱參考暫存資料表。 不要指定目錄或結構。

-- Query a temporary table
SELECT * FROM temp_customers;

-- Join temporary tables with permanent tables
SELECT
  c.name,
  o.order_id,
  o.amount
FROM temp_customers c
INNER JOIN temp_recent_orders o
  ON c.id = o.customer_id;

當你參考一個單一部分名稱的資料表時,Azure Databricks 會依以下順序搜尋:

  1. 目前會話中的暫存資料表
  2. 目前架構中的永久資料表

如果你建立一個與現有永久資料表名稱相同的暫存資料表,該臨時資料表在你的工作階段中會優先。 若要明確參考與暫存資料表名稱相同的永久資料表,請使用完全限定的三部分名稱:

-- References temporary table (if it exists)
SELECT * FROM customers;

-- Explicitly references permanent table
SELECT * FROM prod.sales.customers;

欲了解更多關於 Azure Databricks 中名稱解析的資訊,請參閱 名稱解析

修改暫存資料表

您可以使用標準的 DML 操作,將資料插入、更新及合併到暫存資料表中。

-- Insert data into a temporary table
INSERT INTO temp_customers VALUES (101, 'Jane Doe', 'jane@example.com');

-- Insert from a query
INSERT INTO temp_customers
SELECT id, name, email
FROM prod.customer.active_customers
WHERE region = 'US-WEST';

-- Update rows in a temporary table
UPDATE temp_recent_orders
SET amount = amount * 0.90
WHERE customer_id = 101;

-- Merge data into a temporary table
MERGE INTO temp_customers target
USING prod.customer.new_signups source
ON target.id = source.id
WHEN MATCHED THEN UPDATE SET *
WHEN NOT MATCHED THEN INSERT *;

備註

DELETE FROM 暫時資料表尚未支援操作。 使用 MERGE INTO 篩選條件,或用過濾資料重新建立表格。

丟棄暫存資料表

Azure Databricks 會在你的會話結束時自動丟棄暫存資料表,但如果你不再需要,也可以明確丟棄它們。

-- Drop a temporary table
DROP TEMP TABLE temp_customers;

-- Drop only if it exists
DROP TEMP TABLE IF EXISTS temp_recent_orders;

生命週期與時間限制

暫存資料表只存在於你建立它們的 Azure Databricks 會話中。 從會話建立的那一刻起,最長壽命為七天。 臨時資料表在會話結束或七天後(以先到者為準)時無法存取。 這些限制適用於筆記本、SQL 編輯器、工作以及 JDBC/ODBC 會話。

儲存與清理

Azure Databricks 會自動管理暫存資料表儲存。 資料會儲存在雲端儲存,類似於 Unity Catalog 管理的資料表。 當臨時資料表無法存取(會話結束或達到七天限制時),你就無法再查詢該資料。 Azure Databricks 會在背景自動回收儲存空間,通常幾天內完成。 即使斷線或叢集意外關機,清理也會自動完成。

孤立與特權

任何使用者都可以建立暫存資料表。 您不需要在 Unity Catalog 中擁有 CREATE TABLE 對目錄或是結構的權限。

暫存資料表提供會話層級的隔離。 每個臨時資料表只存在於建立它的會話中。 其他使用者無法讀取、修改或偵測你的暫存資料表。

你可以建立一個與現有永久資料表同名的臨時資料表,且不會有碰撞。 關於 Azure Databricks 如何解析資料表名稱的詳細資訊,請參見 查詢暫存資料表

臨時資料表與暫時檢視共用命名空間。 在同一個會話中,您無法以相同名稱同時建立臨時資料表和臨時視圖。

局限性

暫存資料表有以下限制:

  • 架構修改ALTER TABLE不支援操作。 若要修改暫存資料表的結構,請刪除並重建該資料表。
  • 克隆:不支援淺層克隆和深度克隆。
  • 時間旅行:不支援時間旅行查詢。
  • 串流:你不能在串流查詢中使用暫存資料表(例如在 foreachBatch 操作中)。
  • API 支援:僅支援 SQL API。 不支援 DataFrame API。
  • 筆記本多使用者存取:在筆記本會話中,只有一位使用者可以與臨時資料表互動。 第二位使用者無法在同一會話中讀取、寫入或建立暫存資料表。

下一步是什麼