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

Podpora platformy

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í souborů pro BI nebo reporting 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
  • Pro ad hoc průzkum souborů použijte OPENROWSET(BULK ...) k prozkoumání souborů, aniž byste vytvářeli znovupoužitelnou tabulku.
  • Pro opakovaně použitelné dotazy na soubory v BI nebo reportovací scénáře použijte externí tabulky místo souborů pro zachování schématu a sdílení výsledků mezi dotazy.
  • Pro dotazování napříč databázemi použijte konektory PolyBase s externími tabulkami pro přístup ke zdrojům SQL Server, Oracle, Teradata, MongoDB nebo ODBC.
  • Pro export výsledků dotazů do souborů použijte CREATE EXTERNAL TABLE AS SELECT (CETAS) pro zápis Parquet nebo CSV výstupu mimo databázi.
  • Pro hromadné načítání do tabulek použijte OPENROWSET(BULK ...) nebo INSERT ... SELECT s BULK INSERT k načtení dat ze souborů do databázových tabulek.

Které funkce jsou k dispozici, kde?

Následující tabulka ukazuje, které základní funkce PolyBase a virtualizace dat jsou dostupné na každé SQL platformě počínaje SQL Server 2019. Pro dostupnost funkcí v SQL Server 2016 a SQL Server 2017 na Windows viz Funkce a omezení PolyBase. 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 Ano 5 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://). Databázově omezené přihlašovací údaje cílí na SQL endpoint. Použijte stejné kroky jako při připojení k jiné instanci SQL Server.

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.

5 SQL Server 2019 CU11 a novější verze podporují Azure Data Lake Storage Gen2 s předponou abfs nebo abfss. V SQL Server 2022 a novějších verzích použijte tuto adls předponu.

  • Externí tabulky jsou podporovány v SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance a SQL databázi v Microsoft Fabric.
  • OPENROWSET (BULK)je podporován ve službách SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance a SQL databázi v Microsoft Fabric. SQL Server 2019 podporuje lokální a síťové cesty k souborům, zatímco verze SQL Server 2022 a novější také podporují čtení cloudového úložiště s FORMAT = 'PARQUET', FORMAT = DELTA, a FORMAT = 'CSV'.
  • Export CETAS není podporován v SQL Server 2019, Azure SQL Database ani SQL databázi v Microsoft Fabric. Export CETAS je podporován v SQL Server 2022, SQL Server 2025 a Azure SQL Managed Instance.
  • CSV a oddělené soubory jsou podporovány v SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance a SQL databázi v Microsoft Fabric. SQL Server 2019 vyžaduje Hadoop pro podporu CSV, zatímco SQL Server 2022 a pozdější verze podporují CSV nativně bez Hadoopu.
  • Soubory Parquet nejsou v SQL Server 2019 podporovány. Soubory Parquet jsou podporovány v SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance a SQL databázi v Microsoft Fabric.
  • Tabulky Delta Lake nejsou podporovány v SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance ani SQL databázích v Microsoft Fabric. Tabulky Delta Lake jsou podporovány v SQL Server 2022 a SQL Server 2025.
  • Připojení k jiné instanci SQL Server je podporováno v SQL Server 2019, SQL Server 2022 a SQL Server 2025. Připojení k jiné instanci SQL Server není podporováno v Azure SQL Database, Azure SQL Managed Instance ani SQL databázi v Microsoft Fabric.
  • Připojení k Azure SQL Database nebo Azure SQL Managed Instance je podporováno v SQL Server 2019, SQL Server 2022 a SQL Server 2025 pomocí konektoru SQL Server. Databázově omezené přihlašovací údaje cílí na endpoint Azure SQL Database nebo Azure SQL Managed Instance a konfigurační kroky jsou stejné jako při připojení k jiné instanci SQL Server. Tato spojení nejsou podporována v Azure SQL Database, Azure SQL Managed Instance ani SQL databázi v Microsoft Fabric.
  • Připojení k Oracle, Teradata nebo MongoDB je podporováno ve SQL Server 2019, SQL Server 2022 a SQL Server 2025. Tato spojení nejsou podporována v Azure SQL Database, Azure SQL Managed Instance ani SQL databázi v Microsoft Fabric.
  • Připojení k Azure Blob Storage je podporováno z SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database a Azure SQL Managed Instance. Připojení k Azure Blob Storage není podporováno ze SQL databáze v Microsoft Fabric.
  • Připojení k ADLS Gen2 není podporováno v SQL Server 2019 verzích před CU11 ani ze SQL databáze v Microsoft Fabric. Připojení k ADLS Gen2 je podporováno od SQL Server 2019 CU11 a také v SQL Server 2022, SQL Server 2025, Azure SQL Database a Azure SQL Managed Instance.
  • Připojení k úložišti kompatibilnímu se S3 není podporováno v SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance ani SQL databázi v Microsoft Fabric. Připojení k úložišti kompatibilnímu se S3 je podporováno v SQL Server 2022 a SQL Server 2025.
  • Připojení k OneLake je podporováno z SQL databáze v Microsoft Fabric. Připojení k OneLake není podporováno ve SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database ani Azure SQL Managed Instance.
  • Výpočty metodou pushdown jsou podporovány v aplikaci SQL Server 2019, SQL Server 2022 a SQL Server 2025. Výpočet pushdown není podporován v Azure SQL Database, Azure SQL Managed Instance ani v databázi SQL v Microsoft Fabric.
  • Autentizace spravované identity není podporována v SQL Server 2019 ani SQL Server 2022. Autentizace spravované identity je podporována v SQL Server 2025 pro připojení k Azure Blob Storage a ADLS Gen2 a vyžaduje SQL Server nebo SQL Server s podporou Azure Arc na Azure virtuálním stroji. Autentizace spravované identity je také podporována v Azure SQL Database a Azure SQL Managed Instance, ale v SQL databázích v Microsoft Fabric není podporována.

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 Nutná instalace 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
Ad hoc dotazy na soubory 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 SQL Server 2022: Ano 1

