적용 대상:
Databricks SQL
중요합니다
이 기능은 공개 미리보기 단계에 있습니다.
이 페이지에서는 SQL 웨어하우스 컴퓨팅에 대한 세션 범위 중간 데이터 스토리지 및 분석에 임시 테이블을 사용하는 방법을 설명합니다.
임시 테이블은 Azure Databricks 세션 기간 동안 데이터를 저장합니다. 임시 테이블을 사용하여 카탈로그에 영구 테이블을 만들지 않고 예비 분석 또는 SQL 데이터 파이프라인에 대한 중간 결과를 구체화합니다.
임시 테이블은 SQL 웨어하우스 컴퓨팅에서만 사용할 수 있습니다. 클래식 컴퓨팅 및 서버리스 컴퓨팅은 아직 지원되지 않습니다.
임시 테이블을 사용하는 경우
예비 분석 또는 워크플로 개발 중에 단기 중간 데이터를 저장하거나, 동일한 세션 내의 여러 작업에서 쿼리 결과를 다시 사용하거나, 카탈로그 네임스페이스에 개체를 추가하지 않고 테이블과 같은 인터페이스로 작업해야 하는 경우 임시 테이블을 사용합니다.
데이터가 현재 세션 이후에도 유지되어야 하거나 다른 사용자 또는 작업과 공유해야 하는 경우 대신 영구 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구문을 지정하지 마세요. 임시 테이블은 기본적으로 델타 형식을 사용하며 명시적으로 형식을 지정하면 오류가 발생합니다.
임시 테이블 쿼리
단일 파트 이름을 사용하여 임시 테이블을 참조합니다. 카탈로그 또는 스키마를 지정하지 마세요.
-- 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는 다음 순서로 검색합니다.
- 현재 세션의 임시 테이블
- 현재 스키마의 영구 테이블
기존 영구 테이블과 이름이 같은 임시 테이블을 만드는 경우 임시 테이블이 세션 내에서 우선적으로 적용됩니다. 임시 테이블과 이름이 같은 영구 테이블을 명시적으로 참조하려면 정규화된 세 부분으로 구성된 이름을 사용합니다.
-- 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일 후에는 임시 테이블에 액세스할 수 없게 됩니다. 이러한 제한은 Notebook, SQL 편집기, 작업 및 JDBC/ODBC 세션에 적용됩니다.
스토리지 및 정리
Azure Databricks는 임시 테이블 스토리지를 자동으로 관리합니다. 데이터는 Unity 카탈로그 관리 테이블과 유사하게 클라우드 스토리지에 유지됩니다. 임시 테이블에 액세스할 수 없게 되면(세션이 종료되거나 7일 제한에 도달하면) 더 이상 데이터를 쿼리할 수 없습니다. Azure Databricks는 일반적으로 며칠 내에 백그라운드에서 스토리지를 자동으로 회수합니다. 정리는 연결 끊기 또는 예기치 않은 클러스터 종료에도 자동으로 수행됩니다.
격리 및 권한
모든 사용자는 임시 테이블을 만들 수 있습니다. Unity 카탈로그의 카탈로그나 스키마에 대한 CREATE TABLE 권한이 필요하지 않습니다.
임시 테이블은 세션 수준 격리를 제공합니다. 각 임시 테이블은 해당 테이블을 만든 세션 내에만 존재합니다. 다른 사용자는 임시 테이블의 존재를 읽거나 수정하거나 검색할 수 없습니다.
충돌 없이 기존 영구 테이블과 이름이 같은 임시 테이블을 만들 수 있습니다. Azure Databricks가 테이블 이름을 확인하는 방법에 대한 자세한 내용은 임시 테이블 쿼리를 참조하세요.
임시 테이블은 임시 뷰와 네임스페이스를 공유합니다. 동일한 세션에서 이름이 같은 임시 테이블과 임시 뷰를 둘 다 만들 수 없습니다.
제한점
임시 테이블에는 다음과 같은 제한 사항이 있습니다.
-
스키마 수정:
ALTER TABLE작업은 지원되지 않습니다. 임시 테이블의 스키마를 수정하려면 테이블을 삭제하고 다시 만듭니다. - 복제: 단순하고 심층 복제는 지원되지 않습니다.
- 시간 이동: 시간 이동 쿼리는 지원되지 않습니다.
-
스트리밍: 스트리밍 쿼리에서 임시 테이블을 사용할 수 없습니다(예
foreachBatch: 작업). - API 지원: SQL API만 지원됩니다. DataFrame API는 지원되지 않습니다.
- Notebook 다중 사용자 액세스: 한 명의 사용자만 Notebook 세션에서 임시 테이블과 상호 작용할 수 있습니다. 두 번째 사용자는 동일한 세션에서 임시 테이블을 읽거나 쓰거나 만들 수 없습니다.