Gegevens verbinden, opvragen en exporteren met PolyBase

Van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Met gegevensvirtualisatie kunt u Transact-SQL (T-SQL)-query's uitvoeren op externe gegevens zonder deze in uw database te laden. U definieert een externe gegevensbron, optionele bestandsindeling en externe tabel en voert vervolgens een query uit op de externe tabel met SELECT net als elke andere tabel.

Deze handleiding helpt u bij het volgende:

  • Begrijpen welke PolyBase functies biedt voor uw SQL-platform en versieondersteuning.
  • Kies tussen OPENROWSET, externe tabellen en BULK INSERT voor het opvragen of opnemen van gegevens.
  • Volg stapsgewijze koppelingen voor veelvoorkomende scenario's.
  • Bekijk de prestaties, probleemoplossing en aanbevolen procedures voor productieworkloads.

Platformondersteuning

Veelvoorkomende gebruiksvoorbeelden

In de volgende tabel worden mogelijke gebruiksscenario's beschreven.

Scenario Gebruik
Ad-hoc bestandsverkenning OPENROWSET(BULK ...)
Herbruikbare bestandsquery's voor BI of rapportage Externe tabellen op basis van bestanden
Query's op meerdere databases (SQL Server, Oracle, Teradata, MongoDB, ODBC) PolyBase connectors met externe tabellen
Queryresultaten exporteren naar bestanden CREATE EXTERNAL TABLE AS SELECT (CETAS)
Bulk verzenden naar tabellen BULK INSERT of OPENROWSET(BULK ...) met INSERT ... SELECT
  • Voor ad-hoc bestandsverkenning, gebruik OPENROWSET(BULK ...) om bestanden te inspecteren zonder een herbruikbare tabel te maken.
  • Voor herbruikbare bestandsquerys in BI of rapportagescenario's gebruik je externe tabellen over bestanden om een schema te behouden en resultaten te delen over queries.
  • Voor cross-database query's gebruik je PolyBase-connectoren met externe tabellen om toegang te krijgen tot SQL Server, Oracle, Teradata, MongoDB of ODBC-bronnen.
  • Voor het exporteren van zoekresultaten naar bestanden, gebruik CREATE EXTERNAL TABLE AS SELECT (CETAS) om Parquet- of CSV-uitvoer buiten de database te schrijven.
  • Voor het bulksgewijs laden in tabellen gebruik je BULK INSERT of OPENROWSET(BULK ...) met INSERT ... SELECT om bestandsgegevens in databasetabellen te laden.

Welke functies zijn beschikbaar waar?

De volgende tabel toont welke kernfuncties van PolyBase en datavirtualisatie beschikbaar zijn op elk SQL-platform, beginnend met SQL Server 2019. Voor functionaliteitsbeschikbaarheid in SQL Server 2016 en SQL Server 2017 op Windows, zie PolyBase-functies en beperkingen. Gebruik deze tabel om te bepalen wat u op uw platform kunt doen voordat u de gedetailleerde handleidingen gebruikt.

Feature SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL Database Azure SQL Managed Instance (een beheerde database-instantie van Azure) SQL-database in Microsoft Fabric
Externe tabellen Ja Ja Ja Ja Ja Ja
OPENROWSET (BULK) Ja 1 Ja Ja Ja Ja Ja
CETAS (export) No Ja Ja No Ja No
CSV-/gescheiden bestanden Ja 2 Ja Ja Ja Ja Ja
Parquet-bestanden No Ja Ja Ja Ja Ja
Delta Lake-tabellen No Ja Ja No No No
Verbinding maken met een andere SQL Server Ja Ja Ja No No No
Verbinding maken met Azure SQL Database of Azure SQL Managed Instance Ja 3 Ja 3 Ja 3 No No No
Verbinding maken met Oracle/Teradata/MongoDB Ja Ja Ja No No No
Verbinding maken met Azure Blob Storage Ja Ja Ja Ja Ja No
Verbinding maken met ADLS Gen2 Ja 5 Ja Ja Ja Ja No
Verbinding maken met S3-compatibele opslag No Ja Ja No No No
Verbinding maken met OneLake (Fabric) No No No No No Ja
Pushdownberekening Ja Ja Ja No No No
beheerde identiteitverificatie No No Ja 4 Ja Ja No

1 SQL Server 2019 (15.x) ondersteunt OPENROWSET(BULK...) voor lokale en netwerkbestandspaden. In SQL Server 2022 (16.x) en latere versies wordt OPENROWSET(BULK...) ook het lezen vanuit cloudopslag ondersteund met FORMAT = 'PARQUET', FORMAT = DELTAen FORMAT = 'CSV'.

2 CSV-ondersteuning in SQL Server 2019 (15.x) vereist Hadoop. In SQL Server 2022 (16.x) en latere versies wordt CSV systeemeigen ondersteund zonder Hadoop.

