Verbinden, Abfragen und Exportieren von Daten mit PolyBase

Gilt für: SQL Server 2016 (13.x) und spätere Versionen Azure SQL-DatenbankAzure SQL Managed InstanceSQL database in Microsoft Fabric

Mit der Datenvirtualisierung können Sie Transact-SQL -Abfragen (T-SQL) über externe Daten ausführen, ohne sie in Ihre Datenbank zu laden. Sie definieren eine externe Datenquelle, ein optionales Dateiformat und eine externe Tabelle und fragen dann die externe Tabelle wie SELECT jede andere Tabelle ab.

Dieser Leitfaden hilft Ihnen bei:

  • Verstehen Sie, welche PolyBase-Features Ihre SQL-Plattform und -Version unterstützen.
  • Wählen Sie zwischen OPENROWSET, externen Tabellen und BULK INSERT zum Abfragen oder Aufnehmen von Daten aus.
  • Folgen Sie schrittweisen Links für allgemeine Szenarien.
  • Überprüfen Sie die Leistung, die Fehlerbehebung und die bewährten Verfahren für Produktions-Workloads.

Plattformunterstützung

Gängige Anwendungsfälle

In der folgenden Tabelle werden mögliche Nutzungsszenarien beschrieben.

Szenario Verwendung
Ad-hoc-Dateisuche OPENROWSET(BULK ...)
Wiederverwendbare Dateiabfragen für BI oder Reporting Externe Tabellen über Dateien
Datenbankübergreifende Abfrage (SQL Server, Oracle, Teradata, MongoDB, ODBC) PolyBase-Connectors mit externen Tabellen
Exportieren von Abfrageergebnissen in Dateien CREATE EXTERNAL TABLE AS SELECT (CETAS)
Sammelerfassung in Tabellen BULK INSERT oder OPENROWSET(BULK ...) mit INSERT ... SELECT
  • Für die Ad-hoc-Dateiuntersuchung verwenden Sie OPENROWSET(BULK ...), um Dateien zu untersuchen, ohne eine wiederverwendbare Tabelle zu erstellen.
  • Für wiederverwendbare Dateiabfragen in BI oder Berichtsszenarien verwenden Sie externe Tabellen über Dateien, um ein Schema zu speichern und Ergebnisse zwischen Abfragen zu teilen.
  • Für datenbankübergreifende Abfragen verwenden Sie PolyBase-Connectors mit externen Tabellen, um auf SQL Server, Oracle, Teradata, MongoDB oder ODBC-Quellen zuzugreifen.
  • Zum Exportieren von Abfrageergebnissen in Dateien verwenden Sie CREATE EXTERNAL TABLE AS SELECT (CETAS), um Ausgaben im Parquet- oder CSV-Format außerhalb der Datenbank zu speichern.
  • Für den Massenimport in Tabellen verwenden Sie OPENROWSET(BULK ...) oder BULK INSERT mit INSERT ... SELECT, um Dateidaten in Datenbanktabellen zu laden.

Welche Features stehen wo zur Verfügung?

Die folgende Tabelle zeigt, welche Kernfunktionen von PolyBase und Datenvirtualisierung auf jeder SQL-Plattform ab SQL Server 2019 verfügbar sind. Für die Funktionsverfügbarkeit in SQL Server 2016 und SQL Server 2017 unter Windows siehe PolyBase-Funktionen und -Einschränkungen. Verwenden Sie diese Tabelle, um zu bestimmen, was Sie auf Ihrer Plattform tun können, bevor Sie die detaillierten Leitfäden verwenden.

Funktion SQL Server 2019 SQL Server 2022 SQL Server 2025 Azure SQL-Datenbank Verwaltete Azure SQL-Instanz SQL-Datenbank 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/durch Trennzeichen getrennte Dateien Ja 2 Ja Ja Ja Ja Ja
Parquet-Dateien No Ja Ja Ja Ja Ja
Delta Lake-Tabellen No Ja Ja No No No
Herstellen einer Verbindung mit einem anderen SQL Server Ja Ja Ja No No No
Herstellen einer Verbindung mit azure SQL-Datenbank oder azure SQL Managed Instance Ja 3 Ja 3 Ja 3 No No No
Verbinden mit Oracle / Teradata / MongoDB Ja Ja Ja No No No
Herstellen einer Verbindung mit Azure Blob Storage Ja Ja Ja Ja Ja No
Herstellen einer Verbindung mit ADLS Gen2 Ja 5 Ja Ja Ja Ja No
Herstellen einer Verbindung mit S3-kompatiblem Speicher No Ja Ja No No No
Herstellen einer Verbindung mit OneLake (Fabric) No No No No No Ja
Pushdownberechnung Ja Ja Ja No No No
Verwaltete Identitätsauthentifizierung No No Ja 4 Ja Ja No

1 SQL Server 2019 (15.x) unterstützt OPENROWSET(BULK...) lokale und Netzwerkdateipfade. In SQL Server 2022 (16.x) und höheren Versionen OPENROWSET(BULK...) unterstützt auch das Lesen aus dem Cloudspeicher mit FORMAT = 'PARQUET', FORMAT = DELTAund FORMAT = 'CSV'.

2 CSV-Unterstützung in SQL Server 2019 (15.x) erforderte Hadoop. In SQL Server 2022 (16.x) und höheren Versionen wird CSV nativ ohne Hadoop unterstützt.

