Sdílet prostřednictvím


Připojení, dotazování a export dat pomocí PolyBase

Platí na: SQL Server 2016 (13.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Virtualizace dat umožňuje spouštět dotazy Transact-SQL (T-SQL) na externí data, aniž byste je museli načítat do databáze. PolyBase je funkce databázového stroje, která implementuje virtualizaci dat napříč SQL Serverem a Azure SQL. Definujete externí zdroj dat, volitelný formát souboru a externí tabulku a potom externí tabulku dotazujete stejně SELECT jako jakoukoli jinou tabulku.

Tato příručka vám pomůže:

  • Zjistěte, které funkce PolyBase podporují vaši platformu a verzi SQL.
  • Můžete si vybrat mezi OPENROWSET, externími tabulkami a BULK INSERT pro dotazování nebo ingestování dat.
  • Pro běžné scénáře postupujte podle podrobných odkazů.
  • Projděte si výkon, řešení potíží a osvědčené postupy pro produkční úlohy.

Běžné případy použití

Následující tabulka popisuje možné scénáře použití.

Scénář Využití
Ad hoc zkoumání souborů OPENROWSET(BULK ...)
Opakovaně použitelné dotazování na soubor pro BI nebo generování sestav Externí tabulky nad soubory
Dotazování mezi databázemi (SQL Server, Oracle, Teradata, MongoDB, ODBC) Konektory PolyBase s externími tabulkami
Export výsledků dotazu do souborů CREATE EXTERNAL TABLE AS SELECT (CETAS)
Hromadné vkládání do tabulek BULK INSERT nebo OPENROWSET(BULK ...) s INSERT ... SELECT

Které funkce jsou k dispozici, kde?

Následující tabulka ukazuje, které základní funkce PolyBase a virtualizace dat jsou k dispozici na jednotlivých platformách SQL. Pomocí této tabulky můžete určit, co můžete na platformě dělat, než použijete podrobné příručky.

funkce SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL Database Azure SQL Managed Instance Databáze SQL v rámci Microsoft Fabric
externí tabulky Ano Ano Ano Ano Ano Ano
OPENROWSET (BULK) Ano 1 Ano Ano Ano Ano Ano
CETAS (export) Ne Ano Ano Ne Ano Ne
Soubory CSV / soubory s oddělovači Ano 2 Ano Ano Ano Ano Ano
Soubory Parquet Ne Ano Ano Ano Ano Ano
Tabulky Delta Lake Ne Ano Ano Ne Ne Ne
Připojení k jinému SQL Serveru Ano Ano Ano Ne Ne Ne
Připojení ke službě Azure SQL Database nebo azure SQL Managed Instance Ano 3 Ano 3 Ano 3 Ne Ne Ne
Připojení k Oracle / Teradata / MongoDB Ano Ano Ano Ne Ne Ne
Připojení ke službě Azure Blob Storage Ano Ano Ano Ano Ano Ne
Připojení k ADLS Gen2 Ne Ano Ano Ano Ano Ne
Připojení k úložišti kompatibilnímu s S3 Ne Ano Ano Ne Ne Ne
Připojení k OneLake (Fabric) Ne Ne Ne Ne Ne Ano
Výpočet posunu dolů Ano Ano Ano Ne Ne Ne
ověřování spravované identity Ne Ne Ano 4 Ano Ano Ne

1 SQL Server 2019 (15.x) podporuje OPENROWSET(BULK...) pro místní a síťové cesty k souborům. V SQL Serveru 2022 (16.x) a novějších verzích OPENROWSET(BULK...) podporuje také čtení z cloudového úložiště pomocí FORMAT = 'PARQUET', FORMAT = DELTAa FORMAT = 'CSV'.

Podpora CSV 2 v SQL Serveru 2019 (15.x) vyžadovala Hadoop. V SQL Serveru 2022 (16.x) a v novějších verzích je CSV podporováno nativně bez Hadoopu.

3 Používá konektor SQL Serveru (sqlserver://). Přihlašovací údaje v rámci definovaném v databázi se zaměřují na koncový bod Azure SQL, a postup je stejný jako při připojování k jinému SQL Serveru.

4 Ověřování spravované identity se podporuje pro připojení ke službě Azure Blob Storage (ABS) a ADLS Gen2. Vyžaduje SQL Server s podporou Azure Arc nebo SQL Server na virtuálním počítači Azure pro místní SQL Server. Je nativně dostupná ve službě Azure SQL Database a azure SQL Managed Instance.

Poznámka:

Počínaje SQL Serverem 2025 (17.x) je dotazování datových souborů (CSV, Parquet a Delta) ve službě Azure Blob Storage, ADLS Gen2 nebo S3 nativní funkcí modulu, která už nevyžaduje instalaci nebo spouštění služeb PolyBase. Konektory RDBMS (SQL Server, Oracle, Teradata, MongoDB, ODBC) stále vyžadují instalaci a spuštění služeb PolyBase. SQL Server 2025 (17.x) také přidává podporu Linuxu pro tyto konektory, které byly dříve dostupné jenom ve Windows.

Dotazování externích dat

Než zvolíte konkrétní scénář, seznamte se se třemi způsoby dotazování externích dat:

Přístup Syntaxe Použít, když Autentizace Požadováno PolyBase
Ad hoc dotazy OLE DB OPENROWSET(provider, connection, query) Chcete rychlý jednorázový dotaz bez trvalých objektů nebo potřebujete ověřování Microsoft Entra ID. Ověřování SQL, ověřování systému Windows, Microsoft Entra ID (MSOLEDBSQL) Ne
Zadávat ad hoc dotazy OPENROWSET(BULK ...) Před vytvořením tabulky chcete rychle prozkoumat data souboru nebo otestovat schémata. Token SAS, přístupový klíč, spravovaná identita, Microsoft Entra ID Ano pro Azure SQL Database a azure SQL Managed Instance

Ne pro instance SQL Serveru
Trvalé datové konektory CREATE EXTERNAL TABLE s sqlserver://, oracle://, teradata://, atd. Potřebujete opakovaný přístup, zásady správného řízení, statistiky a výpočty pushdownu pro produkční prostředí. Pouze ověřování SQL Ano

Služby PolyBase se vyžadují pro přístup ke cloudovým souborům v SQL Serveru 2019 (15.x) a SQL Serveru 2022 (16.x). SQL Server 2025 (17.x) a novější verze mají nativní podporu pro CSV, Parquet a Delta bez PolyBase.

Průvodce rozhodováním

Scénář Recommendation
Potřebuji ověřování Microsoft Entra ID pro vzdálené SQL nebo se chci vyhnout službám PolyBase Použití OPENROWSET(MSOLEDBSQL, ...) (ad hoc, žádné trvalé objekty)
Potřebuji trvalé tabulky, statistiky nebo výpočty přesunuté do vzdálených databází Používá se CREATE EXTERNAL TABLE s konektory PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://). OPENROWSET nepodporuje konektory
Zkoumám nový soubor nebo testuji schéma Použití OPENROWSET(BULK ...) (rychlá iterace, žádné trvalé objekty)
Ingestuji data souboru do tabulky s transformacemi Použít INSERT ... SELECT z OPENROWSET(BULK ...)
Potřebuji zásady správného řízení nebo sdílený přístup pro mnoho uživatelů nebo aplikací Použití CREATE EXTERNAL TABLE , aby byla oprávnění a metadata centralizovaná
Pracuji v SQL databázi na platformě Fabric. Používá se OPENROWSET(BULK ...) pro ad hoc dotazy OneLake nebo externí tabulky pro opakovaně použitelný přístup; pro externí úložiště použijte klávesové zkratky OneLake.

Volba scénáře

Teď, když rozumíte třem přístupům, použijte jeden z následujících průvodců k implementaci vašeho konkrétního případu použití.

Dotazování souborů (Parquet, CSV nebo Delta)

Pokud jsou vaše data v souborech Parquet, CSV nebo Delta ve službě Azure Blob Storage, ADLS Gen2, úložišti kompatibilním s S3 nebo OneLake, postupujte podle jednoho z těchto průvodců:

Scénář Doporučená příručka Platforms
Rychlý ad hoc dotaz na soubor Parquet nebo CSV Použijte OPENROWSET. Není potřeba žádná externí tabulka. SQL Server 2022 (16.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, SQL databáze v Microsoft Fabric
Opakované dotazy na soubory Parquet s trvalým schématem Vytvoření externí tabulky přes Parquet SQL Server 2022 (16.x) a novější, Azure SQL Database, Azure SQL Managed Instance, SQL databáze v rámci Fabric
Dotazování souborů CSV s externí tabulkou Vytvořte externí tabulku s formátem souboru pro text s oddělovači SQL Server 2019 (15.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, SQL databáze v Azure Fabric
Dotazování tabulek Delta Lake Vytvoření externí tabulky pomocí FILE_FORMAT = DeltaLakeFileFormat SQL Server 2022 (16.x) a novější verze
Export výsledků dotazu do souborů Parquet nebo CSV (CETAS) Použijte CREATE EXTERNAL TABLE AS SELECT SQL Server 2022 (16.x) a novější verze, Azure SQL Managed Instance

Můžete také postupovat podle jednoho z těchto podrobných kurzů:

Tutoriál Description
Začínáme s PolyBase v SQL Serveru 2022 Obsahuje OPENROWSET soubory Parquet a CSV, externí tabulky a navigaci ve složkách.
Virtualizovat soubor Parquet v úložišti objektů kompatibilním s S3 pomocí PolyBase Kurz pro SQL Server 2022 (16.x) a novější verze
Virtualizace souboru CSV pomocí PolyBase Kurz pro SQL Server 2022 (16.x) a novější verze
Virtualizace tabulky Delta pomocí PolyBase Kurz pro SQL Server 2022 (16.x) a novější verze
Virtualizace dat pomocí Azure SQL Database (Preview) Návod ke službě Azure SQL Database pro Parquet a CSV.
Virtualizace dat s využitím služby Azure SQL Managed Instance Průvodce službou Azure SQL Managed Instance pro Parquet, CSV a CETAS
Virtualizace dat v SQL databázi ve Fabricu Průvodce databází SQL v platformě Fabric pro soubory OneLake

Připojení k jiné instanci SQL Serveru, službě Azure SQL Database nebo spravované instanci SQL

V SQL Serveru 2019 (15.x) a novějších verzích může PolyBase dotazovat tabulky v jiné instanci SQL Serveru, Azure SQL Database nebo Azure SQL Managed Instance bez použití propojených serverů.

Důležité

Konektor sqlserver:// není v SQL databázi ve Fabric podporován. Konektory PolyBase RDBMS používají ověřování SQL prostřednictvím CREATE DATABASE SCOPED CREDENTIAL a nepodporují ověřování přes Microsoft Entra ID, spravovanou identitu ani instanční ověřování. Vzhledem k tomu, že SQL databáze ve službě Fabric vyžaduje ověřování Microsoft Entra, nemůžete se k ní připojit pomocí PolyBase.

Krok Co dělat
1. Instalace PolyBase Instalace PolyBase ve Windows nebo instalace PolyBase v Linuxu
2. Vytvoření přihlašovacích údajů CREATE DATABASE SCOPED CREDENTIAL s cílovým přihlášením
3. Vytvoření externího zdroje dat CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. Vytvoření externí tabulky CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. Dotaz SELECT * FROM <external_table>

Návod

Konektor SQL Serveru (sqlserver://) funguje také pro Azure SQL Database a Azure SQL Managed Instance. Použijte stejný postup a nastavte LOCATION ho na koncový bod Azure SQL (například sqlserver://myserver.database.windows.net).

Podrobný průvodce najdete v tématu Konfigurace PolyBase pro přístup k externím datům v SQL Serveru.

Připojení k Oracle, Teradata nebo MongoDB

SQL Server 2019 (15.x) a novější verze můžou dotazovat Oracle, Teradata, MongoDB a Cosmos DB prostřednictvím konektorů PolyBase ODBC.

Zdroj dat Guide Požadavky
Oracle Konfigurace PolyBase pro přístup k externím datům v Oracle SQL Server 2019 (15.x) a novější verze, klientské ovladače Oracle
Teradata Konfigurace PolyBase pro přístup k externím datům v Teradata SQL Server 2019 (15.x) a novější verze, ovladač ODBC Teradata
MongoDB / Cosmos DB Konfigurace PolyBase pro přístup k externím datům v MongoDB SQL Server 2019 (15.x) a novější verze, ovladač MongoDB ODBC
Libovolný zdroj ODBC Konfigurace PolyBase pro přístup k externím datům pomocí obecných typů ODBC SQL Server 2019 (15.x) a novější verze (Windows)

(Linux od SQL Serveru 2025 (17.x))

Připojení ke službě Azure Blob Storage nebo ADLS Gen2

Platforma SQL Možnosti ověřování Guide
SQL Server 2022 (16.x) a novější verze Token SAS, přístupový klíč, spravovaná identita (počínaje SQL Serverem 2025 (17.x)) Konfigurace PolyBase pro přístup k externím datům ve službě Azure Blob Storage
SQL Server 2019 (15.x) Přístupový klíč (přes konektor Hadoop) Konfigurace PolyBase pro přístup k externím datům ve službě Azure Blob Storage
Azure SQL Database Token SAS, spravovaná identita, průchod Microsoft Entra Virtualizace dat pomocí Azure SQL Database (Preview)
Azure SQL Managed Instance Token SAS, spravovaná identita Virtualizace dat s využitím služby Azure SQL Managed Instance

V SQL Serveru 2022 (16.x) se změnily předpony identifikátoru URI. Při migraci z SQL Serveru 2019 (15.x) nebo starších verzí:

  • Azure Blob Storage: Změna wasb[s]:// na abs://
  • ADLS Gen2: Změna abfs[s]:// na adls://

Další informace najdete v tématu Konfigurace PolyBase pro přístup k externím datům ve službě Azure Blob Storage.

Připojení k úložišti objektů kompatibilním s S3

SQL Server 2022 (16.x) a novější verze podporují úložiště kompatibilní s S3, například Amazon S3, MinIO a Ceph.

Další informace naleznete v tématu Konfigurace PolyBase pro přístup k externím datům v úložišti objektů kompatibilním s S3.

Export dat pomocí příkazu CREATE EXTERNAL TABLE AS SELECT (CETAS)

CETAS exportuje výsledky dotazů do externích souborů (Parquet nebo CSV) ve službě Azure Blob Storage, ADLS Gen2 nebo úložišti kompatibilním s S3.

Platforma SQL Podporováno Formáty exportu Poznámky
SQL Server 2022 (16.x) a novější verze Ano Parquet, CSV Vyžaduje konfiguraci serveru: povolení exportu polybase
Azure SQL Managed Instance Ano Parquet, CSV Ve výchozím nastavení je zakázáno
Azure SQL Database Ne None Není k dispozici
SQL databáze v prostředí Fabric Ne None Není k dispozici

Referenční informace k Transact-SQL najdete v tématu CREATE EXTERNAL TABLE AS SELECT (CETAS).

Příklady rychlých startů

Příklad 1: Ad hoc dotaz na soubor Parquet (OPENROWSET)

Není potřeba žádná externí tabulka. Funguje na SQL Serveru 2022 (16.x) a novějších verzích, Azure SQL Database, Azure SQL Managed Instance a SQL database ve službě Fabric.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

Příklad 2: Externí tabulka přes CSV ve službě Azure Blob Storage

Tento příklad funguje na všech platformách SQL, které podporují PolyBase.

  • Krok 1: Vytvoření hlavního klíče databáze (DMK). Tento krok je povinný, protože přihlašovací údaje ukládají tajný klíč tokenu SAS. Tento krok ale můžete provést, pokud používáte ověřování Managed Identity nebo Microsoft Entra.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';
    
  • Krok 2: Vytvoření přihlašovacích údajů pomocí tokenu SAS Vynechte počáteční ?.

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • Krok 3: Vytvoření externího zdroje dat

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • Krok 4: Vytvoření formátu souboru pro CSV.

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • Krok 5: Vytvoření externí tabulky

    CREATE EXTERNAL TABLE dbo.SalesExternal
    (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer NVARCHAR (100)
    )
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/data/sales/',
        FILE_FORMAT = CsvFormat
    );
    
  • Krok 6: Dotaz na externí tabulku

    SELECT *
    FROM dbo.SalesExternal
    WHERE OrderDate >= '2025-01-01';
    

Příklad 3: Dotazování tabulky na jiném SQL Serveru

Tento příklad funguje na SQL Serveru 2019 (15.x) a novějších verzích.

  • Krok 1: Vytvoření hlavního klíče databáze (povinné, protože přihlašovací údaje ukládají heslo)

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<strong_password>';
    
  • Krok 2: Vytvoření přihlašovacích údajů pro vzdálenou instanci SQL Serveru

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • Krok 3: Vytvoření externího zdroje dat

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • Krok 4: Vytvoření externí tabulky (název tří částí v LOCATION)

    CREATE EXTERNAL TABLE dbo.RemoteCustomers
    (
        CustomerId INT,
        CustomerName NVARCHAR (200)
            COLLATE SQL_Latin1_General_CP1_CI_AS
    )
    WITH (
        DATA_SOURCE = RemoteSqlServer,
        LOCATION = 'SalesDB.dbo.Customers'
    );
    
  • Krok 5: Dotazování napříč servery

    SELECT c.CustomerName,
           s.Amount
    FROM dbo.RemoteCustomers AS c
         INNER JOIN dbo.LocalSales AS s
             ON c.CustomerId = s.CustomerId;
    

Příklad 4: Export výsledků do Parquet s CETAS

Funguje na SQL Serveru 2022 (16.x) a novějších verzích Azure SQL Managed Instance.

  • Krok 1: Povolení CETAS (pouze SQL Server)

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • Krok 2: Vytvoření přihlašovacích údajů a zdroje dat (opakované použití z předchozích příkladů)

  • Krok 3: Vytvoření formátu souboru pro export Parquet

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • Krok 4: Export výsledků dotazu

    CREATE EXTERNAL TABLE dbo.Sales2025Export
    WITH (
        DATA_SOURCE = MyAzureStorage,
        LOCATION = '/exports/sales_2025.parquet',
        FILE_FORMAT = ParquetFormat
    ) AS
    SELECT *
    FROM Sales.Orders
    WHERE OrderDate >= '2025-01-01';
    

Stavební bloky T-SQL pro PolyBase

Před implementací jakéhokoli scénáře porozumíte základním objektům T-SQL, které PolyBase používá a jak se vejdou dohromady:

Diagram znázorňující PolyBase Transact-SQL objekty a jejich vztahy

Diagram znázorňující objekty PolyBase T-SQL a jejich relace od ověřování (hlavní klíč databáze, přihlašovací údaje) prostřednictvím zdrojů dat a formátů souborů po metody dotazů (externí tabulka, OPENROWSET, BULK INSERT, CETAS).

Informace o těchto příkazech T-SQL najdete tady:

Úplnou referenční příručku Transact-SQL pro všechny objekty naleznete v PolyBase Transact-SQL reference.

Důležité

Zkontrolujte mapování datových typů pro formát externího souboru. Při vytváření externího formátu souboru nebo dotazování souborů pomocí OPENROWSET, PolyBase automaticky mapuje zdrojové datové typy (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) na datové typy SQL Serveru. Neshodované typy můžou způsobit tiché zkrácení, ztrátu přesnosti nebo chyby dotazů. Například se položka Parquet DECIMAL(38,18) namapuje na DECIMAL(18,0). Než definujete sloupce externí tabulky nebo WITH klauzuli, projděte si tabulky mapování. Úplný odkaz naleznete v tématu Mapování typů pomocí PolyBase.

Kdy se vyžaduje CREATE MASTER KEY?

Hlavní klíč databáze (DMK) se vytvoří pomocí CREATE MASTER KEY syntaxe. DmK šifruje tajné kódy uložené v přihlašovacích údajích s vymezeným oborem databáze. Vyžaduje se jenom v případě, že přihlašovací údaje obsahují tajnou hodnotu, tj. při uložení hesla, tokenu nebo přístupového klíče.

  • Vyžaduje se DMK (přihlašovací údaje ukládají tajný kód):

    Typ autentizace IDENTITY hodnota Má tajemství DMK
    token SAS 'SHARED ACCESS SIGNATURE' Ano Povinné
    Přístupový klíč S3 'S3 ACCESS KEY' Ano Povinné
    Přihlášení SQL / základní ověřování '<username>' Ano Povinné
    Přístupový klíč účtu úložiště '<storage_account_name>' Ano Povinné
  • DmK se nevyžaduje (neukládá se žádný tajný kód):

    Typ autentizace IDENTITY hodnota Má tajemství DMK
    Spravovaná identita 'Managed Identity' Ne Nepovinné
    Microsoft Entra ID 'User Identity' nebo 'Managed Identity' Ne Nepovinné

Návod

Pokud v CREATE DATABASE SCOPED CREDENTIAL příkazu není žádný tajný kód, nepotřebujete DMK. Spravovaná identita a ověřování Microsoft Entra ID delegují důvěryhodnost na platformu. Databáze neukládá hesla ani tokeny.

Příklady:

V tomto ukázkovém dotazu se vyžaduje DMK (přihlašovací údaje obsahují token SAS).

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong_password>';

CREATE DATABASE SCOPED CREDENTIAL SasCred
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
     SECRET = '<your_SAS_token>';

V tomto ukázkovém dotazu není DMK vyžadován (spravovaná identita, bez tajemství).

CREATE DATABASE SCOPED CREDENTIAL ManagedIdentityCred
WITH IDENTITY = 'Managed Identity';

V tomto ukázkovém dotazu není DMK povinný (Microsoft Entra průchozí autentizace, bez tajemství).

CREATE DATABASE SCOPED CREDENTIAL EntraIdCred
WITH IDENTITY = 'User Identity';

Vzdálený přístup k datům pomocí OPENROWSET a externích tabulek

SQL Server nabízí tři různé přístupy k dotazování vzdálených dat. Správný přístup si můžete zvolit, když pochopíte rozdíly v syntaxi, ověřování a architektuře.

Přístup Syntaxe Připojí se k Autentizace Služby PolyBase Platforms
Dotazy OLE DB OPENROWSET(provider, connection, query) Jakýkoli zdroj OLE DB prostřednictvím MSOLEDBSQL, SQLOLEDB nebo jiných poskytovatelů Ověřování SQL, ověřování systému Windows, Microsoft Entra ID (MSOLEDBSQL) Ne SQL Server (všechny podporované verze)
Dotazy na soubory OPENROWSET(BULK ...) Soubory na místním disku, síti nebo cloudu (Azure Blob, ADLS, S3, OneLake) Token SAS, přístupový klíč, spravovaná identita, Microsoft Entra ID Ano pro cloud*; Ne pro místní SQL Server 2005; SQL Server 2022 (16.x) a novější verze (cloud); Azure SQL
Konektory PolyBase CREATE EXTERNAL TABLE s CREATE EXTERNAL DATA SOURCE použitím sqlserver://, oracle://, teradata://, mongodb://, odbc:// Vzdálený SQL Server, Oracle, Teradata, MongoDB, zdroje ODBC Pouze ověřování SQL Ano SQL Server 2019 (15.x) a novější verze (Windows); SQL Server 2025 (17.x) a novější verze (Linux)

Služby PolyBase se vyžadují pro přístup ke cloudovým souborům v SQL Serveru 2019 (15.x) a SQL Serveru 2022 (16.x). SQL Server 2025 (17.x) a novější verze mají nativní podporu cloudových souborů a už nevyžadují PolyBase pro CSV, Parquet nebo Delta.

Kdy použít jednotlivé přístupy

Použijte OLE DB OPENROWSET pro:

  • Rychlé jednorázové dotazy ad hoc bez vytváření trvalých objektů
  • Microsoft Entra ID nebo ověřování spravované identity (přes MSOLEDBSQL)
  • Vyhněte se závislostem služeb PolyBase
  • Připojení k libovolnému zdroji dat pomocí zprostředkovatele OLE DB

Soubor OPENROWSET(BULK) použijte pro:

  • Ad hoc zkoumání souborů a zjišťování schémat
  • Rychlé transformace a náhledy před potvrzením definice tabulky
  • Flexibilní transformace sloupců přímo (přetypování, filtrování, počítané sloupce)
  • Data, která se často nemění a nepotřebují trvalá metadata

Použijte konektory PolyBase s CREATE EXTERNAL TABLE pro:

  • Trvalé opakovaně použitelné definice tabulek, ke které přistupuje více uživatelů nebo aplikací
  • Produkční úlohy vyžadující optimalizaci statistiky a plánu dotazů
  • Podmíněné zpracování do vzdálených zdrojů (přesunutí filtrů do Oracle, SQL Serveru, atd.)
  • Sdílené zásady správného řízení a zabezpečení (po vytvoření uživatelé potřebují SELECT jenom oprávnění)
  • Pokud máte pro vzdálený zdroj k dispozici ověřování SQL

OPENROWSET (OLE DB) – ad hoc vzdálené dotazy (nevyžadují se žádné služby PolyBase)

Forma OPENROWSET OLE DB se připojuje ke vzdálenému zdroji dat prostřednictvím zprostředkovatele OLE DB, provede průchozí dotaz a vrátí výsledky jako sada výsledků. Jedná se o jednorázovou ad hoc alternativu k propojenému serveru. Nevytváří se žádná trvalá metadata. Tato syntaxe nevyžaduje služby PolyBase a nepodporuje cloudové soubory ani externí zdroje dat.

Tento ukázkový dotaz se připojí ke vzdálenému SQL Serveru přes OLE DB (nikoli PolyBase).

SELECT *
FROM OPENROWSET (
    'MSOLEDBSQL',
    'Server=remote-server;Database=AdventureWorks;Trusted_Connection=yes;',
    'SELECT TOP 10 * FROM AdventureWorks.Sales.SalesOrderHeader'
);

OPENROWSET(BULK) – dotazy založené na souborech (PolyBase)

Formulář BULKOPENROWSET přímo čte data ze souborů. Na SQL Serveru 2019 (15.x) a starších verzích čte z místních nebo UNC cest k souborům a vyžaduje formátový soubor. V SQL Serveru 2022 (16.x) a novějších verzích můžete číst z cloudového úložiště pomocí DATA_SOURCE parametrů a FORMAT parametrů. Tento přístup je integrovaná verze PolyBase používaná pro virtualizaci dat.

V kontextu PolyBase a virtualizace dat, pokud tato příručka odkazuje na OPENROWSET, má na mysli syntaxe OPENROWSET(BULK ...) s klauzulí FORMAT pro dotazování externích souborů.

Příklady:

Tento ukázkový dotaz načte soubor Parquet ze služby Azure Blob Storage (SQL Server 2022 a novější verze).

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'data/sales/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET'
) AS [result];

Tento příklad dotazu načte soubor Parquet pomocí vložené definované cesty (Azure SQL Database, Azure SQL Managed Instance).

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
    FORMAT = 'PARQUET'
) AS [result];

Kdy použít OPENROWSET vs. externí tabulky

Obě OPENROWSET(BULK ...) i externí tabulky umožňují dotazovat se na externí data pomocí T-SQL, ale jsou navržené pro různé případy použití. Následující tabulka shrnuje klíčové rozdíly, které vám pomůžou rozhodnout, který přístup odpovídá vašemu scénáři.

Schopnost OPENROWSET(BULK ...) Externí tabulka
Purpose Jednorázové průzkumy a jednorázové dotazy Trvalá a opakovaně použitelná definice tabulky
Metadata uložená v databázi Ne. Po spuštění dotazu se nic neuloží. Ano. Definice tabulky, zdroj dat a formát souboru se ukládají jako databázové objekty.
Definice schématu Automaticky odvozeno ze souboru (Parquet) nebo zadaného přímo s klauzulí WITH. Explicitně definované v CREATE EXTERNAL TABLE příkazu
Permissions Vyžaduje ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS Po vytvoření stačí standardní SELECT oprávnění k tabulce.
Počítané sloupce Ano. Přidání výrazů a počítaných sloupců v SELECT seznamu; funkce metadat, jako jsou filename() a filepath() jsou k dispozici pouze zde. Ne. Pevný seznam sloupců; provádí transformace v zobrazení nebo v dotazu, který čte externí tabulku.
Statistika Azure SQL: Ruční statistiky s jedním sloupcem prostřednictvím sys.sp_create_openrowset_statistics; SQL Server 2022 (16.x) a novější verze: automatické vytváření statistik v predikátech (bez ručních statistik na SQL Serveru). Viz ruční statistika OPENROWSET. Úplná CREATE STATISTICS podpora na všech platformách a automatické vytváření v SQL Serveru 2022 (16.x) a novějších verzích. Viz Vytvoření ručních statistik externí tabulky.
Zásobník Omezená podpora. Stroj může propagovat filtry na prohledávání souborů, ale nedochází k propagaci na vzdálené zdroje RDBMS. Ano. Podporuje výpočty pushdownu pro konektory RDBMS (SQL Server, Oracle, Teradata, MongoDB).
Nejlepší pro Zkoumání dat, zjišťování schématu, dotazy na vytváření prototypů, jednorázové načítání dat, flexibilní transformace Produkční úlohy, opakované dotazy, sdílený přístup mezi uživateli, řídicími panely a generování sestav

Použití OPENROWSET v případě, že potřebujete flexibilitu

Použijte OPENROWSET k prozkoumání souboru, testování různých schémat nebo přidávání počítaných sloupců a transformací bez vytváření trvalých objektů. Můžete například extrahovat cestu k souboru jako sloupec, přetypovat datové typy vložené nebo filtrovat vypočítané výrazy v jednom dotazu.

Tento ukázkový dotaz zahrnuje počítané sloupce a transformace:

SELECT result.filename() AS [FileName],
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       CAST (OrderDate AS DATE) AS OrderDate,
       Amount,
       OrderDate
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025';

Návod

Funkce filepath() a filename() jsou dostupné ve službách Azure SQL Database, Azure SQL Managed Instance a v SQL Server 2022 (16.x) a novějších verzích. Umožňují filtrovat části cesty k souboru (eliminace oddílu) a poskytnout název zdrojového souboru jako sloupec, což není přímo možné u externích tabulek.

Použití externích tabulek v případě, že potřebujete trvalost a zásady správného řízení

Externí tabulky použijte, když více uživatelů nebo aplikací potřebuje opakovaně dotazovat stejná externí data. Schéma, zdroj dat a přihlašovací údaje definujete jednou a uložíte je do databáze. Uživatelé potřebují SELECT oprávnění pouze k tabulce.

Externí tabulky také podporují statistiky, které optimalizátor dotazů používá k vytváření lepších plánů provádění. Statistiky můžete vytvořit ručně nebo nechat modul vytvořit automaticky (SQL Server 2022 (16.x) a novější verze).

Tento ukázkový dotaz vytvoří statistiky pro externí tabulku pro lepší plány dotazů.

CREATE STATISTICS Stats_OrderDate
ON dbo.SalesExternal(OrderDate)
WITH FULLSCAN;

Další informace o statistikách pro oba přístupy naleznete v tématu Aspekty výkonu PolyBase – Statistika.

BULK INSERT vs. OPENROWSET(BULK): Který z nich mám použít?

Oba BULK INSERT a OPENROWSET(BULK ...) importují data ze souborů do SQL Serveru pomocí stejného základního modulu pro hromadné načítání. Liší se ale v syntaxi, flexibilitě a tom, co můžete s výsledky dělat. Následující tabulka shrnuje klíčové rozdíly:

Poznámka:

BULK INSERT není k dispozici v databázi SQL v Fabric. Pro Fabric použijte OPENROWSET(BULK ...) proti OneLake.

Schopnost BULK INSERT OPENROWSET(BULK ...)
Základní účel Načte data ze souboru přímo do cílové tabulky. Vrátí sadu řádků, kterou použijete v SELECT nebo INSERT ... SELECT příkazu.
Vzor použití Samostatný příkaz: BULK INSERT <table> FROM '<file>' Musí se použít v dotazu: SELECT * FROM OPENROWSET(BULK ...) nebo INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
Vyžaduje cílovou tabulku? Ano. Vždy zapisuje přímo do tabulky. Ne. SELECT Můžete z něj bez vložení kamkoli nebo vložení do libovolné tabulky nebo dočasné tabulky.
Transformace sloupců během načítání Omezená podpora. Tok dat proudí ze souboru do tabulky tak, jak jsou (mapování řízené souborem formátu nebo pořadím sloupců) Úplná podpora. V okolí můžete přidávat výrazy, CASTWHERE filtry, JOIN další tabulky a počítané sloupce.SELECT
Nápovědy k tabulce Tato WITH klauzule zahrnuje podporu pro BATCHSIZE, , CHECK_CONSTRAINTSFIRE_TRIGGERSKEEPIDENTITY, KEEPNULLS, , , TABLOCKa další Podporuje hinty tabulek prostřednictvím syntaxe INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
Import jedné hodnoty velkého objektu (LOB) Nepodporováno Ano. Podporuje SINGLE_BLOB, SINGLE_CLOB a SINGLE_NCLOB import celého souboru jako jednu hodnotu varbinary(max), varchar(max), nebo nvarchar(max)
Formátování souborů Ano. Podporováno prostřednictvím (XML a ne-XML) Ano. Podporované (XML a jiné než XML)
Přístup ke cloudovým souborům (Azure Blob Storage, ADLS Gen2, S3) Ano. Podporováno prostřednictvím DATA_SOURCE parametru (SQL Server 2017 (14.x) a novějších verzí, Azure SQL) Ano. Podporováno prostřednictvím DATA_SOURCE parametru nebo vložené adresy URL s klauzulí FORMAT (SQL Server 2022 (16.x) a novějších verzí, Azure SQL)
Soubory Parquet nebo Delta Nepodporováno. Pouze csv nebo text s oddělovači Ano. Podporováno v FORMAT = 'PARQUET' nebo FORMAT = 'DELTA' (SQL Server 2022 (16.x) a novějších verzích, Azure SQL)
Požadovaná oprávnění ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS, plus INSERT v cílové tabulce ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS
Minimální protokolování Ano. Podporováno v rámci jednoduchých nebo hromadně protokolovaných modelů obnovení s využitím TABLOCK Ano. Podporováno při použití s INSERT ... SELECTTABLOCK

Kdy zvolit BULK INSERT

Použijte BULK INSERT, když máte při importu přímé načtení souboru do tabulky a nemusíte během importu transformovat, filtrovat ani spojovat data. Používá jednodušší syntaxi pro csv nebo jiné soubory s oddělovači:

Tento příklad dotazu načte soubor CSV ze služby Azure Blob Storage přímo do tabulky.

BULK INSERT Sales.Invoices
FROM 'invoices/inv-2025-01.csv'
WITH (
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ROWTERMINATOR = '\n'
);

Tento příklad dotazu načte místní soubor s formátovým souborem pro mapování sloupců.

BULK INSERT dbo.Products
FROM 'C:\Data\products.csv'
WITH (
    FORMATFILE = 'C:\Data\products.fmt',
    FIRSTROW = 2,
    TABLOCK
);

Kdy zvolit OPENROWSET(BULK)

Použijte OPENROWSET(BULK ...) , když potřebujete jednu nebo více následujících podmínek:

  • Dotazování nebo zobrazení náhledu dat souboru bez vytvoření tabulky
  • Transformace, filtrování nebo spojení dat během importu
  • Načtěte soubory ve formátu Parquet nebo Delta (pouze OPENROWSET podporuje tyto formáty).
  • Importuje celý soubor jako jednu hodnotu LOB (SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB).

Tento příklad dotazu zobrazí náhled souboru CSV ze služby Azure Blob Storage bez vložení dat kamkoli.

SELECT TOP 10 *
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2,
    FIELDTERMINATOR = ','
) AS src;

Tento ukázkový dotaz vloží data s transformací a filtrováním.

INSERT INTO Sales.Invoices (InvoiceDate, Amount, Customer)
SELECT CAST (InvoiceDate AS DATE),
       Amount * 1.1, -- Apply a 10% markup
       UPPER(Customer)
FROM OPENROWSET (
    BULK 'invoices/inv-2025-01.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FIRSTROW = 2
) WITH (
    InvoiceDate VARCHAR (10),
    Amount DECIMAL (18, 2),
    Customer VARCHAR (100)
) AS src
WHERE Amount IS NOT NULL;

Tento příklad dotazu načte soubor Parquet (to není možné provést s BULK INSERT).

INSERT INTO Sales.Invoices
SELECT *
FROM OPENROWSET (
    BULK 'data/invoices/*.parquet',
    DATA_SOURCE = 'MyAzureStorage',
    FORMAT = 'PARQUET') AS src;

Tento příklad dotazu naimportuje celý soubor XML jako jednu hodnotu varbinary(max).

INSERT INTO dbo.XmlDocuments (DocContent)
SELECT BulkColumn
FROM OPENROWSET (
    BULK 'C:\Data\catalog.xml',
    SINGLE_BLOB
) AS x;

Návod

Jedním z přístupů je začít s OPENROWSET(BULK ...) v SELECT, když prozkoumáte a ověříte data souborů, a pak přejít na BULK INSERT pro konečné produkční zatížení, jestliže nejsou potřeba transformace. Pokud potřebujete podporu pro Parquet a/nebo Delta nebo vložené filtrování, zůstaňte u OPENROWSET.

Další informace najdete v následujících souvisejících příručkách:

Užitečné funkce metadat

Při dotazování externích souborů s externími tabulkami OPENROWSET můžete použít několik předdefinovaných funkcí a postupů ke kontrole metadat souborů, zjišťování schémat a implementaci dotazů pracujících s oddíly.

filepath() a název_souboru()

filepath() Funkce filename() vrací části cesty k souboru nebo název souboru pro každý řádek v sadě výsledků. Jsou užitečné zejména pro:

  • Odstranění oddílu: Filtrujte segmenty složek (například oddíly roku/měsíce/dne), aby modul místo prohledávání všeho četl pouze odpovídající soubory.

  • Zveřejnění zdrojových metadat: Do výsledků dotazu zahrňte název nebo cestu původního souboru jako sloupec, což je užitečné pro auditování nebo ladění.

Funkce Návraty Příklad
filename() Název souboru (včetně přípony) zdrojového souboru pro každý řádek sales_2025_01.parquet
filepath(N) N-tý segment složky ze zástupného znaku (*) v BULK cestě, kde N začíná na 1 Pro cestu sales/2025/01/*.parquet, filepath(1) vrátí 2025, filepath(2) vrátí 01

Platí pro: Azure SQL Database, Azure SQL Managed Instance, SQL Server 2022 (16.x) a novější verze, SQL databáze ve Fabricu.

Tento ukázkový dotaz používá filepath() k odstranění oddílů a filename() k identifikaci zdrojových souborů. Čte jenom soubory ve /2025/ složce a jen čte soubory v podsložce /06/ .

SELECT result.filename() AS SourceFile,
       result.filepath(1) AS [Year],
       result.filepath(2) AS [Month],
       *
FROM OPENROWSET (
    BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*/*/*.parquet',
    FORMAT = 'PARQUET'
) AS result
WHERE result.filepath(1) = '2025' 
      AND result.filepath(2) = '06';

Návod

Místo poddotazů nebo CTE umístěte filepath() filtry do WHERE klauzule. Pokud je filtr v WHERE klauzuli, modul může provést odstranění oddílů na úrovni prohledávání souborů, což výrazně snižuje vstupně-výstupní operace.

sp_describe_first_result_set – zjištění typů sloupců OPENROWSET

Při použití OPENROWSET se soubory Parquet modul odvodí datové typy sloupců automaticky (odvozování schématu). Odvozené typy můžou být větší, než je potřeba. Například sloupce znaků se často odvozují jako varchar(8000), protože metadata Parquet neobsahují maximální délku. Tato volba může snížit výkon a spotřebovat více paměti.

Slouží sp_describe_first_result_set ke kontrole odvozeného schématu před dokončením dotazu. Jakmile se zobrazí odvozené typy, zadejte v klauzuli užší typy WITH pro zlepšení výkonu.

  • Krok 1: Zkontrolujte odvozené schéma.

    EXECUTE sp_describe_first_result_set N'
    SELECT *
    FROM OPENROWSET(
        BULK ''abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet'',
        FORMAT = ''PARQUET''
    ) AS result';
    

    Výstup zobrazuje název každého sloupce, odvozený datový typ, maximální délku, přesnost a měřítko. Pokud se zobrazí varchar(8000), kde bude stačit varchar(100), nahraďte to:

  • Krok 2: Pro lepší výkon použijte explicitní typy.

    SELECT TOP 100 *
    FROM OPENROWSET (
        BULK 'abs://mycontainer@mystorageaccount.blob.core.windows.net/data/sales/*.parquet',
        FORMAT = 'PARQUET'
    ) WITH (
        OrderId INT,
        OrderDate DATE,
        Amount DECIMAL (18, 2),
        Customer VARCHAR (100) -- much narrower than the inferred varchar(8000)
    ) AS result;
    

Odvození schématu funguje jenom se soubory Parquet. U souborů CSV vždy zadejte definice sloupců buď v WITH klauzuli (for OPENROWSET), nebo v CREATE EXTERNAL TABLE příkazu. sp_describe_first_result_set je obecný postup SQL Serveru a Azure SQL, ale je zvlášť užitečný pro OPENROWSET dotazy. Pro více informací viz sp_describe_first_result_set.

Výkon, řešení potíží a osvědčené postupy

Po implementaci virtualizace dat využijte tyto příručky k optimalizaci výkonu, diagnostice problémů a zajištění provozní připravenosti:

Plocha Článek Podrobnosti
Výkon PolyBase Aspekty výkonu v PolyBase pro SQL Server Statistika, zasouvání, paralelismus a správa paměti
Výpočet posunu dolů Posun výpočtů v PolyBase Určuje, které operace se odesílají do vzdáleného zdroje.
Jak zjistit, jestli došlo k pushdownu Jak zjistit, jestli došlo k externímu prosazení Plány dotazů a zobrazení dynamické správy
Troubleshooting Sledování a řešení potíží s PolyBase Běžné chyby a jejich řešení
Připojení protokolu Kerberos Odstraňování problémů s připojením PolyBase Kerberos
Nejčastější dotazy Nejčastější dotazy k PolyBase
Chyby a řešení chyby PolyBase a možná řešení