Dočasné tabulky v Databricks SQL a Databricks Runtime

Platí pro:zaškrtnuto jako ano Databricks SQL zaškrtnuto jako ano Databricks Runtime 18.1 a vyšší

Dočasné tabulky ukládají data po dobu trvání relace Azure Databricks. Dočasné tabulky slouží k materializaci průběžných výsledků pro průzkumné analýzy nebo datové kanály SQL bez vytváření trvalých tabulek v katalogu.

Kdy použít dočasné tabulky

Dočasné tabulky použijte, když potřebujete:

  • Během průzkumné analýzy nebo vývoje pracovních postupů ukládejte krátkodobá průběžná data.
  • Znovu používejte výsledky dotazů ve více operacích v rámci jedné relace.
  • Použijte rozhraní podobné tabulce bez přidání objektů do oboru názvů katalogu.

Pokud vaše data potřebují přetrvat nad rámec aktuální relace nebo musí být sdílena s jinými uživateli či úlohami, použijte místo toho neměnnou tabulku v Unity Catalog. Viz tabulky spravované službou Unity Catalog pro Delta Lake a Apache Iceberg.

Vytvoření nebo nahrazení dočasné tabulky

Vytvořte dočasnou tabulku pomocí CREATE TEMPORARY TABLE nebo CREATE TEMP TABLE syntaxe. Můžete vytvořit prázdnou tabulku s definovaným schématem nebo vytvořit tabulku z výsledků dotazu.

Nahrazení dočasné tabulky pomocí [CREATE OR] REPLACE TEMPORARY TABLE nebo [CREATE OR] REPLACE TEMP TABLE. CREATE OR je nepovinný. Po zadání příkaz vytvoří novou dočasnou tabulku, pokud neexistuje dočasná tabulka se stejným názvem.

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

-- Replace the temporary table with a new defined schema
REPLACE TEMP TABLE temp_customers (
  id INT,
  name STRING,
  email STRING
);

-- Create or replace a temporary table from query results
CREATE OR REPLACE 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);

Poznámka:

  • Při vytváření dočasných tabulek nezadávejte USING klauzuli. Dočasné tabulky ve výchozím nastavení používají formát Delta Lake a explicitní zadání formátu způsobí chybu.
  • Chcete-li vytvořit dočasnou tabulku, je nutné zadat klíčové slovo REPLACE nebo TEMPORARY. Bez klíčového TEMPORARY slova REPLACE nahradí pouze trvalou tabulku.

Dotazování dočasných tabulek

Odkazujte na dočasné tabulky pouze pomocí názvu tabulky. Nezadávejte katalog ani schéma.

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

Když odkazujete na tabulku pouze pomocí názvu tabulky, Azure Databricks prohledává následující pořadí:

  1. Dočasné tabulky v aktuální relaci
  2. Trvalé tabulky v aktuálním schématu

Pokud vytvoříte dočasnou tabulku se stejným názvem jako existující trvalá tabulka, bude mít dočasná tabulka přednost v rámci relace. Pokud chcete explicitně odkazovat na trvalou tabulku se stejným názvem jako dočasná tabulka, použijte plně kvalifikovaný název v oboru názvů na tří úrovních:

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

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

Další informace o rozlišení názvů v Azure Databricks najdete v tématu Name resolution.

Úprava dočasných tabulek

Data můžete vložit, aktualizovat a sloučit do dočasných tabulek pomocí standardních operací 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 *;

Poznámka:

DELETE FROM Operace nejsou podporovány pro dočasné tabulky. Použijte MERGE INTO místo toho s podmínkami filtrování nebo znovu vytvořte tabulku s filtrovanými daty.

Vyřazení dočasných tabulek

Azure Databricks po skončení relace automaticky zahodí dočasné tabulky. Pokud už dočasné tabulky nepotřebujete, můžete je explicitně odstranit.

-- Drop a temporary table
DROP TEMP TABLE temp_customers;

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

Životní cyklus a časové limity

Dočasné tabulky existují pouze v Azure Databricks relaci, ve které je vytvoříte. Maximální životnost je sedm dnů od vytvoření relace. Dočasné tabulky se stanou nedostupnými, když relace skončí, nebo po sedmi dnech, podle toho, co nastane dříve. Tato omezení platí pro poznámkové bloky, Editor SQL, úlohy a relace JDBC/ODBC.

Úložiště a vyčištění

Azure Databricks automaticky spravuje dočasné úložiště tabulek. Data se uchovávají v cloudovém úložišti s konkrétním umístěním úložiště v závislosti na typu vašeho pracovního prostoru:

Když se dočasná tabulka stane nepřístupnou (když relace skončí nebo dosáhne sedmidenního limitu), nebudete se už moct dotazovat na data. Azure Databricks automaticky uvolní úložiště na pozadí. To zahrnuje případy, kdy relace končí kvůli odpojení nebo neočekávanému vypnutí clusteru. Vyčištění se obvykle dokončí během několika dnů.

Izolace a oprávnění

Každý uživatel může vytvářet dočasné tabulky. V katalogu Unity nepotřebujete CREATE TABLE oprávnění k katalogu nebo schématu.

Dočasné tabulky poskytují izolaci na úrovni relace. Každá dočasná tabulka existuje pouze v rámci relace, která ji vytvořila. Nikdo jiný nemůže číst, upravovat ani zjišťovat existenci dočasných tabulek.

Můžete vytvořit dočasnou tabulku se stejným názvem jako existující trvalou tabulku bez kolize. Podrobnosti o tom, jak Azure Databricks rozlišuje názvy tabulek, najdete v tématu Dotaz na dočasné tabulky.

Dočasné tabulky sdílejí jmenný prostor s dočasnými zobrazeními. Ve stejné relaci nemůžete vytvořit dočasnou tabulku i dočasné zobrazení se stejným názvem.

Omezení

Dočasné tabulky mají následující omezení:

  • Úpravy schématu: ALTER TABLE Operace nejsou podporovány. Pokud chcete změnit schéma dočasné tabulky, nahraďte tabulku.
  • Klonování: Mělké a hluboké klonování se nepodporuje.
  • Časové cestování: Dotazy na cestování časem nejsou podporovány.
  • Streamování: V dotazech streamování nemůžete použít dočasné tabulky (například v foreachBatch operacích).
  • Podpora rozhraní API: Podporují se pouze rozhraní API SQL. Rozhraní API pro datové rámce nejsou podporována.
  • Notebook multi-user access: Dočasnými tabulkami v rámci sezení v notebooku může pracovat jen jeden uživatel. Druhý uživatel nemůže číst, zapisovat ani vytvářet dočasné tabulky v rámci téže relace.
  • Vyhrazené clustery: Dočasné tabulky nejsou podporovány ve vyhrazených clusterech (pro jednoho uživatele).
  • Azure Government oblasti: Dočasné tabulky nejsou v oblastech Azure Government podporovány.

Další zdroje informací