3 Verwendet den SQL Server-Connector (sqlserver://). Die datenbankbezogene Anmeldeinformationen zielen auf den SQL-Endpunkt ab. Verwenden Sie dieselben Schritte wie beim Verbinden mit einer anderen SQL Server-Instanz.

4 Die Managed Identity-Authentifizierung wird für die Verbindung mit Azure Blob Storage (ABS) und ADLS Gen2 unterstützt. Sie erfordert Azure Arc-fähige SQL Server oder SQL Server auf einer Azure-VM für lokale SQL Server. Sie ist nativ in Azure SQL-Datenbank und azure SQL Managed Instance verfügbar.

5 SQL Server 2019 CU11 und spätere Versionen unterstützen Azure Data Lake Storage Gen2 mit dem abfs Präfix oderabfss. In SQL Server 2022 und neueren Versionen verwenden Sie das adls Präfix.

  • Externe Tabellen werden in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric unterstützt.
  • OPENROWSET (BULK)wird in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric unterstützt. SQL Server 2019 unterstützt lokale und Netzwerk-Dateipfade, während SQL Server 2022 und spätere Versionen auch das Lesen von Cloud-Speicher mit FORMAT = 'PARQUET', FORMAT = DELTA, und FORMAT = 'CSV'unterstützen.
  • Der CETAS-Export wird in SQL Server 2019, Azure SQL-Datenbank oder SQL-Datenbank in Microsoft Fabric nicht unterstützt. Der CETAS-Export wird in SQL Server 2022, SQL Server 2025 und Azure SQL Managed Instance unterstützt.
  • CSV- und getrennte Dateien werden in SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric unterstützt. SQL Server 2019 benötigt Hadoop für CSV-Unterstützung, während SQL Server 2022 und spätere Versionen CSV nativ ohne Hadoop unterstützen.
  • Parquet-Dateien werden in SQL Server 2019 nicht unterstützt. Parquet-Dateien werden in SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric unterstützt.
  • Delta Lake-Tabellen werden in SQL Server 2019, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Microsoft Fabric nicht unterstützt. Delta Lake-Tabellen werden in SQL Server 2022 und SQL Server 2025 unterstützt.
  • Die Verbindung zu einer anderen SQL Server-Instanz wird in SQL Server 2019, SQL Server 2022 und SQL Server 2025 unterstützt. Die Verbindung zu einer anderen SQL Server-Instanz wird nicht von Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Microsoft Fabric unterstützt.
  • Die Verbindung zu Azure SQL-Datenbank oder Azure SQL Managed Instance wird von SQL Server 2019, SQL Server 2022 und SQL Server 2025 über den SQL Server Connector unterstützt. Die datenbankbezogene Zugangsberechtigung richtet sich an den Endpunkt der Azure SQL-Datenbank oder der Azure SQL Managed Instance, und die Konfigurationsschritte entsprechen denen für die Verbindung zu einer anderen SQL Server-Instanz. Diese Verbindungen werden nicht von Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Microsoft Fabric unterstützt.
  • Die Verbindung zu Oracle, Teradata oder MongoDB wird von SQL Server 2019, SQL Server 2022 und SQL Server 2025 unterstützt. Diese Verbindungen werden nicht von Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Microsoft Fabric unterstützt.
  • Die Verbindung zu Azure Blob Storage wird von SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank und Azure SQL Managed Instance unterstützt. Die Verbindung zu Azure Blob Storage wird in Microsoft Fabric nicht von der SQL-Datenbank unterstützt.
  • Die Verbindung mit ADLS Gen2 wird in SQL Server 2019-Versionen vor CU11 oder aus der SQL-Datenbank in Microsoft Fabric nicht unterstützt. Die Verbindung zu ADLS Gen2 wird ab SQL Server 2019 CU11 sowie in SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank und Azure SQL Managed Instance unterstützt.
  • Die Verbindung mit S3-kompatiblen Speicher wird nicht von SQL Server 2019, Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL Database in Microsoft Fabric unterstützt. Die Verbindung zu S3-kompatiblen Speichersystemen wird von SQL Server 2022 und SQL Server 2025 unterstützt.
  • Die Verbindung zu OneLake wird von einer SQL-Datenbank in Microsoft Fabric unterstützt. Die Verbindung zu OneLake wird nicht von SQL Server 2019, SQL Server 2022, SQL Server 2025, Azure SQL-Datenbank oder Azure SQL Managed Instance unterstützt.
  • Pushdown-Berechnung wird in SQL Server 2019, SQL Server 2022 und SQL Server 2025 unterstützt. Pushdownberechnung wird in Azure SQL-Datenbank, Azure SQL Managed Instance oder SQL-Datenbank in Microsoft Fabric nicht unterstützt.
  • Managed Identity Authentication wird in SQL Server 2019 oder SQL Server 2022 nicht unterstützt. Managed Identity Authentication wird in SQL Server 2025 für Verbindungen zu Azure Blob Storage und ADLS Gen2 unterstützt und erfordert Azure Arc-fähigen SQL Server oder SQL Server auf einer Azure-virtuellen Maschine. Managed Identity Authentication wird ebenfalls in Azure SQL-Datenbank und Azure SQL Managed Instance unterstützt, aber nicht in SQL-Datenbanken im Microsoft Fabric.

Hinweis

Ab SQL Server 2025 (17.x) ist das Abfragen von Datendateien (CSV, Parquet und Delta) auf Azure Blob Storage, ADLS Gen2 oder S3-kompatiblem Speicher eine native Engine-Funktion, ohne die PolyBase-Dienste installieren oder ausführen zu müssen. RDBMS-Connectors (SQL Server, Oracle, Teradata, MongoDB, ODBC) erfordern weiterhin die Installation und Ausführung von PolyBase-Diensten. SQL Server 2025 (17.x) fügt auch Linux-Unterstützung für diese Connectors hinzu, die zuvor nur unter Windows verfügbar waren.

Abfragen externer Daten

Bevor Sie ein bestimmtes Szenario auswählen, verstehen Sie die drei Möglichkeiten zum Abfragen externer Daten:

Vorgehensweise Syntax Verwenden Sie, wenn Authentifizierung PolyBase-Installation erforderlich
OLE DB-Ad-hoc-Abfragen OPENROWSET(provider, connection, query) Sie möchten eine schnelle einmalige Abfrage ohne persistente Objekte oder die Microsoft Entra ID-Authentifizierung benötigen. SQL-Authentifizierung, Windows-Authentifizierung, Microsoft Entra ID (MSOLEDBSQL) No
Ad-hoc-Abfragen auf Dateien OPENROWSET(BULK ...) Sie möchten Dateidaten schnell untersuchen oder Schemas testen, bevor Sie eine Tabelle erstellen. SAS-Token, Zugriffsschlüssel, verwaltete Identität, Microsoft Entra-ID SQL Server 2022: Ja 1

SQL Server 2025 und neuere Versionen: Nein

Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric: Integriert
Persistente Datenverbindungen CREATE EXTERNAL TABLE mit sqlserver://, oracle://, teradata://, usw. Sie benötigen wiederholten Zugriff, Governance, Statistiken und Pushdown-Berechnungen für die Produktion. Nur SQL-Authentifizierung Ja

1 Für den Cloud-Dateizugriff in SQL Server 2022 (16.x) müssen Sie die PolyBase-Funktion installieren, aber die Azure Blob Storage-, ADLS-Gen2- und S3-kompatiblen Speicheranschlüsse sind nicht auf PolyBase-Dienste angewiesen. SQL Server 2025 (17.x) und spätere Versionen bieten native Unterstützung für CSV, Parquet und Delta, ohne PolyBase-Dienste zu installieren oder auszuführen.

  • OLE-Datenbank-Ad-hoc-Abfragen dienen OPENROWSET(provider, connection, query) für einen schnellen einmaligen Zugriff auf eine entfernte Datenquelle, ohne persistente Objekte zu erstellen. Sie können SQL-Authentifizierung, Windows-Authentifizierung oder Microsoft Entra ID mit MSOLEDBSQL verwenden. In diesem Szenario ist keine PolyBase-Installation erforderlich.
  • Ad-hoc-Abfragen auf Dateien dienen OPENROWSET(BULK ...) dazu, Dateidaten schnell zu erkunden oder ein Schema vor der Erstellung einer Tabelle zu testen. Sie können SAS-Token, Zugangsschlüssel, Managed Identity oder Microsoft Entra ID verwenden. SQL Server 2022 erfordert die Installation der PolyBase-Funktion für Cloud-Dateien, aber keine PolyBase-Dienste. SQL Server 2025 und neuere Versionen benötigen kein PolyBase für Cloud-Dateien. File-Ad-hoc-Abfragen sind in Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric integriert.
  • Persistente Datenkonnektoren verwenden CREATE EXTERNAL TABLE mit sqlserver://, oracle://, teradata://, und ähnlichen Standorten für wiederkehrenden Zugriff, Governance, Statistiken und Pushdown-Berechnung in Produktions-Workloads. Sie erfordern SQL-Authentifizierung und PolyBase-Dienste.

Leitfaden zur Entscheidungsfindung

Szenario Empfehlung
Du brauchst eine Microsoft Entra ID-Authentifizierung für Remote SQL oder möchtest PolyBase-Dienste vermeiden. Verwendung OPENROWSET(MSOLEDBSQL, ...) (ad hoc, keine persistenten Objekte).
Du brauchst persistente Tabellen, Statistiken oder Pushdown-Berechnungen zu entfernten Datenbanken. Verwendung CREATE EXTERNAL TABLE mit PolyBase-Verbindern (sqlserver://, oracle://, teradata://, mongodb://, odbc://). OPENROWSET Unterstützt keine Steckverbinder.
Du erkundest eine neue Datei oder testest ein Schema. Verwendung OPENROWSET(BULK ...) (schnelle Iteration, keine persistenten Objekte).
Du lädst Dateidaten unter Anwendung von Transformationen in eine Tabelle. Verwende INSERT ... SELECT von OPENROWSET(BULK ...).
Man benötigt Governance oder gemeinsamen Zugriff für viele Nutzer oder Anwendungen. Verwenden Sie CREATE EXTERNAL TABLE, damit Berechtigungen und Metadaten zentralisiert sind.
Du arbeitest in einer SQL-Datenbank in Fabric. Verwenden Sie OPENROWSET(BULK ...) für Ad-hoc-Abfragen in OneLake oder externe Tabellen für den wiederverwendbaren Zugriff; für externen Speicher verwenden Sie OneLake-Shortcuts.
  • Wenn Sie eine Microsoft Entra ID-Authentifizierung für Remote SQL benötigen oder PolyBase-Dienste vermeiden möchten, nutzen OPENROWSET(MSOLEDBSQL, ...) Sie Ad-hoc-Remote-Abfragen ohne persistente Objekte.
  • Wenn Sie persistente Tabellen, Statistiken oder Pushdownberechnungen für Remote-Datenbanken benötigen, verwenden Sie CREATE EXTERNAL TABLE mit PolyBase-Connectors wie sqlserver://, oracle://, teradata://, mongodb:// und odbc://. OPENROWSET unterstützt diese Konnektoren nicht.
  • Wenn du eine neue Datei erkundest oder ein Schema testest, nutze OPENROWSET(BULK ...) es für schnelle Iteration und keine persistenten Objekte.
  • Wenn du Dateidaten in eine Tabelle mit Transformationen einträgst, verwende INSERT ... SELECT aus OPENROWSET(BULK ...).
  • Wenn Sie Governance oder gemeinsamen Zugriff für viele Benutzer oder Anwendungen benötigen, verwenden Sie CREATE EXTERNAL TABLE, sodass Berechtigungen und Metadaten zentralisiert sind.
  • Wenn du in SQL-Datenbanken im Fabric arbeitest, nutze OPENROWSET(BULK ...) Ad-hoc-OneLake-Abfragen oder externe Tabellen für wiederverwendbaren Zugriff und OneLake-Verknüpfungen für externen Speicher.

Auswählen Ihres Szenarios

Nachdem Sie nun die drei Ansätze verstanden haben, verwenden Sie einen der folgenden Leitfäden, um Ihren spezifischen Anwendungsfall zu implementieren.

Abfragedateien (Parkett, CSV oder Delta)

Wenn Sich Ihre Daten in Parkett-, CSV- oder Delta-Dateien auf Azure Blob Storage, ADLS Gen2, S3-kompatiblem Speicher oder OneLake befinden, folgen Sie einem der folgenden Anleitungen:

Szenario Empfohlene Anleitung Plattformen
Schnelle Ad-hoc-Abfrage für eine Parquet- oder CSV-Datei Verwenden Sie OPENROWSET. Keine externe Tabelle erforderlich SQL Server 2022 (16.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Fabric
Wiederholte Abfragen von Parkettdateien mit einem persistenten Schema Erstellen einer externen Tabelle über Parquet SQL Server 2022 (16.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Fabric
Abfragen von CSV-Dateien mit einer externen Tabelle Erstellen einer externen Tabelle mit einem Dateiformat für durch Trennzeichen getrennten Text SQL Server 2019 (15.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Fabric
Abfragen von Delta Lake-Tabellen Erstellen einer externen Tabelle mit FILE_FORMAT = DeltaLakeFileFormat SQL Server 2022 (16.x) und höhere Versionen
Exportieren Sie Abfrageergebnisse in Parquet- oder CSV-Dateien (CETAS) CREATE EXTERNAL TABLE AS SELECT verwenden SQL Server 2022 (16.x) und höhere Versionen, Azure SQL Managed Instance
  • Für eine schnelle Ad-hoc-Abfrage einer Parquet- oder CSV-Datei verwenden Sie OPENROWSET. Diese Methode benötigt keine externe Tabelle. SQL Server 2022 (16.x) und spätere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric unterstützen dieses Muster.
  • Für wiederholte Abfragen auf Parquet-Dateien mit einem persistenten Schema verwenden Sie eine externe Tabelle über Parquet. SQL Server 2022 (16.x) und spätere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric unterstützen dieses Muster.
  • Für eine Abfrage auf CSV-Dateien verwenden Sie eine externe Tabelle mit einem Dateiformat für getrennten Text. SQL Server 2019 (15.x) und spätere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric unterstützen dieses Muster.
  • Für eine Abfrage auf Delta-Lake-Tabellen verwenden Sie eine externe Tabelle mit FILE_FORMAT = DeltaLakeFileFormat. SQL Server 2022 (16.x) und spätere Versionen unterstützen dieses Muster.
  • Um Abfrageergebnisse in Parquet- oder CSV-Dateien zu exportieren, verwenden Sie CREATE EXTERNAL TABLE AS SELECT. SQL Server 2022 (16.x) und spätere Versionen sowie Azure SQL Managed Instance unterstützen dieses Muster.

Sie können auch eine der folgenden schrittweisen Lernprogramme befolgen:

Tutorial Beschreibung
Erste Schritte mit PolyBase in SQL Server 2022 Deckt OPENROWSET mit Parquet und CSV, externen Tabellen und Ordnernavigation ab.
Virtualisieren der Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase Lernprogramm für SQL Server 2022 (16.x) und höhere Versionen.
Virtualisieren der CSV-Datei mit PolyBase Lernprogramm für SQL Server 2022 (16.x) und höhere Versionen.
Virtualisieren der Delta-Tabelle mit PolyBase Lernprogramm für SQL Server 2022 (16.x) und höhere Versionen.
Datenvirtualisierung mit Azure SQL-Datenbank (Vorschau) Azure SQL-Datenbankhandbuch für Parkett und CSV.
Datenvirtualisierung mit Azure SQL Managed Instance Leitfaden für Azure SQL Managed Instance für Parquet, CSV und CETAS.
Datenvirtualisierung in SQL-Datenbank in Fabric SQL-Datenbank im Fabric-Handbuch für OneLake-Dateien.

Herstellen einer Verbindung mit einer anderen SQL Server-Instanz, Azure SQL-Datenbank oder SQL Managed Instance

In SQL Server 2019 (15.x) und höheren Versionen kann PolyBase Tabellen in einer anderen SQL Server-Instanz, Azure SQL-Datenbank oder azure SQL Managed Instance abfragen, ohne verknüpfte Server zu verwenden.

Von Bedeutung

Der sqlserver:// Connector wird in der SQL-Datenbank in Fabric nicht unterstützt. PolyBase RDBMS-Connectors verwenden die SQL-Authentifizierung über CREATE DATABASE SCOPED CREDENTIAL und unterstützen keine Authentifizierung über Microsoft Entra ID, verwaltete Identitäten oder Dienstprinzipale. Da die SQL-Datenbank in Fabric die Microsoft Entra-Authentifizierung erfordert, können Sie über PolyBase keine Verbindung zur Datenbank herstellen.

Schritt Was zu tun ist
1. Installieren von PolyBase Installieren von PolyBase unter Windows oder Installieren von PolyBase unter Linux
2. Erstellen von Anmeldeinformationen CREATE DATABASE SCOPED CREDENTIAL mit der Zielanmeldung
3. Erstellen einer externen Datenquelle CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>')
4. Erstellen einer externen Tabelle CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')
5. Abfrage SELECT * FROM <external_table>
    1. Installiere PolyBase unter Windows oder Linux, indem du PolyBase unter Windows installierst oder PolyBase unter Linux installierst, bevor du Zugriff auf externe SQL-Daten konfigurierst.
    1. Erstellen Sie eine datenbankbezogene Anmeldeinformation für die Zielanmeldung mithilfe von CREATE DATABASE SCOPED CREDENTIAL, damit sich die Engine beim Remoteserver authentifizieren kann.
    1. Erstellen Sie eine externe Datenquelle für den entfernten SQL Server mit CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
    1. Erstellen Sie eine externe Tabelle, wobei CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>') die Remotetabelle darstellt.
    1. Fragen Sie die externe Tabelle mit SELECT * FROM <external_table> ab.

Tipp

Der SQL Server-Connector (sqlserver://) funktioniert auch für Azure SQL-Datenbank und azure SQL Managed Instance. Verwenden Sie dieselben Schritte, und setzen Sie LOCATION auf den Azure SQL-Datenbank- oder Azure SQL Managed Instance-Endpunkt (zum Beispiel sqlserver://myserver.database.windows.net).

Eine ausführliche Anleitung finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in SQL Server.

Herstellen einer Verbindung mit Oracle, Teradata oder MongoDB

SQL Server 2019 (15.x) und höhere Versionen können Oracle, Teradata, MongoDB und Cosmos DB über PolyBase ODBC-Connectors abfragen.

Datenquelle Guide Anforderungen
Orakel Konfigurieren von PolyBase für den Zugriff auf externe Daten in Oracle SQL Server 2019 (15.x) und höhere Versionen, Oracle-Clienttreiber
Teradata Konfigurieren von PolyBase für den Zugriff auf externe Daten in Teradata SQL Server 2019 (15.x) und höhere Versionen, Teradata ODBC-Treiber
MongoDB / Cosmos DB Konfigurieren von PolyBase für den Zugriff auf externe Daten in MongoDB SQL Server 2019 (15.x) und höhere Versionen, MongoDB ODBC-Treiber
Jede ODBC-Quelle Konfigurieren von PolyBase für den Zugriff auf externe Daten mit generischen ODBC-Typen SQL Server 2019 (15.x) und höhere Versionen (Windows)

(Linux ab SQL Server 2025 (17.x))

Herstellen einer Verbindung mit Azure Blob Storage oder ADLS Gen2

SQL-Plattform Authentifizierungsoptionen Guide
SQL Server 2022 (16.x) und höhere Versionen SAS-Token, Zugriffsschlüssel, verwaltete Identität (beginnend mit SQL Server 2025 (17.x)) Konfigurieren von PolyBase für den Zugriff auf externe Daten in Azure Blob Storage
SQL Server 2019 (15.x) Zugriffsschlüssel (über Hadoop-Konnektor) Konfigurieren von PolyBase für den Zugriff auf externe Daten in Azure Blob Storage
Azure SQL-Datenbank SAS-Token, Verwaltete Identität, Microsoft Entra Pass-Through Datenvirtualisierung mit Azure SQL-Datenbank (Vorschau)
Verwaltete Azure SQL-Instanz SAS-Token, verwaltete Identität Datenvirtualisierung mit Azure SQL Managed Instance

In SQL Server 2022 (16.x) wurden die URI-Präfixe geändert. Beim Migrieren von SQL Server 2019 (15.x) oder früheren Versionen:

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

Weitere Informationen finden Sie unter Configure PolyBase to access external data in Azure Blob Storage.

Herstellen einer Verbindung mit S3-kompatiblem Objektspeicher

SQL Server 2022 (16.x) und höhere Versionen unterstützen S3-kompatiblen Speicher, z. B. Amazon S3, MinIO und Ceph.

Weitere Information erhalten Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten im S3-kompatiblen Objektspeicher.

Exportieren von Daten mit CREATE EXTERNAL TABLE AS SELECT (CETAS)

CETAS exportiert Abfrageergebnisse in externe Dateien (Parquet oder CSV) in Azure Blob Storage, ADLS Gen2 oder S3-kompatible Speicher.

SQL-Plattform Unterstützt Exportformate Hinweise
SQL Server 2022 (16.x) und spätere Versionen. Der Export in ADLS Gen2 mit CETAS erfordert eine SQL Server 2022 CU5 oder eine neuere Version. Ja Parquet, CSV Erfordert Serverkonfiguration: Polybase-Export erlauben.
Verwaltete Azure SQL-Instanz Ja Parquet, CSV Standardmäßig deaktiviert
Azure SQL-Datenbank No Nichts Nicht verfügbar
SQL-Datenbank in Fabric No Nichts Nicht verfügbar
  • SQL Server 2022 und spätere Versionen unterstützen CETAS sowie den Export von Parquet- und CSV-Dateien. Die Server-Konfiguration: Polybase-Export erlauben ist erforderlich. Der CETAS-Export zu ADLS Gen2 ist in den SQL Server 2022-Versionen vor CU5 nicht verfügbar.
  • Azure SQL Managed Instance unterstützt CETAS und exportiert Parquet- und CSV-Dateien. Die Anleitung Standardmäßig deaktiviert beschreibt den Standardstatus.
  • Azure SQL-Datenbank unterstützt CETAS nicht.
  • Die SQL-Datenbank in Fabric unterstützt CETAS nicht.

Informationen zur Transact-SQL Referenz finden Sie unter (CETAS).For the Transact-SQL reference, see CREATE EXTERNAL TABLE AS SELECT (CETAS).

Schnellstartbeispiele

Beispiel 1: Ad-hoc-Abfrage für eine Parquet-Datei (OPENROWSET)

Es ist keine externe Tabelle erforderlich. Funktioniert unter SQL Server 2022 (16.x) und höheren Versionen, Azure SQL-Datenbank, azure SQL Managed Instance und SQL-Datenbank in Fabric.

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

Beispiel 2: Externe Tabelle über CSV im Azure Blob Storage

Dieses Beispiel funktioniert auf allen SQL-Plattformen, die externe Tabellen über CSV-Dateien unterstützen.

  • Schritt 1: Erstellen eines Datenbankmasterschlüssels (DMK). Dieser Schritt ist erforderlich, da die Anmeldeinformationen einen SAS-Tokenschlüssel speichern. Diesen Schritt können Sie jedoch überspringen, wenn Sie Managed Identity oder Microsoft Entra-Authentifizierung verwenden.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
    
  • Schritt 2: Erstellen Sie einen Berechtigungsnachweis mit einem SAS-Token. Entfernen Sie das führende ?.

    CREATE DATABASE SCOPED CREDENTIAL MyStorageCred
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
         SECRET = '<your_SAS_token>'; -- omit the leading '?'
    
  • Schritt 3: Erstellen einer externen Datenquelle.

    CREATE EXTERNAL DATA SOURCE MyAzureStorage
    WITH (
        LOCATION = 'abs://mycontainer@mystorageaccount.blob.core.windows.net',
        CREDENTIAL = MyStorageCred
    );
    
  • Schritt 4: Erstellen eines Dateiformats für die CSV.

    CREATE EXTERNAL FILE FORMAT CsvFormat
    WITH (
        FORMAT_TYPE = DELIMITEDTEXT,
        FORMAT_OPTIONS (
            FIELD_TERMINATOR = ',',
            STRING_DELIMITER = '"',
            FIRST_ROW = 2
        )
    );
    
  • Schritt 5: Erstellen der externen Tabelle.

    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
    );
    
  • Schritt 6: Abfragen der externen Tabelle.

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

Beispiel 3: Abfragen einer Tabelle in einem anderen SQL Server

Dieses Beispiel funktioniert in SQL Server 2019 (15.x) und höheren Versionen.

  • Schritt 1: Erstellen eines Datenbankmasterschlüssels (erforderlich, da die Anmeldeinformationen ein Kennwort speichern).

    CREATE MASTER KEY ENCRYPTION
    BY PASSWORD = '<password>';
    
  • Schritt 2: Erstellen sie eine Anmeldeinformation für die SQL Server-Remoteinstanz.

    CREATE DATABASE SCOPED CREDENTIAL RemoteSqlCred
    WITH IDENTITY = 'remote_user',
         SECRET = '<password>';
    
  • Schritt 3: Erstellen der externen Datenquelle.

    CREATE EXTERNAL DATA SOURCE RemoteSqlServer
    WITH (
        LOCATION = 'sqlserver://remote-server.contoso.com',
        PUSHDOWN = ON,
        CREDENTIAL = RemoteSqlCred
    );
    
  • Schritt 4: Erstellen der externen Tabelle (dreiteiliger Name 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'
    );
    
  • Schritt 5: Abfragen über Server hinweg.

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

Beispiel 4: Ergebnisse mit CETAS nach Parquet exportieren

Funktioniert unter SQL Server 2022 (16.x) und höheren Versionen von Azure SQL Managed Instance.

  • Schritt 1: Aktivieren von CETAS (nur SQL Server).

    EXECUTE sp_configure 'allow polybase export', 1;
    RECONFIGURE;
    
  • Schritt 2: Erstellen von Anmeldeinformationen und Datenquellen (Wiederverwenden aus früheren Beispielen).

  • Schritt 3: Erstellen eines Dateiformats für den Parkettexport.

    CREATE EXTERNAL FILE FORMAT ParquetFormat
    WITH (
        FORMAT_TYPE = PARQUET
    );
    
  • Schritt 4: Exportieren von Abfrageergebnissen.

    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-Bausteine für PolyBase

Bevor Sie ein Szenario implementieren, verstehen Sie die wichtigsten T-SQL-Objekte, die PolyBase verwendet und wie sie zusammenpassen:

Diagramm mit PolyBase Transact-SQL Objekten und deren Beziehungen.

Diagramm mit PolyBase T-SQL-Objekten und deren Beziehungen von der Authentifizierung (Datenbankmasterschlüssel, Anmeldeinformationen) über Datenquellen und Dateiformate bis hin zu Abfragemethoden (Externe Tabelle, OPENROWSET, BULK INSERT, CETAS).

Eine vollständige Transact-SQL Referenz für alle Objekte finden Sie unter PolyBase Transact-SQL Referenz.

Von Bedeutung

Überprüfen Sie die Datentypzuordnung für Ihr externes Dateiformat. Wenn Sie ein externes Dateiformat oder Abfragedateien mithilfe OPENROWSETvon PolyBase erstellen, werden Quelldatentypen (Parkett, CSV, Delta, Oracle, Teradata, MongoDB) automatisch SQL Server-Datentypen zugeordnet. Nicht übereinstimmende Typen können zu automatischem Abschneiden, Präzisionsverlust oder Abfragefehlern führen. Zum Beispiel wird ein Parquet-DECIMAL(38,18)DECIMAL(18,0) zugeordnet. Überprüfen Sie die Zuordnungstabellen, bevor Sie externe Tabellenspalten oder eine WITH Klausel definieren. Die vollständige Referenz finden Sie unter Typzuordnung mit PolyBase.

Wann brauchst du CREATE MASTER KEY?

Ein Datenbankmasterschlüssel (DMK) wird mithilfe der CREATE MASTER KEY Syntax erstellt. Das DMK verschlüsselt die geheimen Schlüssel, die in datenbankbezogenen Anmeldeinformationen gespeichert sind. Sie ist nur erforderlich, wenn die Anmeldeinformationen einen geheimen Wert enthalten, d. h. wenn sie ein Kennwort, ein Token oder einen Zugriffsschlüssel speichert.

  • DMK ist erforderlich (Anmeldeinformationen speichern einen geheimen Schlüssel):

    Authentifizierungsart IDENTITY-Wert Hat geheimnis DMK
    SAS-Token 'SHARED ACCESS SIGNATURE' Ja Erforderlich
    S3-Zugriffstaste 'S3 ACCESS KEY' Ja Erforderlich
    SQL-Anmeldung / Standardauthentifizierung '<username>' Ja Erforderlich
    Zugriffsschlüssel für das Speicherkonto '<storage_account_name>' Ja Erforderlich
    • Eine SAS-Token-Credential verwendet IDENTITY = 'SHARED ACCESS SIGNATURE' und speichert einen geheimen Wert, daher benötigt sie einen Datenbank-Masterschlüssel.
    • Eine S3-Zugriffsschlüssel-Credential verwendet IDENTITY = 'S3 ACCESS KEY' und speichert einen geheimen Wert, daher benötigt sie einen Datenbank-Hauptschlüssel.
      • Ein SQL-Login oder eine grundlegende Authentifizierungsdaten verwendet IDENTITY = '<username>' und speichert einen geheimen Wert, daher benötigt er einen Datenbank-Hauptschlüssel.
    • Die Anmeldeinformationen für den Zugriffsschlüssel eines Speicherkontos verwenden IDENTITY = '<storage_account_name>' und speichern einen geheimen Wert, sodass ein Datenbank-Hauptschlüssel erforderlich ist.
  • DMK ist nicht erforderlich (kein geheimer Schlüssel gespeichert):

    Authentifizierungsart IDENTITY-Wert Hat geheimnis DMK
    Verwaltete Identität 'Managed Identity' No Nicht erforderlich
    Microsoft Entra ID 'User Identity' oder 'Managed Identity' No Nicht erforderlich
    • Eine Managed Identity-Zugangsdaten verwendet IDENTITY = 'Managed Identity' und speichert kein Geheimnis, daher benötigt sie keinen Datenbank-Hauptschlüssel.
    • Eine Microsoft Entra ID-Zugangsdaten verwendet IDENTITY = 'User Identity' oder IDENTITY = 'Managed Identity' und speichert kein Geheimnis, daher benötigt sie keinen Datenbank-Hauptschlüssel.

Tipp

Wenn Ihre CREATE DATABASE SCOPED CREDENTIAL-Anweisung kein Geheimnis enthält, brauchen Sie kein DMK. Verwaltete Identitäten und die Authentifizierung mit Microsoft Entra ID delegieren das Vertrauen an die Plattform. Die Datenbank speichert keine Kennwörter oder Token.

Beispiele:

Bei dieser Beispielabfrage ist der DMK erforderlich (Anmeldeinformationen speichern ein SAS-Token).

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

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

In dieser Beispielabfrage ist das DMK nicht erforderlich (verwaltete Identität, kein geheimer Schlüssel).

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

In dieser Beispielabfrage ist die DMK nicht erforderlich (Microsoft Entra Pass-Through, kein Geheimer Schlüssel).

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

Remotedatenzugriff mit OPENROWSET und externen Tabellen

SQL Server bietet drei unterschiedliche Ansätze zum Abfragen von Remotedaten. Sie können den richtigen Ansatz auswählen, wenn Sie die Unterschiede zwischen Syntax, Authentifizierung und Architektur verstehen.

Vorgehensweise Syntax Verbindung mit Authentifizierung PolyBase-Dienste Plattformen
OLE DB-Abfragen OPENROWSET(provider, connection, query) OLE DB-Quelle über MSOLEDBSQL, SQLOLEDB oder andere Anbieter SQL-Authentifizierung, Windows-Authentifizierung, Microsoft Entra ID (MSOLEDBSQL) No SQL Server (alle unterstützten Versionen)
Dateiabfragen in SQL Server 2022 (16.x) und SQL Server 2019 (15.x) OPENROWSET(BULK ...) Dateien auf lokalem Datenträger, Netzwerk oder Cloud (Azure Blob, ADLS, S3, OneLake) SAS-Token, Zugriffsschlüssel, verwaltete Identität, Microsoft Entra-ID Ja für Cloud 1; Nein für lokal SQL Server 2022 (16.x) und SQL Server 2019 (15.x)
Dateiabfragen in SQL Server 2025 (17.x) und neueren Versionen OPENROWSET(BULK ...) Dateien auf lokalem Datenträger, Netzwerk oder Cloud (Azure Blob, ADLS, S3, OneLake) SAS-Token, Zugriffsschlüssel, verwaltete Identität, Microsoft Entra-ID No SQL Server 2022 (16.x) und höhere Versionen, Azure SQL-Datenbank, Azure SQL Managed Instance, SQL-Datenbank in Fabric
PolyBase-Connectoren CREATE EXTERNAL TABLE mit CREATE EXTERNAL DATA SOURCE unter Verwendung von sqlserver://, oracle://, teradata://, mongodb://, odbc:// Remote SQL Server, Oracle, Teradata, MongoDB, ODBC-Quellen Nur SQL-Authentifizierung Ja SQL Server 2019 (15.x) und höhere Versionen (Windows); SQL Server 2025 (17.x) und höhere Versionen (Linux)

1 Für den Zugriff auf Cloud-Dateien in SQL Server 2022 (16.x) muss die PolyBase-Funktion installiert sein.

  • OLE DB-Abfragen verwenden OPENROWSET(provider, connection, query), um über MSOLEDBSQL, SQLOLEDB oder einen anderen Provider eine Verbindung mit jeder OLE DB-Datenquelle in allen unterstützten Versionen von SQL Server herzustellen. Sie unterstützen SQL-Authentifizierung, Windows-Authentifizierung und Microsoft Entra ID mit MSOLEDBSQL und erfordern keine PolyBase-Dienste.
  • Dateiabfragen verwenden OPENROWSET(BULK ...), um Dateien auf lokalen Datenträgern, Netzwerkfreigaben oder Cloudspeichern wie Azure Blob Storage, ADLS, S3 oder OneLake mithilfe eines SAS-Tokens, Zugriffsschlüssels, einer Managed Identity oder Microsoft Entra ID zu lesen. Sie werden für lokale und Netzwerkdateien in SQL Server 2005 und neueren Versionen, für Cloud-Dateien in SQL Server 2022 (16.x) und späteren Versionen sowie in Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Fabric unterstützt. Dateiabfragen benötigen keine PolyBase-Dienste für lokale Dateien oder Cloud-Dateien in SQL Server 2022 (16.x) und neueren Versionen.
  • PolyBase-Konnektoren verwenden CREATE EXTERNAL TABLE mit CREATE EXTERNAL DATA SOURCE und den sqlserver://, oracle://, teradata://, mongodb://, oder odbc:// Standort, um sich mit entfernten Quellen von SQL Server, Oracle, Teradata, MongoDB oder ODBC zu verbinden. Sie benötigen SQL-Authentifizierung und PolyBase-Dienste in SQL Server 2019 (15.x) und neueren Versionen auf Windows sowie SQL Server 2025 (17.x) und neueren Versionen unter Linux. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL).

Wann jeder Ansatz verwendet werden soll

Verwenden Sie OLE DB OPENROWSET für:

  • Verwenden Sie die OLE DB OPENROWSET für schnelle, einmalige Ad-hoc-Abfragen, ohne persistente Objekte zu erstellen.
  • Verwenden Sie OLE DB OPENROWSET für Microsoft Entra ID oder Managed Identity Authentication über MSOLEDBSQL.
  • Verwenden Sie OLE DB OPENROWSET , um PolyBase-Serviceabhängigkeiten zu vermeiden.
  • Verwenden Sie die OLE DB OPENROWSET , um sich mit jeder Datenquelle zu verbinden, die einen OLE-DB-Anbieter hat.

Verwenden Sie File OPENROWSET(BULK) für:

  • Verwenden Sie die Datei OPENROWSET(BULK ...) für Ad-hoc-Dateierkundung und Schema-Entdeckung.
  • Verwenden Sie die Datei OPENROWSET(BULK ...) für schnelle Transformationen und Vorschauen, bevor Sie sich auf eine Tabellendefinition festlegen.
  • Verwenden Sie die Datei OPENROWSET(BULK ...) für flexible Inline-Spaltentransformationen wie Gießen, Filtern und berechnete Spalten.
  • Verwenden Sie die Datei OPENROWSET(BULK ...) für Daten, die sich nicht häufig ändern und keine persistenten Metadaten benötigen.

Verwenden Sie PolyBase-Konnektoren mit CREATE EXTERNAL TABLE für:

  • Verwenden Sie PolyBase-Konnektoren mit CREATE EXTERNAL TABLE für persistente, wiederverwendbare Tabellendefinitionen, die von mehreren Benutzern oder Anwendungen verwendet werden.
  • Verwenden Sie PolyBase-Konnektoren mit CREATE EXTERNAL TABLE für Produktionsworkloads, die Statistiken und die Optimierung von Abfrageplänen erfordern.
  • Verwenden Sie PolyBase-Connectors mit CREATE EXTERNAL TABLE zur Pushdownberechnung auf entfernte Datenquellen wie Oracle und SQL Server .
  • Verwenden Sie PolyBase-Konnektoren mit CREATE EXTERNAL TABLE für gemeinsame Governance und Sicherheit; nach dem Erstellen der Tabelle benötigen Benutzer nur die Berechtigung SELECT.
  • Verwenden Sie PolyBase-Konnektoren mit CREATE EXTERNAL TABLE, wenn SQL-Authentifizierung für die Remotequelle verfügbar ist.

OPENROWSET (OLE DB) – Ad-hoc-Remoteabfragen (keine PolyBase-Dienste erforderlich)

Die OLE DB-Form von OPENROWSET verbindet sich über einen OLE DB-Anbieter mit einer Remotedatenquelle, führt eine Pass-Through-Abfrage aus und gibt die Ergebnisse als Zeilenmenge zurück. Es ist eine einmalige Ad-hoc-Alternative zu einem verknüpften Server. Es werden keine dauerhaften Metadaten erstellt. Diese Syntax erfordert keine PolyBase-Dienste und unterstützt keine Clouddateien oder externen Datenquellen.

Diese Beispielabfrage stellt eine Verbindung mit einem Remote-SQL Server über OLE DB (nicht PolyBase) dar.

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

OPENROWSET(BULK) – dateibasierte Abfragen (PolyBase)

Die BULK-Form von OPENROWSET liest Daten direkt aus Dateien. In SQL Server 2019 (15.x) und früheren Versionen liest sie aus lokalen oder UNC-Dateipfaden und erfordert eine Formatdatei. In SQL Server 2022 (16.x) und höheren Versionen können Sie mit den Parametern aus dem DATA_SOURCEFORMAT lesen. Dieser Ansatz ist die polyBase-integrierte Version, die für die Datenvirtualisierung verwendet wird.

Im Kontext der PolyBase- und Datenvirtualisierung bedeutet es, wenn in dieser Anleitung auf OPENROWSET verwiesen wird, die OPENROWSET(BULK ...)-Syntax mit einer FORMAT-Klausel zum Abfragen externer Dateien.

Beispiele:

In dieser Beispielabfrage wird eine Parkettdatei aus Azure Blob Storage (SQL Server 2022 und höher) gelesen.

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

Diese Beispielabfrage liest eine Parquet-Datei mit einem Inlinepfad (Azure SQL-Datenbank, Azure SQL Managed Instance).

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

Gründe für die Verwendung von OPENROWSET im Vergleich zu externen Tabellen

Mit beiden OPENROWSET(BULK ...) und externen Tabellen können Sie externe Daten mit T-SQL abfragen, sie sind jedoch für unterschiedliche Anwendungsfälle konzipiert. In der folgenden Tabelle sind die wichtigsten Unterschiede zusammengefasst, mit denen Sie entscheiden können, welcher Ansatz zu Ihrem Szenario passt.

Fähigkeit OPENROWSET(BULK ...) Externe Tabelle
Purpose Ad-hoc-Erkundungen und einmalige Abfragen Persistente, wiederverwendbare Tabellendefinition
In der Datenbank gespeicherte Metadaten Nein. Nach ausführung der Abfrage wird nichts gespeichert. Ja. Die Tabellendefinition, Datenquelle und das Dateiformat werden als Datenbankobjekte gespeichert.
Schemadefinition Wird automatisch aus der Datei (Parquet) abgeleitet oder inline mit einer WITH-Klausel angegeben Explizit in der CREATE EXTERNAL TABLE Anweisung definiert
Erlaubnisse Erfordert ADMINISTER BULK OPERATIONS oder ADMINISTER DATABASE BULK OPERATIONS Nach der Erstellung reicht die Standardberechtigung SELECT für die Tabelle aus.
Berechnete Spalten Ja. Fügen Sie Ausdrücke und berechnete Spalten in der SELECT Liste hinzu. Metadatenfunktionen wie filename() und filepath() sind hier nur verfügbar. Nein. Feste Spaltenliste; Durchführen von Transformationen in einer Ansicht oder in der Abfrage, die die externe Tabelle liest
Statistik Azure SQL Managed Instance: manuelle Einzelspaltenstatistiken über sys.sp_create_openrowset_statistics. Siehe OPENROWSET manual statistics.

SQL Server 2022 (16.x) und neuere Versionen, Azure SQL-Datenbank, SQL-Datenbank in Fabric: Automatisches Erstellen von Statistiken für Prädikate. Manuelle OPENROWSET Statistiken werden auf SQL Server nicht unterstützt.
Vollständige CREATE STATISTICS Unterstützung auf allen Plattformen sowie automatisches Erstellen in SQL Server 2022 (16.x) und höheren Versionen. Weitere Informationen finden Sie unter Externe Tabellen: Manuelles Erstellen von Statistiken.
Pushdown Eingeschränkter Support. Die Engine könnte Filter an den Dateiscan per Push weiterleiten, aber es gibt keinen Pushdown für RDBMS-Remotedatenquellen. Ja. Unterstützt die Pushdownberechnung für RDBMS-Connectors (SQL Server, Oracle, Teradata, MongoDB)
Am besten geeignet für Datensuche, Schemaermittlung, Prototypabfragen, einmaliges Laden von Daten, flexible Transformationen Produktionsworkloads, wiederholte Abfragen, gemeinsamer Zugriff für Benutzer, Dashboards und Berichte
  • OPENROWSET(BULK ...) ist am besten für Ad-hoc-Exploration und einmalige Abfragen, während eine externe Tabelle besser für persistente, wiederverwendbare Tabellendefinitionen geeignet ist.
  • OPENROWSET(BULK ...) speichert nach der Abfrage keine Metadaten mehr in der Datenbank, während eine externe Tabelle die Tabellendefinition, die Datenquelle und das Dateiformat als Datenbankobjekte speichert.
  • OPENROWSET(BULK ...) leitet das Schema automatisch aus einer Parquet-Datei ab oder definiert das Schema direkt mit einer WITH-Klausel, während eine externe Tabelle das Schema explizit in der CREATE EXTERNAL TABLE-Anweisung definiert.
  • OPENROWSET(BULK ...) erfordert ADMINISTER BULK OPERATIONS oder ADMINISTER DATABASE BULK OPERATIONS, während eine externe Tabelle von Benutzern abgefragt werden kann, die nur eine Standardberechtigung SELECT benötigen, sobald die Tabelle existiert.
  • OPENROWSET(BULK ...) unterstützt berechnete Spalten in der Abfrage und Metadatenfunktionen wie filename() und filepath(), während eine externe Tabelle eine feste Spaltenliste hat und Transformationen in einer Ansicht oder in der Abfrage, die die externe Tabelle liest, benötigt.
  • OPENROWSET(BULK ...) unterstützt nur eingeschränkte Statistiken: Azure SQL Managed Instance kann sys.sp_create_openrowset_statistics für Einzelspaltenstatistiken verwenden, aber SQL Server 2022 (16.x) und neuere Versionen, Azure SQL-Datenbank und SQL Database in Fabric erstellen für Prädikate automatisch Statistiken. Manuelle OPENROWSET Statistiken werden auf SQL Server, Azure SQL-Datenbank und SQL Database in Fabric nicht unterstützt. Eine externe Tabelle unterstützt die volle CREATE STATISTICS Funktionalität auf allen Plattformen sowie automatische Statistiken in SQL Server 2022 (16.x) und späteren Versionen, Azure SQL-Datenbank und SQL Database in Fabric. Siehe manuelle Statistiken für OPENROWSET und manuelle Statistiken für externe Tabellen erstellen.
  • OPENROWSET(BULK ...) hat begrenzten Pushdown und keinen Pushdown für Remote-RDBMS-Quellen, während eine externe Tabelle die Pushdownberechnung für RDBMS-Connectors unterstützt.
  • OPENROWSET(BULK ...) Am besten eignet es sich für Datenexploration, Schema-Discovery, Prototyping, Einmal-Lasten und flexible Transformationen, während eine externe Tabelle am besten für Produktionsworkloads, wiederholte Abfragen, Shared Access, Dashboards und Reporting geeignet ist.

Verwenden von OPENROWSET, wenn Sie Flexibilität benötigen

Mit OPENROWSET können Sie eine Datei untersuchen, verschiedene Schemas testen oder berechnete Spalten und Transformationen hinzufügen, ohne dauerhafte Objekte zu erstellen. Sie können z. B. den Dateipfad als Spalte extrahieren, Datentypen inline umwandeln oder nach berechneten Ausdrücken in einer einzelnen Abfrage filtern.

Diese Beispielabfrage enthält berechnete Spalten und Transformationen:

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

Tipp

Die filepath()- und filename()-Funktionen sind in Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Server 2022 (16.x) und späteren Versionen verfügbar. Sie ermöglichen es Ihnen, nach Teilen des Dateipfads (Partitionsausscheidung) zu filtern und den Namen der Quelldatei als Spalte verfügbar zu machen, was mit externen Tabellen nicht direkt möglich ist.

Verwenden externer Tabellen, wenn Sie Persistenz und Governance benötigen

Verwenden Sie externe Tabellen, wenn mehrere Benutzer oder Anwendungen dieselben externen Daten wiederholt abfragen müssen. Sie definieren das Schema, die Datenquelle und die Anmeldeinformationen einmal, und speichern sie in der Datenbank. Consumer benötigen nur die Berechtigung SELECT für die Tabelle.

Externe Tabellen unterstützen auch Statistiken, die der Abfrageoptimierer zum Erstellen besserer Ausführungspläne verwendet. Sie können Statistiken manuell erstellen oder das Modul automatisch erstellen lassen (SQL Server 2022 (16.x) und höhere Versionen).

Diese Beispielabfrage erstellt Statistiken für eine externe Tabelle für bessere Abfragepläne.

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

Weitere Informationen zu Statistiken für beide Ansätze finden Sie unter PolyBase-Leistungsüberlegungen – Statistik.

BULK INSERT vs. OPENROWSET(BULK): Welches sollte ich verwenden?

Sowohl BULK INSERT als auch OPENROWSET(BULK ...) importieren Daten aus Dateien in SQL Server mithilfe des gleichen zugrunde liegenden Bulk-Load-Mechanismus. Sie unterscheiden sich jedoch in Syntax, Flexibilität und was Sie mit den Ergebnissen tun können. In der folgenden Tabelle sind die wichtigsten Unterschiede zusammengefasst:

Hinweis

Die eigenständige BULK INSERT Anweisung wird in der SQL-Datenbank in Fabric nicht unterstützt. Verwenden Sie für die Datenerfassung INSERT ... SELECT mit OPENROWSET(BULK ...) gegen OneLake.

Fähigkeit BULK INSERT OPENROWSET(BULK ...)
Grundzweck Lädt Daten aus einer Datei direkt in eine Zieltabelle. Gibt ein Rowset zurück, das Sie in einer SELECT- oder INSERT ... SELECT-Anweisung verwenden.
Verwendungsmuster Eigenständige Anweisung: BULK INSERT <table> FROM '<file>' Muss in einer Abfrage verwendet werden: SELECT * FROM OPENROWSET(BULK ...) oder INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)
Erfordert eine Zieltabelle? Ja. Schreibt immer direkt in eine Tabelle Nein. Sie können SELECT verwenden, ohne es irgendwo einfügen zu müssen, oder sie fügen es in eine Tabelle oder temporäre Tabelle ein.
Spaltentransformationen während des Ladens Eingeschränkter Support. Die Daten werden von der Datei zur Tabelle unverändert übertragen (Zuordnung gesteuert durch Formatdatei oder Spaltenreihenfolge) Vollständiger Support. Sie können Ausdrücke, CASTWHERE Filter, JOIN andere Tabellen und berechnete Spalten in der Umgebung hinzufügen.SELECT
Tabellenhinweise Die WITH Klausel enthält Unterstützung für BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPIDENTITY, KEEPNULLS, und TABLOCK mehr Unterstützt Tabellenhinweise über die INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...) Syntax
Import mit einem einzigen Wert (Large-Object, LOB) Nicht unterstützt Ja. Unterstützt SINGLE_BLOB, SINGLE_CLOB, SINGLE_NCLOB, um eine gesamte Datei als einen varbinary(max)-, varchar(max)- oder nvarchar(max)-Wert zu importieren.
Formatdateien Ja. Unterstützt über (XML und Nicht-XML) Ja. Unterstützt (XML und Nicht-XML)
Cloud-Dateizugriff DATA_SOURCEunterstützt Azure Blob Storage in SQL Server 2017 (14.x) und späteren Versionen, Azure SQL-Datenbank und Azure SQL Managed Instance. SQL Server 2019 CU11 und spätere Updates unterstützen ebenfalls ADLS Gen2. S3-kompatibler Speicher wird nicht unterstützt. DATA_SOURCEunterstützt Azure Blob Storage in SQL Server 2017 (14.x) und späteren Versionen, ADLS Gen2 in SQL Server 2019 CU11 und späteren Versionen sowie S3-kompatiblen Speicher in SQL Server 2022 (16.x) und späteren Versionen. Azure SQL-Datenbank und Azure SQL Managed Instance unterstützen Azure Blob Storage und ADLS Gen2. Die SQL-Datenbank in Fabric unterstützt OneLake und externe Speicher über OneLake-Abkürzungen.
Parquet- oder Delta-Dateien Nicht unterstützt. Nur CSV-/durch Trennzeichen getrennte Text Ja. SQL Server 2022 (16.x) und spätere Versionen, Azure SQL Managed Instance und Azure SQL-Datenbank unterstützen FORMAT = 'PARQUET' sowie FORMAT = 'DELTA'; Unterstützung für SQL Database in FabricFORMAT = 'PARQUET', aber nicht DELTA. Weitere Informationen finden Sie unter OPENROWSET BULK (Transact-SQL).
Berechtigung erforderlich ADMINISTER BULK OPERATIONS oder ADMINISTER DATABASE BULK OPERATIONS, plus INSERT in der Zieltabelle ADMINISTER BULK OPERATIONS oder ADMINISTER DATABASE BULK OPERATIONS
Minimale Protokollierung Ja. Unterstützt in einfachen oder massenprotokollierten Wiederherstellungsmodellen mit TABLOCK Ja. Unterstützt bei Verwendung mit INSERT ... SELECT und TABLOCK
  • BULK INSERT Lädt Daten aus einer Datei direkt in eine Zieltabelle OPENROWSET(BULK ...) und gibt dabei einen Zeilensatz zurück, den du in einer SELECT OR-Anweisung INSERT ... SELECT verwenden kannst.
  • BULK INSERT ist eine eigenständige Anweisung, während OPENROWSET(BULK ...) innerhalb einer Abfrage wie SELECT * FROM OPENROWSET(BULK ...) oder INSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)verwendet werden muss.
  • BULK INSERT schreibt immer direkt in eine Zieltabelle, während OPENROWSET(BULK ...)SELECT aus einer Datei lesen kann, ohne die Daten irgendwo einzufügen, oder sie in eine beliebige Tabelle oder Temp-Tabelle einfügen kann.
  • BULK INSERT bietet nur eingeschränkte Unterstützung für Spaltentransformationen, da die Daten unverändert aus der Datei in die Tabelle übertragen werden, wobei die Zuordnung durch eine Formatdatei oder die Spaltenreihenfolge gesteuert wird. OPENROWSET(BULK ...) unterstützt Ausdrücke, CAST, JOIN-Filter, SELECT-Elemente und berechnete Spalten im umgebenden WHERE.
  • BULK INSERT verwendet eine WITH-Klausel für BATCHSIZE, CHECK_CONSTRAINTS, FIRE_TRIGGERS, KEEPNULLS, KEEPIDENTITY, TABLOCK und andere Hinweise. OPENROWSET(BULK ...) unterstützt Tabellenhinweise mithilfe von INSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...).
  • BULK INSERT unterstützt keinen Import mit großem Objekt-Einzelwert. OPENROWSET(BULK ...) unterstützt SINGLE_BLOB, SINGLE_CLOB und SINGLE_NCLOB, um eine gesamte Datei jeweils als einzelnen varbinary(max)-, varchar(max)- oder nvarchar(max)-Wert zu importieren.
  • Beide BULK INSERTOPENROWSET(BULK ...) unterstützen sowohl XML- als auch Nicht-XML-Dateien.
  • Für den Zugriff auf Cloud-Dateien mit BULK INSERTunterstützt der Parameter DATA_SOURCE Azure Blob Storage in SQL Server 2017 (14.x) und neueren Versionen, Azure SQL-Datenbank und Azure SQL Managed Instance. SQL Server 2019 CU11 und spätere Updates unterstützen ebenfalls ADLS Gen2, unterstützen BULK INSERT aber keinen S3-kompatiblen Speicher. Für OPENROWSET(BULK ...)unterstützt DATA_SOURCE Azure Blob Storage in SQL Server 2017 (14.x) und späteren Versionen, ADLS Gen2 in SQL Server 2019 CU11 und späteren Versionen sowie S3-kompatiblen Speicher in SQL Server 2022 (16.x) und späteren Versionen. Azure SQL-Datenbank und Azure SQL Managed Instance unterstützen Azure Blob Storage und ADLS Gen2. Die SQL-Datenbank in Fabric unterstützt OneLake und externe Speicher über OneLake-Abkürzungen.
  • BULK INSERT unterstützt keine Parquet- oder Delta-Dateien und unterstützt nur CSV oder getrennten Text. OPENROWSET(BULK ...) unterstützt FORMAT = 'PARQUET' und FORMAT = 'DELTA' in SQL Server 2022 (16.x) und späteren Versionen, Azure SQL-Datenbank und Azure SQL Managed Instance. SQL-Datenbank in Fabric unterstützt FORMAT = 'PARQUET', aber nicht FORMAT = 'DELTA'. Weitere Informationen finden Sie unter OPENROWSET BULK (Transact-SQL).
  • BULK INSERT erfordert ADMINISTER BULK OPERATIONS oder INSERT plus OPENROWSET(BULK ...)-Berechtigung für die Zieltabelle, während ADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONS oder ADMINISTER DATABASE BULK OPERATIONS erfordert.
  • BULK INSERT unterstützt minimale Protokollierung unter dem einfachen oder dem massenprotokollierten Wiederherstellungsmodell mit TABLOCK. OPENROWSET(BULK ...) Unterstützt minimales Loggen, wenn es mit INSERT ... SELECT und TABLOCKverwendet wird.

Wann BULK INSERT auswählen

Verwenden Sie diese Option BULK INSERT , wenn Sie eine einfache Datei-zu-Tabelle laden und während des Imports keine Daten transformieren, filtern oder verknüpfen müssen. Es verwendet eine einfachere Syntax für CSV- oder andere durch Trennzeichen getrennte Dateien:

Diese Beispielabfrage lädt eine CSV-Datei aus Azure Blob Storage direkt in eine Tabelle.

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

Diese Beispielabfrage lädt eine lokale Datei mit einer Formatdatei für die Spaltenzuordnung.

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

Wann sollte OPENROWSET(BULK) verwendet werden?

Verwenden Sie OPENROWSET(BULK ...), wenn Sie eine oder mehrere der folgenden Voraussetzungen benötigen:

  • Nutze OPENROWSET(BULK ...) sie, um Dateidaten abzufragen oder vorzuschauen, ohne vorher eine Tabelle zu erstellen.
  • Verwenden Sie OPENROWSET(BULK ...), um Daten beim Import zu transformieren, zu filtern oder zusammenzuführen.
  • Verwenden Sie OPENROWSET(BULK ...), um Parquet- oder Delta-Dateien zu laden, da BULK INSERT diese Formate nicht unterstützt.
  • Verwenden Sie OPENROWSET(BULK ...), um eine ganze Datei als einzelnen LOB-Wert mit SINGLE_BLOB, SINGLE_CLOB oder SINGLE_NCLOB zu importieren.

In diesem Beispiel wird eine CSV-Datei aus Azure Blob Storage angezeigt, ohne dass die Daten irgendwo eingefügt werden.

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

In diesem Beispiel werden Daten mit Transformation und Filterung eingefügt.

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;

In dieser Beispielabfrage wird eine Parkettdatei geladen (nicht möglich mit BULK INSERT).

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

In diesem Beispiel wird eine gesamte XML-Datei als einzelner varbinary(max)-Wert importiert.

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

Tipp

Ein Ansatz besteht darin, OPENROWSET(BULK ...) innerhalb einer SELECT zu verwenden, um Dateidaten zu erkunden und zu validieren, und dann zu BULK INSERT für die endgültige Produktionslast zu wechseln, falls Sie keine Transformationen benötigen. Wenn Sie Parquet- oder Delta-Unterstützung oder Inline-Filterung benötigen, bleiben Sie bei OPENROWSET.

Weitere Informationen finden Sie in den folgenden verwandten Leitfäden:

Nützliche Metadatenfunktionen

Wenn Sie externe Dateien mit OPENROWSET oder externen Tabellen abfragen, verwenden Sie die integrierten Funktionen und Prozeduren, um Dateimetadaten zu untersuchen, Schemas zu ermitteln und partitionierungsbewusste Abfragen zu implementieren.

filepath() und filename()

Die Funktionen filepath() und filename() geben Teile des Dateipfads oder des Dateinamens für jede Zeile im Ergebnisdatensatz zurück. Sie sind besonders nützlich für:

  • Partitionslöschung: Filtern Sie nach Ordnersegmenten (z. B. Jahres-/Monat/Tag-Partitionen), sodass das Modul nur die übereinstimmenden Dateien liest, anstatt alles zu scannen.

  • Verfügbarmachen von Quellmetadaten: Fügen Sie den ursprünglichen Dateinamen oder Pfad als Spalte in die Abfrageergebnisse ein, was für die Überwachung oder das Debuggen hilfreich ist.

Funktion Rückkehr Beispiel
filename() Der Dateiname (einschließlich Erweiterung) der Quelldatei für jede Zeile sales_2025_01.parquet
filepath(N) Das Nte Ordnersegment vom Platzhalter (*) im Pfad BULK, wobei N bei 1 beginnt Für den Pfad sales/2025/01/*.parquet gibt filepath(1)2025 zurück, und filepath(2) gibt 01 zurück.

Gilt für: Azure SQL-Datenbank, Azure SQL Managed Instance, SQL Server 2022 (16.x) und höhere Versionen, SQL-Datenbank in Fabric.

Dieses Beispielabfrage verwendet filepath() zur Partitionseleminierung und filename() zur Identifizierung von Quelldateien. Er liest nur Dateien unter dem /2025/ Ordner und liest nur Dateien unter dem /06/ Unterordner.

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

Tipp

Platzieren Sie filepath() Filter in der WHERE Klausel statt in einer Unterabfrage oder CTE. Wenn sich der Filter in der WHERE Klausel befindet, kann die Engine eine Partitionseliminierung auf der Ebene des Dateiscans durchführen, wodurch die E/A erheblich reduziert wird.

sp_describe_first_result_set – OPENROWSET-Spaltentypen ermitteln

Bei der Verwendung von OPENROWSET mit Parquet-Dateien leitet die Engine die Spaltendatentypen automatisch ab (Schemaerkennung). Die abgeleiteten Typen können größer als erforderlich sein. Beispielsweise werden Textspalten häufig als varchar(8000) abgeleitet, da die Metadaten von Parquet keine maximale Länge enthalten. Diese Wahl kann die Leistung beeinträchtigen und mehr Arbeitsspeicher verbrauchen.

Verwenden Sie sp_describe_first_result_set, um das abgeleitete Schema zu prüfen, bevor Sie die Abfrage abschließen. Nachdem die abgeleiteten Typen angezeigt wurden, geben Sie schmalere Typen in einer WITH Klausel an, um die Leistung zu verbessern.

  • Schritt 1: Überprüfen des abgeleiteten Schemas.

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

    Die Ausgabe zeigt den Namen jeder Spalte, den abgeleiteten Datentyp, die maximale Länge, Genauigkeit und Skalierung der einzelnen Spalten an. Wenn du varchar(8000) siehst, wo ein varchar(100) ausreichen würde, überschreibe es.

  • Schritt 2: Verwenden Sie explizite Typen, um eine bessere Leistung zu erzielen.

    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;
    

Schemaerkennung funktioniert nur mit Parquet-Dateien. Geben Sie für CSV-Dateien immer Spaltendefinitionen entweder in einer WITH Klausel (für OPENROWSET) oder in der CREATE EXTERNAL TABLE Anweisung an. sp_describe_first_result_setist ein allgemeines SQL Server-, Azure SQL-Datenbank-, Azure SQL Managed Instance- und SQL-Datenbank-in-Fabric-Verfahren, aber es ist besonders nützlich für OPENROWSET Abfragen. Weitere Informationen finden Sie unter sp_describe_first_result_set.

Leistung, Problembehandlung und bewährte Methoden

Verwenden Sie nach der Implementierung der Datenvirtualisierung diese Leitfäden, um Die Leistung zu optimieren, Probleme zu diagnostizieren und die Produktionsbereitschaft sicherzustellen:

Fläche Artikel Einzelheiten
PolyBase-Leistung Leistungsüberlegungen in PolyBase für SQL Server Statistiken, Pushdown, Parallelität und Speicherverwaltung
Pushdownberechnung Pushdownberechnungen in PolyBase Gibt an, welche Vorgänge an die Remotequelle übertragen werden
So können Sie feststellen, ob ein Pushdown aufgetreten ist Wie man feststellt, ob ein externer Pushdown aufgetreten ist Abfragepläne und DMVs
Problembehandlung Überwachen und Beheben von Problemen mit PolyBase Häufige Fehler und deren Lösungen
Kerberos-Konnektivität Problembehandlung: PolyBase-Kerberos-Konnektivität
Häufig gestellte Fragen Häufig gestellte Fragen zu PolyBase
Fehler und Lösungen PolyBase-Fehler und mögliche Lösungen