Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí na: SQL Server 2016 (13.x) a novější verze
Azure SQL Database
Azure SQL Managed Instance
SQL 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 aBULK INSERTpro 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]://naabs:// -
ADLS Gen2: Změna
abfs[s]://naadls://
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í 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:
- VYTVOŘENÍ EXTERNÍHO ZDROJE DAT
- VYTVOŘIT EXTERNÍ FORMÁT SOUBORU
- VYTVOŘENÍ EXTERNÍ TABULKY
- OPENROWSET
- VYTVOŘIT EXTERNÍ TABULKU POMOCÍ SELECT (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 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 IDENTITYhodnotaMá 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 IDENTITYhodnotaMá 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í
SELECTjenom 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
OPENROWSETpodporuje 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:
- K importu dat do SQL Serveru použijte funkci BULK INSERT nebo OPENROWSET(BULK...): Podrobný průvodce s důležitými informacemi o zabezpečení.
-
Hromadný import a export dat (SQL Server): Přehled všech metod hromadného přesunu dat (bcp,
BULK INSERT,OPENROWSET). - BULK INSERT (Transact-SQL): Úplná referenční příručka k T-SQL.
- OPENROWSET BULK (Transact-SQL): Kompletní reference T-SQL.
- Příklady hromadného přístupu k datům ve službě Azure Blob Storage: Souběžné příklady s využitím obou metod s úložištěm Azure
-
Hromadně importujte data velkých objektů pomocí zprostředkovatele hromadné sady řádků OPENROWSET (SQL Server):
SINGLE_BLOB,SINGLE_CLOBaSINGLE_NCLOBpříklady. - K hromadnému importu dat (SQL Server) použijte formátovací soubor: Formátování použití souborů pomocí obou metod.
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í |