SQL Server 2025 a pozdější verze: Ne

Azure SQL Database, Azure SQL Managed Instance a databáze SQL v prostředí Fabric: Integrované
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

1 Pro přístup ke cloudovým souborům v SQL Server 2022 (16.x) musíte nainstalovat funkci PolyBase, ale konektory kompatibilní s úložištěm Azure Blob Storage, ADLS Gen2 a S3 nezávisí na službách PolyBase. SQL Server 2025 (17.x) a novější verze mají nativní podporu pro CSV, Parquet a Delta bez nutnosti instalace nebo spuštění služeb PolyBase.

  • Ad hoc dotazy v OLE DB slouží OPENROWSET(provider, connection, query) k rychlému jednorázovému přístupu k vzdálenému datovému zdroji bez vytváření perzistentních objektů. Mohou používat SQL autentizaci, Windows authentication nebo Microsoft Entra ID s MSOLEDBSQL. Tento scénář nevyžaduje instalaci PolyBase.
  • Ad hoc dotazy na soubory slouží OPENROWSET(BULK ...) k rychlému prozkoumání datových souborů nebo testování schématu před vytvořením tabulky. Mohou používat SAS tokeny, přístupové klíče, spravovanou identitu nebo Microsoft Entra ID. SQL Server 2022 vyžaduje instalaci funkce PolyBase pro cloudové soubory, ale nevyžaduje služby PolyBase. SQL Server 2025 a novější verze nevyžadují PolyBase pro cloudové soubory. Ad hoc dotazy na soubory jsou integrované do Azure SQL Database, Azure SQL Managed Instance a databáze SQL v prostředí Fabric.
  • Persistentní datové konektory používají CREATE EXTERNAL TABLE s sqlserver://, oracle://, teradata://, a podobnými místy pro opakovaný přístup, správu, statistiku a výpočty pushdown v produkčních zátěžích. Vyžadují SQL autentizaci a služby PolyBase.

Průvodce rozhodováním