3 Maakt gebruik van de SQL Server-connector (sqlserver://). De database-scoped credential richt zich op het SQL-eindpunt. Gebruik dezelfde stappen als bij het verbinden met een andere SQL Server-instantie.

4 Verificatie van beheerde identiteit wordt ondersteund voor het maken van verbinding met Azure Blob Storage (ABS) en ADLS Gen2. Hiervoor is SQL Server of SQL Server met Azure Arc vereist op een Azure-VM voor on-premises SQL Server. Het is systeemeigen beschikbaar in Azure SQL Database en Azure SQL Managed Instance.

5 SQL Server 2019 CU11 en latere versies ondersteunen Azure Data Lake Storage Gen2 met het abfs voorvoegsel orabfss. In SQL Server 2022 en latere versies gebruik je het adls voorvoegsel.

  • Externe tabellen worden ondersteund in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance en SQL Database in Microsoft Fabric.
  • OPENROWSET (BULK) wordt ondersteund in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance en de SQL-database in Microsoft Fabric. SQL Server 2019 ondersteunt lokale en netwerkbestandspaden, terwijl SQL Server 2022 en latere versies ook het lezen van cloudopslag ondersteunen met FORMAT = 'PARQUET', FORMAT = DELTA, en FORMAT = 'CSV'.
  • CETAS-export wordt niet ondersteund in SQL Server 2019, Azure SQL Database of SQL-database in Microsoft Fabric. CETAS-export wordt ondersteund in SQL Server 2022, SQL Server 2025 en Azure SQL Managed Instance.
  • CSV- en gescheiden bestanden worden ondersteund in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance en SQL Database in Microsoft Fabric. SQL Server 2019 vereist Hadoop voor CSV-ondersteuning, terwijl SQL Server 2022 en latere versies CSV native ondersteunen zonder Hadoop.
  • Parquet-bestanden worden niet ondersteund in SQL Server 2019. Parquetbestanden worden ondersteund in SQL Server 2022, SQL Server 2025, Azure SQL Database, Azure SQL Managed Instance en SQL Database in Microsoft Fabric.
  • Delta Lake-tabellen worden niet ondersteund in SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance of SQL database in Microsoft Fabric. Delta Lake-tabellen worden ondersteund in SQL Server 2022 en SQL Server 2025.
  • Verbinding maken met een andere SQL Server-instantie wordt ondersteund in SQL Server 2019, SQL Server 2022 en SQL Server 2025. Verbinden met een andere SQL Server-instantie wordt niet ondersteund door Azure SQL Database, Azure SQL Managed Instance of SQL Database in Microsoft Fabric.
  • Verbinding maken met Azure SQL Database of Azure SQL Managed Instance wordt ondersteund door SQL Server 2019, SQL Server 2022 en SQL Server 2025 via de SQL Server connector. De database-scoped credential richt zich op het Azure SQL Database- of Azure SQL Managed Instance-endpoint, en de configuratiestappen zijn hetzelfde als voor het verbinden met een andere SQL Server-instantie. Deze verbindingen worden niet ondersteund door Azure SQL Database, Azure SQL Managed Instance of SQL Database in Microsoft Fabric.
  • Verbinding maken met Oracle, Teradata of MongoDB wordt ondersteund door SQL Server 2019, SQL Server 2022 en SQL Server 2025. Deze verbindingen worden niet ondersteund door Azure SQL Database, Azure SQL Managed Instance of SQL Database in Microsoft Fabric.
  • Verbinding met Azure Blob Storage wordt ondersteund door SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database en Azure SQL Managed Instance. Verbinding maken met Azure Blob Storage wordt niet ondersteund vanuit de SQL-database in Microsoft Fabric.
  • Verbinding maken met ADLS Gen2 wordt niet ondersteund in SQL Server 2019-releases vóór CU11 of vanuit de SQL-database in Microsoft Fabric. Verbinding met ADLS Gen2 wordt ondersteund vanaf SQL Server 2019 CU11, en in SQL Server 2022, SQL Server 2025, Azure SQL Database en Azure SQL Managed Instance.
  • Verbinding maken met S3-compatibele opslag wordt niet ondersteund door SQL Server 2019, Azure SQL Database, Azure SQL Managed Instance of SQL Database in Microsoft Fabric. Verbinding maken met S3-compatibele opslag wordt ondersteund door SQL Server 2022 en SQL Server 2025.
  • Verbinding met OneLake wordt ondersteund vanuit een SQL-database in Microsoft Fabric. Verbinding maken met OneLake wordt niet ondersteund in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL Database of Azure SQL Managed Instance.
  • Pushdown-berekening wordt ondersteund in SQL Server 2019, SQL Server 2022 en SQL Server 2025. Pushdown-berekening wordt niet ondersteund in Azure SQL Database, Azure SQL Managed Instance of SQL Database in Microsoft Fabric.
  • Beheerde identiteitsauthenticatie wordt niet ondersteund in SQL Server 2019 of SQL Server 2022. Managed Identity-authenticatie wordt ondersteund in SQL Server 2025 voor verbindingen met Azure Blob Storage en ADLS Gen2, en vereist Azure Arc-geschikte SQL Server of SQL Server op een Azure virtuele machine. Managed Identity-authenticatie wordt ook ondersteund in Azure SQL Database en Azure SQL Managed Instance, maar niet in SQL Database in Microsoft Fabric.

Opmerking

Vanaf SQL Server 2025 (17.x) is het uitvoeren van query's op gegevensbestanden (CSV, Parquet en Delta) in Azure Blob Storage, ADLS Gen2 of S3-compatibele opslag een systeemeigen enginemogelijkheid en hoeft u geen PolyBase-services meer te installeren of uit te voeren. VOOR RDBMS-connectors (SQL Server, Oracle, Teradata, MongoDB, ODBC) moeten PolyBase-services nog steeds worden geïnstalleerd en uitgevoerd. SQL Server 2025 (17.x) voegt ook Linux-ondersteuning toe voor deze connectors, die eerder alleen beschikbaar waren in Windows.

Query's uitvoeren op externe gegevens

Voordat u een specifiek scenario kiest, moet u de drie manieren begrijpen waarop u externe gegevens kunt opvragen:

Methode Syntaxis Gebruik wanneer Authentication PolyBase-installatie vereist
ad-hocqueries van OLE DB OPENROWSET(provider, connection, query) U wilt een snelle eenmalige query zonder permanente objecten of microsoft Entra ID-verificatie nodig hebben SQL-verificatie, Windows-verificatie, Microsoft Entra ID (MSOLEDBSQL) No
Ad hoc queries op bestanden OPENROWSET(BULK ...) U wilt bestandsgegevens snel verkennen of schema's testen voordat u een tabel maakt SAS-token, toegangssleutel, Beheerde identiteit, Microsoft Entra-id SQL Server 2022: Ja 1

SQL Server 2025 en latere versies: Nee

Azure SQL Database, Azure SQL Managed Instance en SQL-database in Fabric: Ingebouwd
Permanente gegevensconnectors CREATE EXTERNAL TABLE met sqlserver://, oracle://, teradata://, enz. U hebt terugkerende toegang, governance, statistieken en pushdownberekeningen voor productie nodig Alleen SQL-verificatie Ja

1 Voor cloud-bestandstoegang in SQL Server 2022 (16.x) moet je de PolyBase-functie installeren, maar de Azure Blob Storage-, ADLS Gen2- en S3-compatibele opslagconnectors zijn niet afhankelijk van PolyBase-diensten. SQL Server 2025 (17.x) en latere versies bieden native ondersteuning voor CSV, Parquet en Delta zonder het installeren of uitvoeren van PolyBase-diensten.

  • OLE DB ad hoc queries worden gebruikt OPENROWSET(provider, connection, query) voor snelle eenmalige toegang tot een externe databron zonder persistente objecten aan te maken. Ze kunnen SQL-authenticatie, Windows authentication of Microsoft Entra ID gebruiken met MSOLEDBSQL. Dit scenario vereist geen installatie van PolyBase.
  • Ad-hoc queries op bestanden worden gebruikt OPENROWSET(BULK ...) om snel bestandsgegevens te verkennen of een schema te testen voordat een tabel wordt aangemaakt. Ze kunnen SAS-tokens, toegangssleutels, Managed Identity of Microsoft Entra ID gebruiken. SQL Server 2022 vereist de installatie van de PolyBase-functie voor cloudbestanden, maar vereist geen PolyBase-services. SQL Server 2025 en latere versies vereisen geen PolyBase voor cloudbestanden. File ad hoc queries zijn ingebouwd in Azure SQL Database, Azure SQL Managed Instance en SQL Database in Fabric.
  • Persistente gegevensconnectors gebruiken CREATE EXTERNAL TABLE met sqlserver://, oracle://, teradata:// en vergelijkbare locaties voor herhaalde toegang, governance, statistieken en pushdown-bewerkingen in productieworkloads. Ze vereisen SQL-authenticatie en PolyBase-diensten.

Beslissingshandleiding

Scenario Aanbeveling
Je hebt Microsoft Entra ID-authenticatie nodig voor remote SQL, of wilt PolyBase-diensten vermijden. Gebruik OPENROWSET(MSOLEDBSQL, ...) (ad hoc, geen persistente objecten).
Je hebt persistente tabellen, statistieken of pushdown-berekeningen naar externe databases nodig. Gebruik CREATE EXTERNAL TABLE met PolyBase-connectors (sqlserver://, oracle://, teradata://, mongodb://, odbc://). OPENROWSET Ondersteunt geen connectoren.
Je onderzoekt een nieuw bestand of test een schema. Gebruik OPENROWSET(BULK ...) (snelle iteratie, geen persistente objecten).
Je verwerkt bestandsgegevens in een tabel met transformaties. Gebruik INSERT ... SELECT van OPENROWSET(BULK ...).
Je hebt governance of gedeelde toegang nodig voor veel gebruikers of applicaties. Gebruik CREATE EXTERNAL TABLE het zodat permissies en metadata gecentraliseerd zijn.
Je werkt in SQL-databases in Fabric. Gebruik OPENROWSET(BULK ...) voor ad-hoc OneLake-queries of externe tabellen voor herbruikbare toegang; voor externe opslag gebruik je OneLake-snelkoppelingen.
  • Als je Microsoft Entra ID-authenticatie nodig hebt voor remote SQL of PolyBase-diensten wilt vermijden, gebruik OPENROWSET(MSOLEDBSQL, ...) dan voor ad hoc remote queries zonder persistente objecten.
  • Als je persistente tabellen, statistieken of pushdown-berekeningen naar externe databases nodig hebt, gebruik CREATE EXTERNAL TABLE dan PolyBase-connectoren zoals sqlserver://, oracle://, teradata://, , mongodb://en odbc://. OPENROWSET Ondersteunt deze connectoren niet.
  • Als je een nieuw bestand onderzoekt of een schema test, gebruik OPENROWSET(BULK ...) het dan voor snelle iteratie en geen persistente objecten.
  • Als je bestandsgegevens invoert in een tabel met transformaties, gebruik INSERT ... SELECT dan van OPENROWSET(BULK ...).
  • Als je governance of gedeelde toegang nodig hebt voor veel gebruikers of applicaties, gebruik CREATE EXTERNAL TABLE dan zodat permissies en metadata gecentraliseerd zijn.
  • Als je werkt in een SQL-database in Fabric, gebruik OPENROWSET(BULK ...) dan ad-hoc OneLake-queries of externe tabellen voor herbruikbare toegang, en gebruik OneLake-snelkoppelingen voor externe opslag.

Kies uw scenario

Nu u de drie benaderingen begrijpt, gebruikt u een van de volgende handleidingen om uw specifieke use-case te implementeren.

Querybestanden (Parquet, CSV of Delta)

Als uw gegevens zich in Parquet-, CSV- of Delta-bestanden bevinden in Azure Blob Storage, ADLS Gen2, S3-compatibele opslag of OneLake, volgt u een van deze handleidingen:

Scenario Aanbevolen handleiding Platforms
Snelle ad-hocvraag voor een Parquet- of CSV-bestand Gebruik OPENROWSET. Er is geen externe tabel nodig SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Herhaalde query's op Parquet-bestanden met een permanent schema Een externe tabel maken via Parquet SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Query's uitvoeren op CSV-bestanden met een externe tabel Een externe tabel maken met een bestandstype voor door scheidingstekens gescheiden tekst SQL Server 2019 (15.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
Queries uitvoeren op Delta Lake-tabellen Een externe tabel maken met FILE_FORMAT = DeltaLakeFileFormat SQL Server 2022 (16.x) en latere versies
Queryresultaten exporteren naar Parquet- of CSV-bestanden (CETAS) Gebruik CREATE EXTERNAL TABLE AS SELECT SQL Server 2022 (16.x) en latere versies, Azure SQL Managed Instance
  • Voor een snelle ad hoc-query op een Parquet- of CSV-bestand, gebruik OPENROWSET. Deze methode vereist geen externe tafel. SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric ondersteunen dit patroon.
  • Voor herhaalde queries op Parquet-bestanden met een persistent schema gebruik je een externe tabel over Parquet. SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric ondersteunen dit patroon.
  • Voor een query op CSV-bestanden gebruik je een externe tabel met een bestandsformaat voor gescheiden tekst. SQL Server 2019 (15.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric ondersteunen dit patroon.
  • Voor een query op Delta Lake-tabellen gebruik je een externe tabel met FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) en latere versies ondersteunen dit patroon.
  • Voor het exporteren van zoekresultaten naar Parquet- of CSV-bestanden, gebruik CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) en latere versies en Azure SQL Managed Instance ondersteunen dit patroon.

U kunt ook een van deze stapsgewijze zelfstudies volgen:

Handleiding Beschrijving
Aan de slag met PolyBase in SQL Server 2022 Omvat OPENROWSET met Parquet en CSV, externe tabellen en bestandsmapnavigatie.
Parquet-bestand virtualiseren in een met S3 compatibele objectopslag met PolyBase Zelfstudie voor SQL Server 2022 (16.x) en latere versies.
CSV-bestand virtualiseren met PolyBase Zelfstudie voor SQL Server 2022 (16.x) en latere versies.
Deltatabel virtualiseren met PolyBase Zelfstudie voor SQL Server 2022 (16.x) en latere versies.
Gegevensvirtualisatie met Azure SQL Database (preview) Azure SQL Database-gids voor Parquet en CSV.
Gegevensvirtualisatie met Azure SQL Managed Instance Handleiding voor Azure SQL Managed Instance voor Parquet, CSV en CETAS.
Datavirtualisatie in SQL-database binnen Fabric SQL Database in Fabric-handleiding voor OneLake-bestanden.

Verbinding maken met een ander SQL Server-exemplaar, Azure SQL Database of SQL Managed Instance

In SQL Server 2019 (15.x) en latere versies kan PolyBase query's uitvoeren op tabellen in een ander SQL Server-exemplaar, Azure SQL Database of Azure SQL Managed Instance, zonder gekoppelde servers te gebruiken.

Belangrijk

De sqlserver:// connector wordt niet ondersteund in SQL Database in Fabric. PolyBase RDBMS-connectors gebruiken SQL-verificatie via CREATE DATABASE SCOPED CREDENTIAL en bieden geen ondersteuning voor Microsoft Entra ID, Managed Identity of service-principalverificatie. Omdat voor SQL-database in Fabric Microsoft Entra-verificatie is vereist, kunt u er geen verbinding mee maken via PolyBase.

Stap Wat u moet doen
1. PolyBase installeren PolyBase installeren in Windows of PolyBase installeren op Linux
2. Een referentie maken CREATE DATABASE SCOPED CREDENTIAL met de doelaanmelding
3. Een externe gegevensbron maken CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. Een externe tabel maken CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. Opzoeking SELECT * FROM <external_table>
    1. Installeer PolyBase op Windows of Linux door Install PolyBase on Windows te gebruiken of PolyBase op Linux te installeren voordat je toegang tot externe SQL-data configureert.
    1. Maak een database-scoped credential aan met de doellogin door te gebruiken CREATE DATABASE SCOPED CREDENTIAL zodat de engine kan authenticeren bij de externe server.
    1. Maak een externe databron aan voor de externe SQL Server door gebruik te maken van CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
    1. Maak een externe tabel aan door te gebruiken CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') om de externe tabel te representeren.
    1. Raadpleeg de externe tabel met behulp van SELECT * FROM <external_table>.

Aanbeveling

De SQL Server-connector (sqlserver://) werkt ook voor Azure SQL Database en Azure SQL Managed Instance. Gebruik dezelfde stappen en stel LOCATION in op het Azure SQL Database- of Azure SQL Managed Instance-eindpunt (bijvoorbeeld sqlserver://myserver.database.windows.net).

Zie PolyBase configureren voor toegang tot externe gegevens in SQL Server voor een gedetailleerde handleiding.

Verbinding maken met Oracle, Teradata of MongoDB

SQL Server 2019 (15.x) en latere versies kunnen query's uitvoeren op Oracle, Teradata, MongoDB en Cosmos DB via PolyBase ODBC-connectors.

Gegevensbron Guide Requirements
Oracle PolyBase configureren voor toegang tot externe gegevens in Oracle SQL Server 2019 (15.x) en latere versies, Oracle-clientstuurprogramma's
Teradata PolyBase configureren voor toegang tot externe gegevens in Teradata SQL Server 2019 (15.x) en latere versies, Teradata ODBC-stuurprogramma
MongoDB/Cosmos DB PolyBase configureren voor toegang tot externe gegevens in MongoDB SQL Server 2019 (15.x) en latere versies, MongoDB ODBC-stuurprogramma
Elke ODBC-bron PolyBase configureren voor toegang tot externe gegevens met algemene ODBC-typen SQL Server 2019 (15.x) en latere versies (Windows)

(Linux beginnend met SQL Server 2025 (17.x))

Verbinding maken met Azure Blob Storage of ADLS Gen2

SQL-platform Verificatieopties Guide
SQL Server 2022 (16.x) en latere versies SAS-token, toegangssleutel, beheerde identiteit (vanaf SQL Server 2025 (17.x)) PolyBase configureren voor toegang tot externe gegevens in Azure Blob Storage
SQL Server 2019 (15.x) Toegangssleutel (via Hadoop-connector) PolyBase configureren voor toegang tot externe gegevens in Azure Blob Storage
Azure SQL Database SAS-token, Beheerde identiteit, Microsoft Entra pass-through Gegevensvirtualisatie met Azure SQL Database (preview)
Azure SQL Managed Instance (een beheerde database-instantie van Azure) SAS-token, beheerde identiteit Gegevensvirtualisatie met Azure SQL Managed Instance

In SQL Server 2022 (16.x) zijn de URI-voorvoegsels gewijzigd. Wanneer u migreert vanuit SQL Server 2019 (15.x) of eerdere versies:

  • Azure Blob Storage: wijzigen wasb[s]:// in abs://
  • ADLS Gen2: wijzigen abfs[s]:// in adls://

Zie PolyBase configureren voor toegang tot externe gegevens in Azure Blob Storage voor meer informatie.

Verbinding maken met S3-compatibele objectopslag

SQL Server 2022 (16.x) en latere versies ondersteunen S3-compatibele opslag, zoals Amazon S3, MinIO en Ceph.

Zie PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag voor meer informatie.

Gegevens exporteren met CREATE EXTERNAL TABLE AS SELECT (CETAS)

CETAS voert de export uit van queryresultaten naar externe bestanden (Parquet of CSV) in Azure Blob Storage, ADLS Gen2 of S3-compatibele opslag.

SQL-platform Ondersteund Exportformaten Aantekeningen
SQL Server 2022 (16.x) en latere versies. Export naar ADLS Gen2 met CETAS vereist SQL Server 2022 CU5 of een nieuwere versie. Ja Parket, CSV Vereist serverconfiguratie: laat polybase-export toe.
Azure SQL Managed Instance (een beheerde database-instantie van Azure) Ja Parket, CSV Standaard uitgeschakeld
Azure SQL Database No Geen Niet beschikbaar
Een SQL-database in Fabric No Geen Niet beschikbaar
  • SQL Server 2022 en latere versies ondersteunen CETAS en exporteren Parquet- en CSV-bestanden. De serverconfiguratie: polybase export-instelling toestaan is vereist. CETAS-export naar ADLS Gen2 is niet beschikbaar in SQL Server 2022-releases vóór CU5.
  • Azure SQL Managed Instance ondersteunt CETAS en exporteert Parquet- en CSV-bestanden. De standaard Uitgeschakelde richtlijn beschrijft de standaardtoestand.
  • Azure SQL Database ondersteunt CETAS niet.
  • De SQL-database in Fabric ondersteunt CETAS niet.

Zie (CETAS) voor de Transact-SQL-verwijzingCREATE EXTERNAL TABLE AS SELECT.

Voorbeelden van snel starten

Voorbeeld 1: Ad-hoc-query voor een Parquet-bestand (OPENROWSET)

Er is geen externe tabel nodig. Werkt op SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance en SQL Database in Fabric.

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

Voorbeeld 2: Externe tabel via CSV in Azure Blob Storage

Dit voorbeeld werkt op alle SQL-platforms die externe tabellen ondersteunen over CSV-bestanden.

  • Stap 1: Een databasehoofdsleutel (DMK) maken. Deze stap is vereist omdat met de referentie een SAS-tokengeheim wordt opgeslagen. Je kunt deze stap echter overslaan als je Managed Identity of Microsoft Entra-authenticatie gebruikt.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  • Stap 2: Maak een referentie met een SAS-token. Laat de voorafgaande ? weg.

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • Stap 3: Een externe gegevensbron maken.

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • Stap 4: Maak een bestandsindeling voor het CSV-bestand.

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • Stap 5: Maak de externe tabel.

    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
    );
    
  • Stap 6: Voer een query uit op de externe tabel.

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

Voorbeeld 3: Een query uitvoeren op een tabel in een andere SQL Server

Dit voorbeeld werkt in SQL Server 2019 (15.x) en latere versies.

  • Stap 1: Maak een databasehoofdsleutel (vereist omdat de referentie een wachtwoord opslaat).

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<password>';
    
  • Stap 2: Maak een referentie voor het externe SQL Server-exemplaar.

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • Stap 3: Maak de externe gegevensbron.

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • Stap 4: Maak de externe tabel aan (met de driedelige naam in 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'
    );
    
  • Stap 5: Query uitvoeren op servers.

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

Voorbeeld 4: Resultaten exporteren naar Parquet met CETAS

Werkt op SQL Server 2022 (16.x) en latere versies, Azure SQL Managed Instance.

  • Stap 1: CETAS inschakelen (alleen SQL Server).

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • Stap 2: Referentie en gegevensbron maken (hergebruik uit eerdere voorbeelden).

  • Stap 3: Maak een bestandsindeling voor Parquet-export.

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • Stap 4: Queryresultaten exporteren.

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

T-SQL-bouwstenen voor PolyBase

Voordat u een scenario implementeert, moet u inzicht hebben in de T-SQL-kernobjecten die PolyBase gebruikt en hoe ze bij elkaar passen:

Diagram met PolyBase Transact-SQL objecten en hun relaties.

Diagram met PolyBase T-SQL-objecten en hun relaties, van verificatie (databasehoofdsleutel, referenties) via gegevensbronnen en bestandsindelingen tot querymethoden (externe tabel, OPENROWSET, BULK INSERTCETAS).

Zie voor een volledige Transact-SQL-referentie voor alle objecten de PolyBase Transact-SQL naslaginformatie.

Belangrijk

Controleer de toewijzing van het gegevenstype voor uw externe bestandsindeling. Wanneer u een externe bestandsindeling maakt of query's uitvoert op bestanden met behulp van OPENROWSETPolyBase, worden brongegevenstypen (Parquet, CSV, Delta, Oracle, Teradata, MongoDB) automatisch toegewezen aan SQL Server-gegevenstypen. Ongelijksoortige typen kunnen onopgemerkte afkorting, precisieverlies of queryfouten veroorzaken. Een Parquet DECIMAL(38,18) komt bijvoorbeeld overeen met DECIMAL(18,0). Controleer de toewijzingstabellen voordat u externe tabelkolommen of een WITH clausule definieert. Zie Typetoewijzing met PolyBase voor de volledige referentie.

Wanneer heb je het nodig CREATE MASTER KEY?

Er wordt een DMK (Database Master Key) gemaakt met behulp van CREATE MASTER KEY de syntaxis. De DMK versleutelt de geheimen die zijn opgeslagen in database-specifieke inloggegevens. Dit is alleen vereist wanneer de referentie een geheime waarde bevat, dat wil gezegd, wanneer een wachtwoord, token of toegangssleutel wordt opgeslagen.

  • DMK is vereist (authenticatiereferenties bevatten een geheim):

    Verificatietype IDENTITY waarde Heeft geheim DMK
    SAS-token 'SHARED ACCESS SIGNATURE' Ja Verplicht
    S3-toegangssleutel 'S3 ACCESS KEY' Ja Verplicht
    SQL-aanmelding/basisverificatie '<username>' Ja Verplicht
    Toegangssleutel voor opslagaccount '<storage_account_name>' Ja Verplicht
    • Een SAS-tokencredential gebruikt IDENTITY = 'SHARED ACCESS SIGNATURE' en slaat een geheime waarde op, dus het vereist een database-hoofdsleutel.
    • Een S3-toegangssleutelcredential gebruikt IDENTITY = 'S3 ACCESS KEY' en slaat een geheime waarde op, dus het vereist een database-hoofdsleutel.
      • Een SQL-login of een basisauthenticatiecredential gebruikt IDENTITY = '<username>' en slaat een geheime waarde op, dus het vereist een database-hoofdsleutel.
    • Het toegangssleutel-credential van een opslagaccount gebruikt IDENTITY = '<storage_account_name>' en slaat een geheime waarde op, dus het vereist een database-hoofdsleutel.
  • DMK is niet vereist (geen geheim opgeslagen):

    Verificatietype IDENTITY waarde Heeft geheim DMK
    Beheerde identiteit 'Managed Identity' No Niet vereist
    Microsoft Entra ID 'User Identity' of 'Managed Identity' No Niet vereist
    • Een Managed Identity-credential gebruikt IDENTITY = 'Managed Identity' en slaat geen geheim op, dus het vereist geen database-hoofdsleutel.
    • Een Microsoft Entra ID-credential gebruikt IDENTITY = 'User Identity' of IDENTITY = 'Managed Identity' en slaat geen geheim op, dus het vereist geen database-hoofdsleutel.

Aanbeveling

Als je CREATE DATABASE SCOPED CREDENTIAL-statement geen geheim bevat, heb je geen DMK nodig. Managed Identity en Microsoft Entra ID-verificatie delegeren vertrouwen aan het platform. In de database worden geen wachtwoorden of tokens opgeslagen.

Voorbeelden:

In deze voorbeeldquery is de DMK vereist (de inloggegevens slaan een SAS-token op).

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

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

In deze voorbeeldquery is de DMK niet vereist (Beheerde identiteit, geen geheim).

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

In deze voorbeeldquery is de DMK niet vereist (Microsoft Entra pass-through, geen geheim).

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

Externe gegevenstoegang met OPENROWSET en externe tabellen

SQL Server biedt drie verschillende benaderingen voor het uitvoeren van query's op externe gegevens. U kunt de juiste benadering kiezen wanneer u de verschillen in syntaxis, verificatie en architectuur begrijpt.

Methode Syntaxis Verbinding maken met Authentication PolyBase-services Platforms
OLE DB-query's OPENROWSET(provider, connection, query) Een OLE DB-bron via MSOLEDBSQL, SQLOLEDB of andere providers SQL-verificatie, Windows-verificatie, Microsoft Entra ID (MSOLEDBSQL) No SQL Server (alle ondersteunde versies)
Query's op bestanden in SQL Server 2022 (16.x) en SQL Server 2019 (15.x) OPENROWSET(BULK ...) Bestanden op lokale schijf, netwerk of cloud (Azure Blob, ADLS, S3, OneLake) SAS-token, toegangssleutel, Beheerde identiteit, Microsoft Entra-id Ja voor cloud 1; Nee voor lokaal SQL Server 2022 (16.x) en SQL Server 2019 (15.x)
Bestandsqueries in SQL Server 2025 (17.x) en latere versies OPENROWSET(BULK ...) Bestanden op lokale schijf, netwerk of cloud (Azure Blob, ADLS, S3, OneLake) SAS-token, toegangssleutel, Beheerde identiteit, Microsoft Entra-id No SQL Server 2022 (16.x) en latere versies, Azure SQL Database, Azure SQL Managed Instance, SQL Database in Fabric
PolyBase-connectoren CREATE EXTERNAL TABLE met CREATE EXTERNAL DATA SOURCE door gebruik te maken van sqlserver://, oracle://, teradata://, mongodb://, odbc:// Externe SQL Server, Oracle, Teradata, MongoDB, ODBC-bronnen Alleen SQL-verificatie Ja SQL Server 2019 (15.x) en latere versies (Windows); SQL Server 2025 (17.x) en latere versies (Linux)

1 Voor toegang tot cloudbestanden in SQL Server 2022 (16.x) moet de PolyBase-functie worden geïnstalleerd.

  • OLE DB-queries worden gebruikt OPENROWSET(provider, connection, query) om verbinding te maken met elke OLE DB-bron via MSOLEDBSQL, SQLOLEDB of een andere provider op alle ondersteunde versies van SQL Server. Ze ondersteunen SQL-authenticatie, Windows authentication en Microsoft Entra ID met MSOLEDBSQL, en ze vereisen geen installatie van PolyBase-diensten.
  • Bestandsquery's gebruiken OPENROWSET(BULK ...) om bestanden te lezen vanaf een lokale schijf, netwerkshares of cloudopslag, zoals Azure Blob Storage, ADLS, S3 of OneLake, met een SAS-token, toegangssleutel, Managed Identity of Microsoft Entra ID. Ze worden ondersteund voor lokale en netwerkbestanden in SQL Server 2005 en latere versies, voor cloudbestanden in SQL Server 2022 (16.x) en latere versies, en in Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric. Bestandsquery's vereisen geen PolyBase-diensten voor lokale bestanden of voor bestanden in de cloud in SQL Server 2022 (16.x) en latere versies.
  • PolyBase-connectoren gebruiken CREATE EXTERNAL TABLE met CREATE EXTERNAL DATA SOURCE en de sqlserver://, oracle://, teradata://, mongodb://, of odbc:// locatie om verbinding te maken met externe SQL Server, Oracle, Teradata, MongoDB of ODBC-bronnen. Ze vereisen SQL-authenticatie en PolyBase-diensten in SQL Server 2019 (15.x) en latere versies op Windows en SQL Server 2025 (17.x) en latere versies op Linux. Voor meer informatie, zie CREATE EXTERNAL DATA SOURCE (Transact-SQL).

Wanneer moet u elke benadering gebruiken

OLE DB OPENROWSET gebruiken voor:

  • Gebruik OLE DB OPENROWSET voor snelle, eenmalige ad hoc queries zonder persistente objecten aan te maken.
  • Gebruik OLE DB OPENROWSET voor Microsoft Entra ID of Managed Identity-authenticatie via MSOLEDBSQL.
  • Gebruik OLE DB OPENROWSET om afhankelijkheden van PolyBase-diensten te voorkomen.
  • Gebruik OLE DB OPENROWSET om verbinding te maken met elke databron die een OLE DB-provider heeft.

Gebruik File OPENROWSET(BULK) voor:

  • Gebruik het bestand OPENROWSET(BULK ...) voor ad-hoc bestandsverkenning en schema-ontdekking.
  • Gebruik het bestand OPENROWSET(BULK ...) voor snelle transformaties en previews voordat je een tabeldefinitie maakt.
  • Gebruik het bestand OPENROWSET(BULK ...) voor flexibele inline kolomtransformaties zoals casting, filtering en berekende kolommen.
  • Gebruik een bestand OPENROWSET(BULK ...) voor data die niet vaak verandert en geen persistente metadata nodig heeft.

Gebruik PolyBase-connectors met CREATE EXTERNAL TABLE voor:

  • Gebruik PolyBase-connectors met CREATE EXTERNAL TABLE voor permanente, herbruikbare tabeldefinities die door meerdere gebruikers of toepassingen worden geopend.
  • Gebruik PolyBase-connectoren met CREATE EXTERNAL TABLE voor productieworkloads die statistieken en optimalisatie van queryplannen vereisen.
  • Gebruik PolyBase-connectoren CREATE EXTERNAL TABLE voor pushdown-berekeningen naar externe bronnen zoals Oracle en SQL Server.
  • Gebruik PolyBase-connectoren met CREATE EXTERNAL TABLE voor gedeeld beheer en beveiliging; nadat de tabel is gemaakt, hebben gebruikers alleen de machtiging SELECT nodig.
  • Gebruik PolyBase-connectoren wanneer CREATE EXTERNAL TABLE SQL-authenticatie beschikbaar is voor de externe bron.

OPENROWSET (OLE DB) - ad hoc externe queries (geen PolyBase-services vereist)

De OLE DB-vorm van OPENROWSET verbindt met een externe gegevensbron via een OLE DB-provider, voert een passthrough-query uit en retourneert de resultaten als een gegevensset. Het is een eenmalig ad-hoc alternatief voor een gekoppelde server. Er worden geen permanente metagegevens gemaakt. Voor deze syntaxis zijn geen PolyBase-services vereist en worden geen cloudbestanden of externe gegevensbronnen ondersteund.

Deze voorbeeldquery maakt verbinding met een externe SQL Server via OLE DB (niet PolyBase).

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

OPENROWSET(BULK) - bestandgebaseerde queries (PolyBase)

De BULK vorm van OPENROWSET leest gegevens rechtstreeks uit bestanden. In SQL Server 2019 (15.x) en eerdere versies wordt het gelezen uit lokale of UNC-bestandspaden en is een indelingsbestand vereist. In SQL Server 2022 (16.x) en latere versies kunt u lezen uit cloudopslag met behulp van de DATA_SOURCE en FORMAT parameters. Deze benadering is de geïntegreerde PolyBase-versie die wordt gebruikt voor gegevensvirtualisatie.

In de context van PolyBase en gegevensvirtualisatie betekent deze handleiding dat wanneer wordt verwezen naar OPENROWSET, het gaat om de syntaxis OPENROWSET(BULK ...) met een clausule FORMAT voor het uitvoeren van query's op externe bestanden.

Voorbeelden:

Deze voorbeeldquery leest een Parquet-bestand uit Azure Blob Storage (SQL Server 2022 en latere versies).

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

Deze voorbeeldquery leest een Parquet-bestand met een inlinepad (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];

Wanneer gebruikt u OPENROWSET versus externe tabellen

Met beide OPENROWSET(BULK ...) en externe tabellen kunt u query's uitvoeren op externe gegevens met T-SQL, maar ze zijn ontworpen voor verschillende gebruiksvoorbeelden. De volgende tabel bevat een overzicht van de belangrijkste verschillen waarmee u kunt bepalen welke benadering past bij uw scenario.

Vermogen OPENROWSET(BULK ...) Externe tabel
Purpose Ad-hoconderzoek en eenmalige query's Permanente, herbruikbare tabeldefinitie
Metagegevens die zijn opgeslagen in database Nee. Er wordt niets opgeslagen nadat de query is uitgevoerd Ja. De tabeldefinitie, gegevensbron en bestandsindeling worden opgeslagen als databaseobjecten
Schemadefinitie Automatisch afgeleid uit het bestand (Parquet) of opgegeven inline met een WITH clausule Expliciet gedefinieerd in de CREATE EXTERNAL TABLE instructie
toestemmingen Vereist ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS Zodra de tabel is gemaakt, is de standaardmachtiging SELECT voor de tabel voldoende
Berekende kolommen Ja. Voeg expressies en berekende kolommen toe in de SELECT lijst; metagegevensfuncties zoals filename() en filepath() zijn hier alleen beschikbaar. Nee. Vaste kolomlijst; transformaties uitvoeren in een weergave of in de query die de externe tabel leest
statistieken Azure SQL Managed Instance: handmatige statistieken met één kolom via sys.sp_create_openrowset_statistics. Zie handmatige statistieken van OPENROWSET.

SQL Server 2022 (16.x) en latere versies, Azure SQL Database, SQL-database in Fabric: statistieken automatisch maken voor predicaten. Handmatige OPENROWSET statistieken worden niet ondersteund op SQL Server.
Volledige CREATE STATISTICS ondersteuning op alle platforms, plus automatisch maken in SQL Server 2022 (16.x) en nieuwere versies. Zie Handmatige statistieken voor externe tabellen maken.
Pushdown Beperkte ondersteuning. De engine kan filters naar beneden pushen naar de bestandsscan, maar er is geen pushdown naar externe RDBMS-bronnen Ja. Ondersteunt pushdownberekeningen voor RDBMS-connectors (SQL Server, Oracle, Teradata, MongoDB)
Het beste voor Gegevensverkenning, schemadetectie, prototypequery's, eenmalige gegevensbelastingen, flexibele transformaties Productieworkloads, herhaalde query's, gedeelde toegang voor gebruikers, dashboards en rapportage
  • OPENROWSET(BULK ...) is het beste voor ad-hoc verkenning en eenmalige queries, terwijl een externe tabel beter is voor persistente, herbruikbare tabeldefinities.
  • OPENROWSET(BULK ...) slaat metadata niet op in de database nadat de query is uitgevoerd, terwijl een externe tabel de tabeldefinitie, gegevensbron en bestandsformaat als databaseobjecten opslaat.
  • OPENROWSET(BULK ...) leidt het schema automatisch af uit een Parquet-bestand of definieert het schema inline met een WITH clausule, terwijl een externe tabel het schema expliciet in de CREATE EXTERNAL TABLE instructie definieert.
  • OPENROWSET(BULK ...) vereist ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS, terwijl een externe tabel kan worden bevraagd door gebruikers die alleen standaardtoestemming SELECT nodig hebben zodra de tabel bestaat.
  • OPENROWSET(BULK ...) ondersteunt berekende kolommen in de query- en metadatafuncties zoals filename() en filepath(), terwijl een externe tabel een vaste kolomlijst heeft en transformaties vereist in een weergave of in de query die de externe tabel leest.
  • OPENROWSET(BULK ...)heeft beperkte ondersteuning voor statistiek: Azure SQL Managed Instance kan worden gebruikt sys.sp_create_openrowset_statistics voor statistieken met één kolom, maar SQL Server 2022 (16.x) en latere versies, Azure SQL Database en SQL Database in Fabric creëren automatisch statistieken op predicaten. Handmatige OPENROWSET statistieken worden niet ondersteund op SQL Server, Azure SQL Database en SQL Database in Fabric. Een externe tabel ondersteunt volledige CREATE STATISTICS functionaliteit op alle platforms plus automatische statistieken in SQL Server 2022 (16.x) en latere versies, Azure SQL Database en SQL database in Fabric. Zie handmatige statistieken voor OPENROWSET en handmatige statistieken voor externe tabellen maken.
  • OPENROWSET(BULK ...) ondersteunt beperkte pushdown en geen pushdown naar remote RDBMS-bronnen, terwijl een externe tabel pushdown-verwerking voor RDBMS-connectoren ondersteunt.
  • OPENROWSET(BULK ...) Is het beste voor data-exploratie, schema-ontdekking, prototyping, eenmalige ladingen en flexibele transformaties, terwijl een externe tabel het beste is voor productieworkloads, herhaalde queries, gedeelde toegang, dashboards en rapportage.

OPENROWSET gebruiken wanneer u flexibiliteit nodig hebt

Gebruik OPENROWSET dit om een bestand te verkennen, verschillende schema's te testen of berekende kolommen en transformaties toe te voegen zonder permanente objecten te maken. U kunt bijvoorbeeld het bestandspad extraheren als een kolom, gegevenstypen inline casten of filteren op berekende expressies in één query.

Deze voorbeeldquery bevat berekende kolommen en transformaties:

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

Aanbeveling

De filepath() en filename() functies zijn beschikbaar in Azure SQL Database, Azure SQL Managed Instance en SQL Server 2022 (16.x) en latere versies. Hiermee kunt u filteren op delen van het bestandspad (partitie-verwijdering) en de naam van het bronbestand beschikbaar maken als een kolom, wat niet rechtstreeks mogelijk is met externe tabellen.

Externe tabellen gebruiken wanneer u persistentie en governance nodig hebt

Gebruik externe tabellen wanneer meerdere gebruikers of toepassingen herhaaldelijk dezelfde externe gegevens moeten opvragen. U definieert het schema, de gegevensbron en de referenties eenmaal en slaat deze op in de database. Gebruikers hebben alleen SELECT toestemming nodig voor de tabel.

Externe tabellen ondersteunen ook statistieken, die de queryoptimalisatie gebruikt om betere uitvoeringsplannen te maken. U kunt statistieken handmatig maken of de engine deze automatisch laten maken (SQL Server 2022 (16.x) en latere versies).

Met deze voorbeeldquery worden statistieken voor een externe tabel gemaakt voor betere queryplannen.

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

Zie PolyBase-prestatieoverwegingen - Statistieken voor meer informatie over statistieken voor beide benaderingen.

BULK INSERT vs. OPENROWSET(BULK): Welke moet ik gebruiken?

Zowel BULK INSERT als OPENROWSET(BULK ...) importeren gegevens uit bestanden in SQL Server met behulp van dezelfde onderliggende bulk-loading engine. Ze verschillen echter in syntaxis, flexibiliteit en wat u met de resultaten kunt doen. De volgende tabel bevat een overzicht van de belangrijkste verschillen:

Opmerking

De standalone BULK INSERT statement wordt niet ondersteund in de SQL-database in Fabric. Gebruik INSERT ... SELECT met OPENROWSET(BULK ...) voor OneLake om gegevens op te nemen.

Vermogen BULK INSERT OPENROWSET(BULK ...)
Basisdoel Gegevens uit een bestand rechtstreeks in een doeltabel laden Retourneert een rijenset die je in een SELECT- of INSERT ... SELECT-instructie gebruikt
Gebruikspatroon Zelfstandige uitspraak: BULK INSERT <table> FROM '<file>' Moet worden gebruikt in een query: SELECT * FROM OPENROWSET(BULK ...) of INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
Is er een doeltabel nodig? Ja. Schrijft altijd rechtstreeks naar een tabel Nee. U kunt SELECT direct gebruiken zonder ergens in te voegen, of in een tabel of tijdelijke tabel invoegen.
Kolomtransformaties tijdens het laden Beperkte ondersteuning. De gegevens stromen zonder wijziging van bestand naar tabel (toewijzing beheerd door indelingsbestand of kolomvolgorde) Volledige ondersteuning. U kunt expressies, CASTWHERE filters, JOIN andere tabellen en berekende kolommen toevoegen in de omgevingSELECT
Tafeltips De WITH component bevat ondersteuning voor BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, , KEEPNULLS, , en TABLOCKmeer Ondersteunt tabelhints via de INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) syntaxis
Import van één waarde voor groot object (LOB) Niet ondersteund Ja. Ondersteunt SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB om een volledig bestand te importeren als één varbinary(max), varchar(max), of nvarchar(max) waarde
Bestanden formatteren Ja. Ondersteund via (XML en niet-XML) Ja. Ondersteund (XML en niet-XML)
Cloud-bestandstoegang DATA_SOURCEondersteunt Azure Blob Storage in SQL Server 2017 (14.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance. SQL Server 2019 CU11 en latere updates ondersteunen ook ADLS Gen2. S3-compatibele opslag wordt niet ondersteund. DATA_SOURCEondersteunt Azure Blob Storage in SQL Server 2017 (14.x) en latere versies, ADLS Gen2 in SQL Server 2019 CU11 en latere versies, en S3-compatibele opslag in SQL Server 2022 (16.x) en latere versies. Azure SQL Database en Azure SQL Managed Instance ondersteunen Azure Blob Storage en ADLS Gen2. SQL-database in Fabric ondersteunt OneLake en externe opslag via OneLake-snelkoppelingen.
Parquet- of Delta-bestanden Wordt niet ondersteund. Alleen CSV-/gescheiden tekstbestanden Ja. SQL Server 2022 (16.x) en latere versies, Azure SQL Managed Instance en Azure SQL Database ondersteunen FORMAT = 'PARQUET' en FORMAT = 'DELTA'; ondersteuning voor SQL database in Fabric FORMAT = 'PARQUET' maar niet DELTA. Zie OPENROWSET BULK (Transact-SQL)voor meer informatie.
Machtiging vereist ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS, plus INSERT op de doeltabel ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS
Minimale logboekregistratie Ja. Ondersteund onder eenvoudige of bulksgewijs vastgelegde herstelmodellen met TABLOCK Ja. Ondersteund bij gebruik met INSERT ... SELECT en TABLOCK
  • BULK INSERT laadt gegevens uit een bestand rechtstreeks in een doeltabel, terwijl OPENROWSET(BULK ...) een resultatenset retourneert die je in een SELECT- of INSERT ... SELECT-instructie kunt gebruiken.
  • BULK INSERT is een zelfstandige stelling, terwijl OPENROWSET(BULK ...) moet worden gebruikt binnen een query zoals SELECT * FROM OPENROWSET(BULK ...) of INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...).
  • BULK INSERT schrijft altijd direct naar een doeltabel, terwijl OPENROWSET(BULK ...) vanuit een bestand SELECT kan uitvoeren zonder ergens gegevens in te voegen of in een tabel of tijdelijke tabel in te voegen.
  • BULK INSERT Biedt beperkte ondersteuning voor kolomtransformaties omdat data van het bestand naar de tabel stroomt as-is, waarbij mapping wordt geregeld door een bestands- of kolomvolgorde. OPENROWSET(BULK ...) ondersteunt expressies, CAST, WHERE filters, JOINs en berekende kolommen in de omliggende SELECT.
  • BULK INSERT gebruikt een WITH clausule voor BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, , KEEPIDENTITY, KEEPNULLS, TABLOCK, en andere hints. OPENROWSET(BULK ...) ondersteunt tabelhints via INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
  • BULK INSERT ondersteunt geen import van grote objecten met één waarde. OPENROWSET(BULK ...) SINGLE_BLOBondersteunt , SINGLE_CLOB, en SINGLE_NCLOB om een heel bestand respectievelijk als één varbinary(max), varchar(max) of nvarchar(max) waarde te importeren.
  • Beide BULK INSERTOPENROWSET(BULK ...) ondersteunen XML- en niet-XML-formaat bestanden.
  • Voor toegang tot cloudbestanden met BULK INSERT, ondersteunt de DATA_SOURCE parameter Azure Blob Storage in SQL Server 2017 (14.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance. SQL Server 2019 CU11 en latere updates ondersteunen ook ADLS Gen2, maar BULK INSERT geen S3-compatibele opslag. Voor OPENROWSET(BULK ...), ondersteunt DATA_SOURCE Azure Blob Storage in SQL Server 2017 (14.x) en latere versies, ADLS Gen2 in SQL Server 2019 CU11 en latere versies, en S3-compatibele opslag in SQL Server 2022 (16.x) en latere versies. Azure SQL Database en Azure SQL Managed Instance ondersteunen Azure Blob Storage en ADLS Gen2. SQL-database in Fabric ondersteunt OneLake en externe opslag via OneLake-snelkoppelingen.
  • BULK INSERT ondersteunt geen Parquet- of Delta-bestanden en ondersteunt alleen CSV of gescheiden tekst. OPENROWSET(BULK ...) ondersteunt FORMAT = 'PARQUET' en FORMAT = 'DELTA' in SQL Server 2022 (16.x) en latere versies, Azure SQL Database en Azure SQL Managed Instance. SQL-databases in Fabric ondersteunen FORMAT = 'PARQUET' maar niet FORMAT = 'DELTA'. Zie OPENROWSET BULK (Transact-SQL)voor meer informatie.
  • BULK INSERT vereist ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS plus INSERT toestemming op de doel-tabel, terwijl OPENROWSET(BULK ...) vereist ADMINISTER BULK OPERATIONS of ADMINISTER DATABASE BULK OPERATIONS.
  • BULK INSERT ondersteunt minimale logboekregistratie in de eenvoudige of bulkgewijs gelogde herstelmodus met TABLOCK. OPENROWSET(BULK ...) ondersteunt minimale logging wanneer het wordt gebruikt met INSERT ... SELECT en TABLOCK.

Wanneer moet u kiezen BULK INSERT

Gebruik BULK INSERT wanneer u een eenvoudige bestand-naar-tabel laden heeft en geen gegevens hoeft te transformeren, filteren of samenvoegen tijdens het importeren. Er wordt gebruikgemaakt van eenvoudigere syntaxis voor CSV- of andere bestanden met scheidingstekens:

In dit voorbeeld wordt een CSV-bestand vanuit Azure Blob Storage rechtstreeks in een tabel geladen.

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

In dit voorbeeld wordt een lokaal bestand geladen met een formaatbestand voor kolomtoewijzing.

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

Wanneer moet u OPENROWSET(BULK) kiezen

Gebruik OPENROWSET(BULK ...) deze optie wanneer u een of meer van de volgende voorwaarden nodig hebt:

  • Gebruik OPENROWSET(BULK ...) deze om bestandsgegevens op te vragen of te bekijken zonder eerst een tabel aan te maken.
  • Gebruik OPENROWSET(BULK ...) om data te transformeren, filteren of joinen tijdens import.
  • Ik gebruik OPENROWSET(BULK ...) om Parquet- of Delta-bestanden te laden omdat BULK INSERT ze deze formaten niet ondersteunen.
  • Gebruik OPENROWSET(BULK ...) om een heel bestand als één enkele LOB-waarde te importeren met SINGLE_BLOB, SINGLE_CLOB, of SINGLE_NCLOB.

In dit voorbeeldquery wordt een CSV-bestand uit Azure Blob Storage weergegeven zonder de gegevens ergens in te voegen.

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

Met deze voorbeeldquery worden gegevens ingevoegd met transformatie en filteren.

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;

Met deze voorbeeldquery wordt een Parquet-bestand geladen (niet mogelijk met BULK INSERT).

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

Met deze voorbeeldquery wordt een heel XML-bestand geïmporteerd als één varbinary(max) -waarde.

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

Aanbeveling

Een benadering is om te beginnen met OPENROWSET(BULK ...) in een SELECT om bestandsgegevens te verkennen en te valideren, en vervolgens over te schakelen naar BULK INSERT voor de definitieve productielading als u geen transformaties nodig hebt. Als u parquet- of Delta-ondersteuning of inlinefiltering nodig hebt, moet u bij OPENROWSET blijven.

Zie de volgende gerelateerde handleidingen voor meer informatie:

Nuttige metagegevensfuncties

Wanneer je externe bestanden opvraagt met OPENROWSET of externe tabellen, gebruik dan de ingebouwde functies en procedures om bestandsmetadata te inspecteren, schema's te ontdekken en partitiebewuste queries te implementeren.

filepath() en bestandsnaam()

De filepath() en filename() functies retourneren delen van de bestandsnaam of het bestandspad voor elke rij in de resultatenset. Ze zijn vooral handig voor:

  • Partitie-verwijdering: Filter op mapsegmenten (bijvoorbeeld jaar-/maand-/dagpartities) zodat de engine alleen de overeenkomende bestanden leest in plaats van alles te scannen.

  • Metagegevens van bron beschikbaar maken: neem de oorspronkelijke bestandsnaam of het oorspronkelijke pad op als een kolom in de queryresultaten. Dit is handig voor controle of foutopsporing.

Function Retouren Voorbeeld
filename() De bestandsnaam (inclusief extensie) van het bronbestand voor elke rij sales_2025_01.parquet
filepath(N) Het Nde mapsegment van het jokerteken () in het * pad, waarbij BULK begint bij 1 Bij het pad sales/2025/01/*.parquet, geeft filepath(1)2025 terug en geeft filepath(2)01 terug

Van toepassing op: Azure SQL Database, Azure SQL Managed Instance, SQL Server 2022 (16.x) en latere versies, SQL Database in Fabric.

In deze voorbeeldquery wordt filepath() gebruikgemaakt van partitie-verwijdering en filename() om bronbestanden te identificeren. Het leest alleen bestanden onder de /2025/ map en leest alleen bestanden onder de /06/ submap.

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

Aanbeveling

Plaats filepath() filters in de WHERE component in plaats van in een subquery of CTE. Wanneer het filter zich in de WHERE component bevindt, kan de engine partitie-verwijdering uitvoeren op het niveau van de bestandsscan, wat de I/O aanzienlijk vermindert.

sp_describe_first_result_set - het ontdekken van OPENROWSET-kolomtypen

Wanneer u OPENROWSET met Parquet-bestanden gebruikt, worden kolomgegevenstypen automatisch afgeleid (schema-afleiding). De afgeleide typen kunnen groter zijn dan nodig is. Tekenkolommen worden bijvoorbeeld vaak afgeleid als varchar(8000), omdat Parquet-metagegevens geen maximale lengte bevatten. Deze keuze kan de prestaties verminderen en meer geheugen verbruiken.

Gebruik sp_describe_first_result_set om het afgeleide schema te inspecteren voordat u de query afrondt. Nadat u de afgeleide typen hebt bekeken, specificeert u smallere typen in een WITH clausule om de prestaties te verbeteren.

  • Stap 1: Inspecteer het uitgestelde schema.

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

    De uitvoer toont de naam van elke kolom, afgeleid gegevenstype, maximale lengte, precisie en schaal. Als je varchar(8000) ziet waar een varchar(100) voldoende is, overschrijf die dan.

  • Stap 2: Gebruik expliciete typen voor betere prestaties.

    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;
    

Schemadeductie werkt alleen met Parquet-bestanden. Geef voor CSV-bestanden altijd kolomdefinities op in een WITH component (voor OPENROWSET) of in de CREATE EXTERNAL TABLE instructie. sp_describe_first_result_setis een algemene SQL Server, Azure SQL Database, Azure SQL Managed Instance en SQL database in Fabric-procedure, maar het is vooral nuttig voor OPENROWSET queries. Voor meer informatie, zie sp_describe_first_result_set.

Prestaties, probleemoplossing en aanbevolen procedures

Nadat u gegevensvirtualisatie hebt geïmplementeerd, gebruikt u deze handleidingen om prestaties te optimaliseren, problemen te diagnosticeren en de gereedheid van de productie te garanderen:

Oppervlak Artikel Details
PolyBase-prestaties Prestatieoverwegingen in PolyBase voor SQL Server- Statistieken, pushdown, parallellisme en geheugenbeheer
Pushdownberekening Pushdown-berekeningen in PolyBase Hiermee geeft u op welke bewerkingen naar de externe bron worden gepusht
Hoe te herkennen of er een pushdown heeft plaatsgevonden Hoe kunt u zien of er een externe pushdown is opgetreden Queryplannen en DMV's
Troubleshooting PolyBase- bewaken en problemen oplossen Veelvoorkomende fouten en oplossingen
Kerberos-connectiviteit Problemen met PolyBase Kerberos-connectiviteit oplossen
Veelgestelde vragen Veelgestelde vragen over PolyBase
Fouten en oplossingen PolyBase-fouten en mogelijke oplossingen