メインコンテンツまでスキップ

一時テーブル

適用対象: チェックマーク「はい」 Databricks SQL

備考

プレビュー

この機能はパブリック プレビュー段階です。プレビュー登録は プレビュー ページで確認できます。「Databricks プレビューの管理」を参照してください。

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

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

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

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

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

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

一時テーブルを作成する

CREATE TEMPORARY TABLEまたはCREATE TEMP TABLE構文を使用して一時テーブルを作成します。定義されたスキーマを使用して空のテーブルを作成することも、クエリ結果からテーブルを作成することもできます。

SQL
-- 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 形式が使用され、形式を明示的に指定するとエラーが発生します。

一時テーブルをクエリする

単一部分の名前を使用して一時テーブルを参照します。カタログまたはスキーマを指定しないでください。

SQL
-- 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;

単一部分の名前を持つテーブルを参照すると、Databricks は次の順序で検索します。

  1. 現在のセッションの一時テーブル
  2. 現在のスキーマ内の永続テーブル

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

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

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

Databricksでの名前解決の詳細については、 「名前解決」を参照してください。

一時テーブルを変更する

標準の DML 操作を使用して、一時テーブルにデータを挿入、更新、およびマージできます。

SQL
-- 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を使用するか、代わりにフィルタリングされたデータでテーブルを再作成してください。

一時テーブルを削除する

Databricks はセッションが終了すると自動的に一時テーブルを削除しますが、不要になった場合は明示的に削除できます。

SQL
-- Drop a temporary table
DROP TEMP TABLE temp_customers;

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

ライフサイクルと時間制限

一時テーブルは、それを作成した Databricks セッション内にのみ存在します。最大有効期間はセッション作成から 7 日間です。一時テーブルは、セッションが終了したとき、または 7 日が経過したときのいずれか早い時点でアクセスできなくなります。これらの制限は、ノートブック、SQL エディター、ジョブ、JDBC/ODBC セッションに適用されます。

保管と清掃

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

孤立と特権

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

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

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

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

制限事項

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

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

次は何か