Поделиться через


Временные таблицы

Область применения:отмечено «Да» Databricks SQL

Это важно

Эта функция доступна в общедоступной предварительной версии.

На этой странице описывается, как использовать временные таблицы для хранения и анализа промежуточных данных в пределах сеанса на вычислительных ресурсах SQL-склада.

Временные таблицы хранят данные в течение сеанса Azure Databricks. Используйте временные таблицы для материализации промежуточных результатов для анализа и конвейеров данных SQL без создания постоянных таблиц в каталоге.

Временные таблицы доступны только в вычислительных ресурсах хранилища SQL. Классические вычислительные ресурсы и бессерверные вычисления пока не поддерживаются.

Когда следует использовать временные таблицы

Используйте временные таблицы, если требуется хранить короткие промежуточные данные во время исследования или разработки рабочих процессов, повторно использовать результаты запросов в нескольких операциях в одном сеансе или работать с табличным интерфейсом без добавления объектов в пространство имен каталога.

Если данные должны сохраняться за пределами текущего сеанса или должны предоставляться другим пользователям или заданиям, используйте постоянную таблицу каталога Unity. См. таблицы под управлением каталога Unity в Azure Databricks для Delta Lake и Apache Iceberg.

Создание временной таблицы

Создайте временную таблицу с помощью 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. Постоянные таблицы в текущей схеме

При создании временной таблицы с тем же именем, что и существующая постоянная таблица, временная таблица имеет приоритет в сеансе. Чтобы явно ссылаться на постоянную таблицу с тем же именем, что и временная таблица, используйте полное трехкомпонентное имя:

-- 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. Когда временная таблица становится недоступной (когда сеанс заканчивается или достигается семидневное ограничение), вы больше не сможете запрашивать данные. Azure Databricks автоматически освобождает хранилище в фоновом режиме, как правило, в течение нескольких дней. Очистка происходит автоматически даже при отключении или неожиданном завершении работы кластера.

Изоляция и привилегии

Любой пользователь может создавать временные таблицы. В Unity Catalog не нужны CREATE TABLE привилегии на каталог или схему.

Временные таблицы обеспечивают изоляцию уровня сеанса. Каждая временная таблица существует только в созданном сеансе. Другие пользователи не могут читать, изменять или обнаруживать существование временных таблиц.

Можно создать временную таблицу с тем же именем, что и существующую постоянную таблицу без столкновения. Дополнительные сведения о том, как Azure Databricks разрешает имена таблиц, см. в статье "Запрос временных таблиц".

Временные таблицы используют пространство имен с временными представлениями. Нельзя создать временную таблицу и временное представление с одинаковым именем в одном сеансе.

Ограничения

Временные таблицы имеют следующие ограничения:

  • Изменения схемы: ALTER TABLE операции не поддерживаются. Чтобы изменить схему временной таблицы, удалите и повторно создайте таблицу.
  • Клонирование: неглубокое и глубокое клонирование не поддерживаются.
  • Перемещение по времени: запросы на поездки по времени не поддерживаются.
  • Потоковая передача. Временные таблицы нельзя использовать в запросах потоковой передачи (например, в foreachBatch операциях).
  • Поддержка API: поддерживаются только API SQL. API DataFrame не поддерживаются.
  • Много-пользовательский доступ к ноутбуку: только один пользователь может взаимодействовать с временными таблицами в сеансе работы с ноутбуком. Второй пользователь не может читать, записывать или создавать временные таблицы в одном сеансе.

Дальнейшие действия