Scénář Recommendation
Pro vzdálené SQL potřebujete autentizaci Microsoft Entra ID, nebo se chcete vyhnout službám PolyBase. Použití OPENROWSET(MSOLEDBSQL, ...) (ad hoc, žádné trvalé objekty).
Potřebujete trvalé tabulky, statistiky nebo pushdown výpočty do vzdálených databází. Používá se CREATE EXTERNAL TABLE s konektory PolyBase (sqlserver://, oracle://, teradata://, mongodb://, odbc://). OPENROWSET Nepodporuje konektory.
Zkoumáte nový soubor nebo testujete schéma. Použití OPENROWSET(BULK ...) (rychlá iterace, žádné perzistentní objekty).
Vstupujete data souboru do tabulky s transformacemi. Použít INSERT ... SELECT z OPENROWSET(BULK ...).
Potřebujete správu nebo sdílený přístup pro mnoho uživatelů či aplikací. Používejte CREATE EXTERNAL TABLE tak, aby byla oprávnění a metadata centralizovaná.
Pracujete v SQL databázi v prostředí Fabric. Použijte OPENROWSET(BULK ...) pro ad hoc dotazy OneLake nebo externí tabulky pro opakované použití; pro externí úložiště použijte zkratky OneLake.
  • Pokud potřebujete autentizaci Microsoft Entra ID pro vzdálené SQL nebo se chcete vyhnout službám PolyBase, použijte je OPENROWSET(MSOLEDBSQL, ...) pro ad hoc vzdálené dotazy bez persistentních objektů.
  • Pokud potřebujete trvalé tabulky, statistiky nebo přenesení výpočtů do vzdálených databází, použijte CREATE EXTERNAL TABLE s konektory PolyBase, jako jsou sqlserver://, oracle://, teradata://, mongodb:// a odbc://. OPENROWSET tyto konektory nepodporuje.
  • Pokud prozkoumáváte nový soubor nebo testujete schéma, používejte OPENROWSET(BULK ...) ho pro rychlou iteraci a žádné trvalé objekty.
  • Pokud načítáte data ze souboru do tabulky s transformacemi, použijte INSERT ... SELECT z OPENROWSET(BULK ...).
  • Pokud potřebujete správu nebo sdílený přístup pro více uživatelů nebo aplikací, použijte CREATE EXTERNAL TABLE tak, aby byla oprávnění a metadata centralizovaná.
  • Pokud pracujete se SQL databází ve Fabric, používejte OPENROWSET(BULK ...) pro ad hoc dotazy OneLake nebo externí tabulky pro znovupoužitelný přístup, a pro externí úložiště používejte 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ší verze, Azure SQL Database, Azure SQL Managed Instance, SQL databáze v Microsoft 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
  • Pro rychlý ad hoc dotaz na soubor Parquet nebo CSV použijte OPENROWSET. Tato metoda nevyžaduje externí stůl. SQL Server 2022 (16.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance a SQL database in Fabric tento vzorec podporují.
  • Pro opakované dotazy na soubory Parquet s trvalým schématem použijte externí tabulku místo Parquet. SQL Server 2022 (16.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance a SQL database in Fabric tento vzorec podporují.
  • Pro dotaz na CSV soubory použijte externí tabulku s formátem souboru pro vymezený text. SQL Server 2019 (15.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance a SQL database in Fabric tento vzorec podporují.
  • Pro dotaz na tabulky Delta Lake použijte externí tabulku s FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) a novější verze tento vzor podporují.
  • Pro export výsledků dotazů do souborů Parquet nebo CSV použijte CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) a novější verze a Azure SQL Managed Instance tento vzorec podporují.

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>
    1. Nainstalujte PolyBase na Windows nebo Linux pomocí Install PolyBase na Windows nebo Install PolyBase na Linux před nastavením přístupu k externím SQL datům.
    1. Vytvořte přihlašovací údaj s rozsahem databáze pro cílové přihlášení pomocí CREATE DATABASE SCOPED CREDENTIAL, aby se modul mohl ověřit vůči vzdálenému serveru.
    1. Vytvořte externí zdroj dat pro vzdálený SQL Server pomocí CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
    1. Vytvořte externí tabulku pomocí CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') jako reprezentace vzdálené tabulky.
    1. Dotazujte externí tabulku pomocí SELECT * FROM <external_table>.

Návod

Konektor SQL Serveru (sqlserver://) funguje také pro Azure SQL Database a Azure SQL Managed Instance. Použijte stejné kroky a nastavte LOCATION na Azure SQL Database nebo Azure SQL Managed Instance endpoint (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í 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. Export do ADLS Gen2 s CETAS vyžaduje verzi SQL Server 2022 CU5 nebo novější. Ano Parquet, CSV Vyžaduje konfiguraci serveru: povolit export 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
  • SQL Server 2022 a novější verze podporují CETAS a exportují soubory Parquet a CSV. Nastavení Konfigurace serveru: povolit export PolyBase je povinné. Export CETAS do ADLS Gen2 není dostupný v SQL Server 2022 verzích před CU5.
  • Azure SQL Managed Instance podporuje CETAS a exportuje soubory Parquet a CSV. Doporučení Ve výchozím nastavení zakázáno popisuje výchozí stav.
  • Azure SQL Database CETASu nepodporuje.
  • SQL databáze ve Fabric CETAS nepodporuje.

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 SQL platformách, které podporují externí tabulky přes CSV soubory.

  • 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 však můžete přeskočit, pokud používáte Managed Identity nebo Microsoft Entra autentizaci.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<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 = '<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 T-SQL PolyBase a jejich relace od ověřování (hlavní klíč databáze, přihlašovací údaje) prostřednictvím zdrojů dat a formátů souborů k dotazování metod (externí tabulka, OPENROWSET, BULK INSERT, CETAS).

Ú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 potřebujete 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é
    • Přihlašovací karta SAS tokenu používá IDENTITY = 'SHARED ACCESS SIGNATURE' a uchovává tajnou hodnotu, takže vyžaduje hlavní klíč databáze.
    • Přístupový klíč S3 používá IDENTITY = 'S3 ACCESS KEY' a uchovává hodnotu tajemství, takže vyžaduje hlavní klíč databáze.
      • SQL přihlášení nebo základní autentizační přihlašovací údaje používají IDENTITY = '<username>' a ukládají hodnotu tajemství, takže vyžaduje hlavní klíč databáze.
    • Přístupový přístup k účtu úložiště používá IDENTITY = '<storage_account_name>' a ukládá hodnotu tajemství, takže vyžaduje hlavní klíč databáze.
  • 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é
    • Přihlašovací údaje Managed Identity nepoužívají IDENTITY = 'Managed Identity' ani neukládají žádné tajemství, takže nepotřebují hlavní klíč databáze.
    • Přihlašovací karta Microsoft Entra ID nepoužívá IDENTITY = 'User Identity' ani IDENTITY = 'Managed Identity' neukládá žádné tajemství, takže nevyžaduje hlavní klíč databáze.

Návod

Pokud vaše CREATE DATABASE SCOPED CREDENTIAL prohlášení neobsahuje tajemství, DMK nepotřebujete. 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 = '<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 v SQL Server 2022 (16.x) a SQL Server 2019 (15.x) 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 1; Ne pro lokální SQL Server 2022 (16.x) a SQL Server 2019 (15.x)
Dotazy na soubory v SQL Server 2025 (17.x) a novějších verzích 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 Ne SQL Server 2022 (16.x) a novější verze, Azure SQL Database, Azure SQL Managed Instance, SQL databáze v Microsoft Fabric
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)

1 Pro přístup ke cloudovým souborům v SQL Server 2022 (16.x) musí být funkce PolyBase nainstalována.

  • Dotazy OLE DB používají OPENROWSET(provider, connection, query) pro připojení k libovolnému zdroji OLE DB prostřednictvím MSOLEDBSQL, SQLOLEDB nebo jiného zprostředkovatele ve všech podporovaných verzích SQL Serveru. Podporují SQL autentizaci, Windows authentication a Microsoft Entra ID s MSOLEDBSQL a nevyžadují instalaci služeb PolyBase.
  • Dotazy na soubory slouží OPENROWSET(BULK ...) ke čtení souborů na lokálním disku, síťových sdílených prostorách nebo cloudových úložištích, jako je Azure Blob Storage, ADLS, S3 nebo OneLake, pomocí SAS tokenu, přístupového klíče, spravované identity nebo Microsoft Entra ID. Jsou podporovány pro lokální a síťové soubory ve verzích SQL Server 2005 a novějších, pro cloudové soubory v SQL Server 2022 (16.x) a pozdějších verzích, a v Azure SQL Database, Azure SQL Managed Instance a SQL databázích ve Fabric. Dotazy na soubory nevyžadují služby PolyBase pro lokální soubory ani pro cloudové soubory v SQL Server 2022 (16.x) a novějších verzích.
  • Konektory PolyBase používají CREATE EXTERNAL TABLE s CREATE EXTERNAL DATA SOURCE a umístěním oracle://, sqlserver://, teradata://, mongodb:// nebo odbc:// k připojení ke vzdáleným zdrojům SQL Server, Oracle, Teradata, MongoDB nebo ODBC. Vyžadují SQL autentizaci a služby PolyBase ve verzích SQL Server 2019 (15.x) a novějších verzích na Windows a SQL Server 2025 (17.x) a novějších verzích na Linuxu. Další informace najdete v tématu CREATE EXTERNAL DATA SOURCE (Transact-SQL).

Kdy použít jednotlivé přístupy

Použijte OLE DB OPENROWSET pro:

  • Používejte OLE DB OPENROWSET pro rychlé, jednorázové ad hoc dotazy bez vytváření trvalých objektů.
  • Použijte OLE DB OPENROWSET pro Microsoft Entra ID nebo autentizaci spravované identity přes MSOLEDBSQL.
  • Použijte OLE DB OPENROWSET , abyste se vyhnuli závislostem na službách PolyBase.
  • Použijte OLE DB OPENROWSET k připojení k jakémukoli datovému zdroji, který má poskytovatele OLE DB.

Soubor OPENROWSET(BULK) použijte pro:

  • Používejte soubor OPENROWSET(BULK ...) pro ad hoc průzkum souborů a objevování schémat.
  • Použijte soubor OPENROWSET(BULK ...) pro rychlé transformace a náhledy, než se rozhodnete pro definici tabulky.
  • Použijte soubor OPENROWSET(BULK ...) pro flexibilní inline transformace sloupců, jako je casting, filtrování a výpočty sloupců.
  • Používejte soubor OPENROWSET(BULK ...) pro data, která se často nemění, a nepotřebují trvalá metadata.

Použijte konektory PolyBase s CREATE EXTERNAL TABLE pro:

  • Používejte s konektory PolyBase CREATE EXTERNAL TABLE trvalé definice tabulek, které lze opakovaně používat a k nimž přistupuje více uživatelů nebo aplikací.
  • Používejte konektory PolyBase s CREATE EXTERNAL TABLE pro produkční úlohy, které vyžadují statistiky a optimalizaci plánů dotazů.
  • Používejte konektory PolyBase s CREATE EXTERNAL TABLE pro výpočty pushdown nad vzdálenými zdroji, jako jsou Oracle a SQL Server.
  • Používejte konektory PolyBase s CREATE EXTERNAL TABLE pro sdílenou správu a zabezpečení; po vytvoření tabulky uživatelé potřebují pouze oprávnění SELECT.
  • Používejte konektory PolyBase s CREATE EXTERNAL TABLE, pokud je u vzdáleného zdroje k dispozici ověřování SQL Serveru.

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 Managed Instance: ruční statistiky v jednotlivých sloupcích přes sys.sp_create_openrowset_statistics. Viz ruční statistika OPENROWSET.

SQL Server 2022 (16.x) a novější verze, Azure SQL Database, databáze SQL v prostředí Fabric: automatické vytváření statistik pro predikáty. Manuální OPENROWSET statistiky nejsou na SQL Server podporovány.
Ú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
  • OPENROWSET(BULK ...) je nejlepší pro ad hoc průzkum a jednorázové dotazy, zatímco externí tabulka je lepší pro trvalé, znovupoužitelné definice tabulek.
  • OPENROWSET(BULK ...) po spuštění dotazu neukládá metadata do databáze, zatímco externí tabulka ukládá definici tabulky, zdroj dat a formát souboru jako databázové objekty.
  • OPENROWSET(BULK ...) automaticky odvozuje schéma ze souboru Parquet nebo schéma definuje v souladu s klauzulí WITH , zatímco externí tabulka definuje schéma explicitně ve CREATE EXTERNAL TABLE výroku.
  • OPENROWSET(BULK ...) vyžaduje ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS, zatímco externí tabulku mohou po jejím vytvoření dotazovat uživatelé, kteří potřebují pouze standardní oprávnění SELECT.
  • OPENROWSET(BULK ...) Podporuje vypočítáné sloupce v dotazovacích a metadatových funkcích jako filename() a , filepath()zatímco externí tabulka má pevný seznam sloupců a vyžaduje transformace v pohledu nebo v dotazu, který čte externí tabulku.
  • OPENROWSET(BULK ...) má omezenou podporu statistik: Azure SQL Managed Instance může pro statistiky jednoho sloupce používat sys.sp_create_openrowset_statistics, ale SQL Server 2022 (16.x) a novější verze, Azure SQL Database a SQL database ve Fabric automaticky vytvářejí statistiky pro predikáty. Manuální OPENROWSET statistiky nejsou podporovány na SQL Server, Azure SQL Database a SQL databázích ve Fabric. Externí tabulka podporuje plnou CREATE STATISTICS funkci na všech platformách plus automatické statistiky v SQL Server 2022 (16.x) a novějších verzích, Azure SQL Database a SQL databázi ve Fabric. Viz ručně vytvořené statistiky pro OPENROWSET a Vytvoření ručně vytvořených statistik pro externí tabulku.
  • OPENROWSET(BULK ...) má omezené možnosti přenesení operací do zdroje a nepodporuje přenesení operací do vzdálených zdrojů RDBMS, zatímco externí tabulka podporuje přenesení výpočtů pro konektory RDBMS.
  • OPENROWSET(BULK ...) je nejlepší pro průzkum dat, objevování schémat, prototypování, jednorázové načítání a flexibilní transformace, zatímco externí tabulka je nejlepší pro produkční pracovní zátěže, opakované dotazy, sdílený přístup, dashboardy a reportování.

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:

Samostatné příkazy BULK INSERT nejsou v SQL databázi ve Fabric podporovány. Pro vstup dat použijte INSERT ... SELECT proti OPENROWSET(BULK ...) 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 k souborům v cloudu DATA_SOURCEpodporuje Azure Blob Storage v SQL Server 2017 (14.x) a novějších verzích, Azure SQL Database a Azure SQL Managed Instance. SQL Server 2019 CU11 a pozdější aktualizace také podporují ADLS Gen2. Úložiště kompatibilní se S3 není podporováno. DATA_SOURCEpodporuje Azure Blob Storage v SQL Server 2017 (14.x) a novějších verzích, ADLS Gen2 v SQL Server 2019 CU11 a novějších verzích a S3-kompatibilní úložiště v SQL Server 2022 (16.x) a novějších verzích. Azure SQL Database a Azure SQL Managed Instance podporují Azure Blob Storage a ADLS Gen2. SQL databáze ve Fabric podporuje OneLake a externí úložiště prostřednictvím zkratek OneLake.
Soubory Parquet nebo Delta Nepodporováno. Pouze csv nebo text s oddělovači Ano. SQL Server 2022 (16.x) a novější verze, Azure SQL Managed Instance a Azure SQL Database podporují FORMAT = 'PARQUET' a FORMAT = 'PARQUET'; databáze SQL ve Fabric podporuje DELTA, ale ne FORMAT = 'DELTA'. Další informace naleznete v tématu OPENROWSET BULK (Transact-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
  • BULK INSERT Načítá data ze souboru přímo do cílové tabulky a OPENROWSET(BULK ...) vrací řádkovou sadu, kterou můžete použít v příkazu SELECT OR INSERT ... SELECT .
  • BULK INSERT je samostatný příkaz, zatímco OPENROWSET(BULK ...) musí být použit uvnitř dotazu, například SELECT * FROM OPENROWSET(BULK ...) nebo INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...).
  • BULK INSERT vždy zapisuje přímo do cílové tabulky, zatímco OPENROWSET(BULK ...) může SELECT ze souboru, aniž by cokoli vkládal do jakékoli tabulky ani do dočasné tabulky.
  • BULK INSERT má omezenou podporu pro transformace sloupců, protože data proudí ze souboru do tabulky as-is, přičemž mapování je řízeno formátovým souborem nebo pořadím sloupců. OPENROWSET(BULK ...) podporuje výrazy, CAST, filtry WHERE, JOIN a vypočítané sloupce v rámci nadřazeného SELECT.
  • BULK INSERT používá klauzuli WITH pro BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, , TABLOCK, a další nápovědy. OPENROWSET(BULK ...) podporuje hinty tabulek prostřednictvím INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
  • BULK INSERT nepodporuje import velkých objektů s jednou hodnotou. OPENROWSET(BULK ...) podporuje SINGLE_BLOB, SINGLE_CLOB a SINGLE_NCLOB pro import celého souboru jako jediné hodnoty varbinary(max), varchar(max) nebo nvarchar(max) v uvedeném pořadí.
  • BULK INSERT i OPENROWSET(BULK ...) podporují soubory ve formátu XML i jiném než XML.
  • Pro přístup ke cloudovým souborům s BULK INSERT, parametr DATA_SOURCE podporuje Azure Blob Storage v SQL Server 2017 (14.x) a novějších verzích, Azure SQL Database a Azure SQL Managed Instance. Aktualizace SQL Server 2019 CU11 a pozdější také podporují ADLS Gen2, ale BULK INSERT nepodporují úložiště kompatibilní se S3. Pro OPENROWSET(BULK ...), DATA_SOURCE podporuje Azure Blob Storage v SQL Server 2017 (14.x) a novějších verzích, ADLS Gen2 v SQL Server 2019 CU11 a novějších verzích a S3-kompatibilní úložiště v SQL Server 2022 (16.x) a novějších verzích. Azure SQL Database a Azure SQL Managed Instance podporují Azure Blob Storage a ADLS Gen2. SQL databáze ve Fabric podporuje OneLake a externí úložiště prostřednictvím zkratek OneLake.
  • BULK INSERT nepodporuje soubory Parquet ani Delta a podporuje pouze CSV nebo oddělený text. OPENROWSET(BULK ...)podporuje FORMAT = 'PARQUET' a FORMAT = 'DELTA' v SQL Server 2022 (16.x) a novějších verzích, Azure SQL Database a Azure SQL Managed Instance. SQL databáze ve Fabric podporuje FORMAT = 'PARQUET', ale nepodporuje FORMAT = 'DELTA'. Další informace naleznete v tématu OPENROWSET BULK (Transact-SQL).
  • BULK INSERT vyžaduje ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS plus oprávnění INSERT k cílové tabulce, zatímco OPENROWSET(BULK ...) vyžaduje ADMINISTER BULK OPERATIONS nebo ADMINISTER DATABASE BULK OPERATIONS.
  • BULK INSERT Podporuje minimální logování v rámci jednoduchého nebo hromadně logovaného modelu obnovy s TABLOCK. OPENROWSET(BULK ...) podporuje minimální logování, když se používá s INSERT ... SELECT a TABLOCK.

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:

  • Použijte OPENROWSET(BULK ...) k dotazování nebo náhledu dat souborů bez vytvoření tabulky.
  • Použijte OPENROWSET(BULK ...) k transformaci, filtrování nebo spojení dat během importu.
  • Použijte OPENROWSET(BULK ...) k načítání souborů Parquet nebo Delta, protože BULK INSERT tyto formáty nepodporuje.
  • Použijte OPENROWSET(BULK ...) k importu celého souboru jako jedné hodnoty LOB s SINGLE_BLOB, SINGLE_CLOB, nebo 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

Když dotazujete externí soubory pomocí OPENROWSET nebo externích tabulek, použijte vestavěné funkce a postupy k inspekci metadat souborů, objevování schémat a implementaci dotazů s vědomím oddílů.

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 vidíte varchar(8000), kde by stačil varchar(100), nahraďte jej.

  • 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á procedura pro SQL Server, Azure SQL Database, Azure SQL Managed Instance a databázi SQL ve Fabric, ale je obzvlášť užitečná pro dotazy OPENROWSET. 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í