次の方法で共有


一時テーブル

適用対象: チェック マークあり Databricks SQL

Important

この機能は パブリック プレビュー段階です

このページでは、SQL Warehouse コンピューティングでのセッション スコープの中間データ ストレージと分析に一時テーブルを使用する方法について説明します。

一時テーブルには、Azure Databricks セッションの期間中のデータが格納されます。 カタログに永続的なテーブルを作成せずに、探索的分析または SQL データ パイプラインの中間結果を具体化するには、一時テーブルを使用します。

一時テーブルは、SQL Warehouse コンピューティングでのみ使用できます。 クラシック コンピューティングとサーバーレス コンピューティングはまだサポートされていません。

一時テーブルを使用する場合

探索的分析またはワークフローの開発中に有効期間の短い中間データを格納する必要がある場合、同じセッション内の複数の操作でクエリ結果を再利用する必要がある場合、またはカタログ名前空間にオブジェクトを追加せずにテーブルのようなインターフェイスを操作する必要がある場合は、一時テーブルを使用します。

現在のセッションを超えてデータを保持する必要がある場合、または他のユーザーまたはジョブと共有する必要がある場合は、代わりに永続的な Unity カタログ テーブルを使用します。 Delta Lake と Apache Iceberg 用の Azure Databricks の Unity カタログマネージド テーブルを参照してください。

一時テーブルを作成する

CREATE TEMPORARY TABLEまたはCREATE 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. 現在のスキーマの永続的なテーブル

既存の永続テーブルと同じ名前の一時テーブルを作成すると、セッション内で一時テーブルが優先されます。 一時テーブルと同じ名前の永続テーブルを明示的に参照するには、完全修飾 3 部構成の名前を使用します。

-- 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 セッション内にのみ存在します。 最大有効期間は、セッションの作成から 7 日間です。 セッションが終了するか、7 日後のいずれか早い方になると、一時テーブルにアクセスできなくなります。 これらの制限は、ノートブック、SQL エディター、ジョブ、および JDBC/ODBC セッションに適用されます。

ストレージとクリーンアップ

Azure Databricks は、一時テーブル ストレージを自動的に管理します。 データは、Unity カタログのマネージド テーブルと同様に、クラウド ストレージに保持されます。 一時テーブルにアクセスできなくなった場合 (セッションが終了するか、7 日間の制限に達したとき) は、データのクエリを実行できなくなります。 Azure Databricks では、通常は数日以内にバックグラウンドでストレージが自動的に回収されます。 切断や予期しないクラスターのシャットダウンでも、クリーンアップは自動的に行われます。

分離と特権

すべてのユーザーが一時テーブルを作成できます。 Unity カタログのカタログまたはスキーマに対する CREATE TABLE 権限は必要ありません。

一時テーブルでは、セッション レベルの分離が提供されます。 各一時テーブルは、それを作成したセッション内にのみ存在します。 他のユーザーは、一時テーブルの存在を読み取ったり、変更したり、検出したりすることはできません。

既存の永続テーブルと同じ名前の一時テーブルを競合なく作成できます。 Azure Databricks がテーブル名を解決する方法の詳細については、「 一時テーブルのクエリ」を参照してください。

一時テーブルは、名前空間を一時ビューと共有します。 同じセッション内に同じ名前の一時テーブルと一時ビューの両方を作成することはできません。

制限事項

一時テーブルには、次の制限があります。

  • スキーマの変更: ALTER TABLE 操作はサポートされていません。 一時テーブルのスキーマを変更するには、テーブルを削除して再作成します。
  • 複製: 浅い複製と深い複製はサポートされていません。
  • タイム トラベル: タイム トラベル クエリはサポートされていません。
  • ストリーミング: ストリーミング クエリで一時テーブルを使用することはできません (たとえば、 foreachBatch 操作)。
  • API のサポート: SQL API のみがサポートされています。 DataFrame API はサポートされていません。
  • ノートブックのマルチユーザー アクセス: ノートブック セッションで一時テーブルを操作できるのは 1 人のユーザーだけです。 2 番目のユーザーは、同じセッションで一時テーブルの読み取り、書き込み、または作成を行うことはできません。

次は何ですか