Sdílet prostřednictvím


Virtualizace tabulky Delta pomocí PolyBase

platí pro: SQL Server 2022 (16.x) a novější verze

SQL Server 2022 (16.x) může dotazovat data přímo ze složky tabulky Delta. Tento koncept, běžně označovaný jako virtualizace dat, umožňuje, aby data zůstala v původním umístění, ale dají se dotazovat z instance SQL Serveru pomocí příkazů T-SQL, jako jsou všechny ostatní tabulky. Tato funkce používá konektory PolyBase a minimalizuje potřebu kopírování dat prostřednictvím procesů ETL.

V následujícím příkladu je složka tabulky Delta uložená ve službě Azure Blob Storage a přístupná přes OPENROWSET nebo externí tabulku.

Další informace o virtualizaci dat představujeme virtualizaci dat pomocí PolyBase.

Předkonfigurace

1. Povolení PolyBase v sp_configure

exec sp_configure @configname = 'polybase enabled', @configvalue = 1;

RECONFIGURE;

2. Vytvoření uživatelské databáze

Toto cvičení vytvoří ukázkovou databázi s výchozím nastavením a umístěním. Tuto prázdnou ukázkovou databázi použijete k práci s daty a uložení vymezených přihlašovacích údajů. V tomto příkladu se použije nová prázdná databáze s názvem Delta_demo .

CREATE DATABASE [Delta_demo];

3. Vytvořte hlavní klíč a přihlašovací údaje omezené na databázi

Hlavní klíč databáze v uživatelské databázi je nutný k šifrování tajného klíče přihlašovacích údajů s vymezeným oborem databáze. delta_storage_dsc V tomto příkladu se tabulka Delta nachází v Azure Data Lake Storage Gen2.

USE [Delta_demo];
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';

4. Vytvoření externího zdroje dat

Přihlašovací údaje s vymezeným oborem databáze se používají pro externí zdroj dat. V tomto příkladu se delta tabulka nachází ve službě Azure Data Lake Storage Gen2, takže použijte předponu adls a metoda SHARED ACCESS SIGNATURE identity. Další informace o konektorech a předponách, včetně nových nastavení pro SQL Server 2022 (16.x), najdete v tématu VYTVOŘENÍ EXTERNÍHO ZDROJE DAT.

CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = delta_storage_dsc
);

Pokud je například váš účet úložiště pojmenovaný delta_lake_sample a kontejner má název sink, kód by byl:

CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
    LOCATION = 'adls://sink@delta_lake_sample.dfs.core.windows.net',
    CREDENTIAL = delta_storage_dsc
);

Použití OPENROWSET pro přístup k datům

V tomto příkladu je složka Tabulka dat pojmenována Contoso.

Vzhledem k tomu, že externí zdroj Delta_ED dat je mapován na úroveň kontejneru. Složka Contoso tabulky Delta se nachází v kořenovém adresáři. Pokud chcete dotazovat soubor ve struktuře složek, zadejte mapování složek vzhledem k parametru LOCATION externího zdroje dat.

SELECT * FROM OPENROWSET
(
    BULK '/Contoso',
    FORMAT = 'DELTA',
    DATA_SOURCE = 'Delta_ED'
) AS [result];

Dotazování dat pomocí externí tabulky

CREATE EXTERNAL TABLE lze také použít k virtualizaci dat tabulky Delta v SQL Serveru. Sloupce musí být definovány a silně typovány. I když externí tabulky zabírají větší úsilí při vytváření, poskytují také další výhody při dotazování externího zdroje dat pomocí OPENROWSET. Můžete:

  • Posílení definice zadávání dat pro daný sloupec
  • Definování nulovatelnosti
  • Definujte kolaci
  • Vytvořte statistiky pro sloupec k optimalizaci kvality dotazovacího plánu
  • Vytvoření podrobnějšího modelu v RÁMCI SQL Serveru pro přístup k datům za účelem vylepšení modelu zabezpečení

Další informace naleznete v tématu VYTVOŘENÍ EXTERNÍ TABULKY.

V následujícím příkladu se používá stejný zdroj dat.

1. Vytvoření formátu externího souboru

K definování formátování souboru se vyžaduje externí formát souboru. Z důvodu opakovaného použití se doporučují také formáty externích souborů. Další informace naleznete v tématu CREATE EXTERNAL FILE FORMAT.

CREATE EXTERNAL FILE FORMAT DeltaTableFormat WITH(FORMAT_TYPE = DELTA);

2. Vytvoření externí tabulky

Soubory tabulky Delta jsou umístěny v /delta/Delta_yob/ a externím zdrojem dat pro tento příklad je úložiště objektů kompatibilní s S3, dříve nakonfigurované pod zdrojem dat s3_eds. PolyBase může použít jako UMÍSTĚNÍ složku tabulky delta nebo absolutní soubor samotný, který by byl umístěn v delta/Delta_yob/_delta_log/00000000000000000000.json.

-- Create External Table using delta
CREATE EXTERNAL TABLE extCall_Center_delta (
    id INT,
    name VARCHAR(200),
    dob DATE
)
WITH (
        LOCATION = '/delta/Delta_yob/',
        FILE_FORMAT = DeltaTableFormat,
        DATA_SOURCE = s3_eds
);
GO

Omezení

Pokud vytvoříte externí tabulku, která odkazuje na partitionovanou delta tabulku, sloupec použitý pro partitioning vrátí NULL při dotazování na externí tabulku. Pokud ale použijete OPENROWSET dotaz, vrátí se hodnota sloupce správně. Pokud chcete toto omezení obejít, vytvořte zobrazení nad dotazem OPENROWSET a potom dotazujte se na zobrazení, aby se hodnoty dělených sloupců vrátily správně.

Při dotazování na externí tabulku Delta může dojít k následujícím chybám:

Msg 2571, Level 14, State 3, Line 1
User '<user>' does not have permission to run DBCC TRACEON.
Msg 16513, Level 16, State 0, Line 1
Error reading external metadata.

K tomu může dojít, protože existuje QUERYTRACEON nápověda dotazu, kterou lze přidat do dotazu metadat souborů Delta a která vyžaduje roli serveru sysadmin ke spuštění. Pokud k tomu dojde, můžete problém vyřešit tím, že globálně zapnete příznak trasování 14073 a tím zabráníte přidání dotazového hintu.