Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server 2016 (13.x) und spätere Versionen
Azure SQL-Datenbank
Azure SQL Managed Instance
SQL 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 undBULK INSERTzum 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
- PolyBase ist eine Funktion der Microsoft SQL Datenbank-Engine, die Datenvirtualisierung implementiert.
- PolyBase wird in SQL Server 2016 und späteren Versionen unter Windows sowie in SQL Server 2019 und späteren Versionen unter Linux unterstützt.
- PolyBase wird in SQL Server 2017 unter Linux nicht unterstützt.
- PolyBase wird in der Azure SQL-Datenbank nicht unterstützt, aber Azure SQL-Datenbank bietet zugehörige Datenvirtualisierungsfunktionen über
OPENROWSETund externe Tabellen. Weitere Informationen finden Sie unter "Datenvirtualisierung mit Azure SQL-Datenbank (Vorschau)". - PolyBase ist nicht namentlich eine Funktion in Azure SQL Managed Instance, aber Azure SQL Managed Instance verfügt über Datenvirtualisierungsfunktionen, die ähnlich funktionieren. Weitere Informationen finden Sie unter Datenvirtualisierung mit Azure SQL Managed Instance.
- PolyBase wird in SQL-Datenbanken in Fabric nicht unterstützt, aber SQL-Datenbanken in Fabric bieten eigene Datenvirtualisierungsfunktionen für Daten in OneLake. Weitere Informationen finden Sie unter Data virtualization in SQL database in Fabric.
- PolyBase ist in Fabric Data Warehouse keine Funktion. Für die Datenvirtualisierung in Fabric Data Warehouse sollten Sie Fabric OneLake-Abkürzungen in Betracht ziehen. Für Datenlade-Artikel in Fabric Data Warehouse siehe Datenaufnahme mit T-SQL und dimensionale Modellierung: Tabellen laden.
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 ...)oderBULK INSERTmitINSERT ... 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 mitFORMAT = 'PARQUET',FORMAT = DELTA, undFORMAT = '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 TABLEmitsqlserver://,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 TABLEmit PolyBase-Connectors wiesqlserver://,oracle://,teradata://,mongodb://undodbc://.OPENROWSETunterstü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 ... SELECTausOPENROWSET(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> |
-
- 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.
-
- Erstellen Sie eine datenbankbezogene Anmeldeinformation für die Zielanmeldung mithilfe von
CREATE DATABASE SCOPED CREDENTIAL, damit sich die Engine beim Remoteserver authentifizieren kann.
- Erstellen Sie eine datenbankbezogene Anmeldeinformation für die Zielanmeldung mithilfe von
-
- Erstellen Sie eine externe Datenquelle für den entfernten SQL Server mit
CREATE EXTERNAL DATA SOURCE ... WITH (LOCATION = 'sqlserver://<server>').
- Erstellen Sie eine externe Datenquelle für den entfernten SQL Server mit
-
- Erstellen Sie eine externe Tabelle, wobei
CREATE EXTERNAL TABLE ... WITH (LOCATION = '<db>.<schema>.<table>')die Remotetabelle darstellt.
- Erstellen Sie eine externe Tabelle, wobei
-
- Fragen Sie die externe Tabelle mit
SELECT * FROM <external_table>ab.
- Fragen Sie die externe Tabelle mit
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)) |
- Oracle-Datenquellen verwenden die Configure PolyBase, um auf externe Daten im Oracle-Guide zuzugreifen und benötigen SQL Server 2019 (15.x) und neuere Versionen sowie Oracle-Client-Treiber.
- Teradata-Datenquellen verwenden die Configure PolyBase, um auf externe Daten im Teradata-Leitfaden zuzugreifen und benötigen SQL Server 2019 (15.x) und spätere Versionen sowie den Teradata-ODBC-Treiber.
- MongoDB- oder Cosmos-DB-Datenquellen verwenden die Configure PolyBase, um auf externe Daten im MongoDB-Leitfaden zuzugreifen und benötigen SQL Server 2019 (15.x) und spätere Versionen sowie den MongoDB-ODBC-Treiber.
- Jede ODBC-Quelle kann die Configure PolyBase verwenden, um mit dem ODBC-Leitfaden für generische Typen auf externe Daten zuzugreifen und benötigt SQL Server 2019 (15.x) sowie neuere Versionen auf Windows oder SQL Server 2025 (17.x) und neueren Versionen unter Linux.
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 |
- SQL Server 2022 und spätere Versionen unterstützen Azure Blob Storage oder ADLS Gen2-Authentifizierung durch Verwendung von SAS-Tokens, Zugangsschlüsseln oder Managed Identity, beginnend mit SQL Server 2025 (17.x). Weitere Informationen finden Sie unter Configure PolyBase to access external data in Azure Blob Storage.
- SQL Server 2019 unterstützt Azure Blob Storage oder ADLS Gen2, indem ein Zugangsschlüssel über den Hadoop-Connector verwendet wird. Weitere Informationen finden Sie unter Configure PolyBase to access external data in Azure Blob Storage.
- Azure SQL-Datenbank unterstützt Azure Blob Storage oder ADLS Gen2 durch Verwendung von SAS-Tokens, Managed Identity oder Microsoft Entra Pass-Through-Authentifizierung. Weitere Informationen finden Sie unter "Datenvirtualisierung mit Azure SQL-Datenbank (Vorschau)".
- Azure SQL Managed Instance unterstützt Azure Blob Storage oder ADLS Gen2 durch Verwendung von SAS-Tokens oder Managed Identity. Weitere Informationen finden Sie unter 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]://inabs:// -
ADLS Gen2: Ändern
abfs[s]://inadls://
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 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).
- Für die Syntax externer Datenquellen siehe CREATE EXTERNAL DATA SOURCE.
- Für die Syntax externer Dateiformate siehe CREATE EXTERNAL FILE FORMAT.
- Für die Syntax externer Tabellen siehe CREATE EXTERNAL TABLE.
- Für Ad-hoc-Datenzugriffssyntax siehe OPENROWSET.
- Für die CETAS-Syntax siehe CREATE EXTERNAL TABLE AS SELECT (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-WertHat 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.
- Ein SQL-Login oder eine grundlegende Authentifizierungsdaten verwendet
- 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.
- Eine SAS-Token-Credential verwendet
DMK ist nicht erforderlich (kein geheimer Schlüssel gespeichert):
Authentifizierungsart IDENTITY-WertHat 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'oderIDENTITY = 'Managed Identity'und speichert kein Geheimnis, daher benötigt sie keinen Datenbank-Hauptschlüssel.
- Eine Managed Identity-Zugangsdaten verwendet
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 TABLEmitCREATE EXTERNAL DATA SOURCEund densqlserver://,oracle://,teradata://,mongodb://, oderodbc://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
OPENROWSETfür schnelle, einmalige Ad-hoc-Abfragen, ohne persistente Objekte zu erstellen. - Verwenden Sie OLE DB
OPENROWSETfü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 TABLEfür persistente, wiederverwendbare Tabellendefinitionen, die von mehreren Benutzern oder Anwendungen verwendet werden. - Verwenden Sie PolyBase-Konnektoren mit
CREATE EXTERNAL TABLEfür Produktionsworkloads, die Statistiken und die Optimierung von Abfrageplänen erfordern. - Verwenden Sie PolyBase-Connectors mit
CREATE EXTERNAL TABLEzur Pushdownberechnung auf entfernte Datenquellen wie Oracle und SQL Server . - Verwenden Sie PolyBase-Konnektoren mit
CREATE EXTERNAL TABLEfür gemeinsame Governance und Sicherheit; nach dem Erstellen der Tabelle benötigen Benutzer nur die BerechtigungSELECT. - 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 einerWITH-Klausel, während eine externe Tabelle das Schema explizit in derCREATE EXTERNAL TABLE-Anweisung definiert. -
OPENROWSET(BULK ...)erfordertADMINISTER BULK OPERATIONSoderADMINISTER DATABASE BULK OPERATIONS, während eine externe Tabelle von Benutzern abgefragt werden kann, die nur eine StandardberechtigungSELECTbenötigen, sobald die Tabelle existiert. -
OPENROWSET(BULK ...)unterstützt berechnete Spalten in der Abfrage und Metadatenfunktionen wiefilename()undfilepath(), 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 kannsys.sp_create_openrowset_statisticsfü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. ManuelleOPENROWSETStatistiken werden auf SQL Server, Azure SQL-Datenbank und SQL Database in Fabric nicht unterstützt. Eine externe Tabelle unterstützt die volleCREATE STATISTICSFunktionalitä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 INSERTLädt Daten aus einer Datei direkt in eine ZieltabelleOPENROWSET(BULK ...)und gibt dabei einen Zeilensatz zurück, den du in einerSELECTOR-AnweisungINSERT ... SELECTverwenden kannst. -
BULK INSERTist eine eigenständige Anweisung, währendOPENROWSET(BULK ...)innerhalb einer Abfrage wieSELECT * FROM OPENROWSET(BULK ...)oderINSERT INTO <table> SELECT * FROM OPENROWSET(BULK ...)verwendet werden muss. -
BULK INSERTschreibt immer direkt in eine Zieltabelle, währendOPENROWSET(BULK ...)SELECTaus einer Datei lesen kann, ohne die Daten irgendwo einzufügen, oder sie in eine beliebige Tabelle oder Temp-Tabelle einfügen kann. -
BULK INSERTbietet 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 umgebendenWHERE. -
BULK INSERTverwendet eineWITH-Klausel fürBATCHSIZE,CHECK_CONSTRAINTS,FIRE_TRIGGERS,KEEPNULLS,KEEPIDENTITY,TABLOCKund andere Hinweise.OPENROWSET(BULK ...)unterstützt Tabellenhinweise mithilfe vonINSERT ... SELECT * FROM OPENROWSET(BULK ...) WITH (TABLOCK, IGNORE_CONSTRAINTS, ...). -
BULK INSERTunterstützt keinen Import mit großem Objekt-Einzelwert.OPENROWSET(BULK ...)unterstütztSINGLE_BLOB,SINGLE_CLOBundSINGLE_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 ParameterDATA_SOURCEAzure 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ützenBULK INSERTaber keinen S3-kompatiblen Speicher. FürOPENROWSET(BULK ...)unterstütztDATA_SOURCEAzure 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 INSERTunterstützt keine Parquet- oder Delta-Dateien und unterstützt nur CSV oder getrennten Text.OPENROWSET(BULK ...)unterstütztFORMAT = 'PARQUET'undFORMAT = 'DELTA'in SQL Server 2022 (16.x) und späteren Versionen, Azure SQL-Datenbank und Azure SQL Managed Instance. SQL-Datenbank in Fabric unterstütztFORMAT = 'PARQUET', aber nichtFORMAT = 'DELTA'. Weitere Informationen finden Sie unter OPENROWSET BULK (Transact-SQL). -
BULK INSERTerfordertADMINISTER BULK OPERATIONSoderINSERTplusOPENROWSET(BULK ...)-Berechtigung für die Zieltabelle, währendADMINISTER BULK OPERATIONSADMINISTER DATABASE BULK OPERATIONSoderADMINISTER DATABASE BULK OPERATIONSerfordert. -
BULK INSERTunterstützt minimale Protokollierung unter dem einfachen oder dem massenprotokollierten Wiederherstellungsmodell mitTABLOCK.OPENROWSET(BULK ...)Unterstützt minimales Loggen, wenn es mitINSERT ... SELECTundTABLOCKverwendet 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, daBULK INSERTdiese Formate nicht unterstützt. - Verwenden Sie
OPENROWSET(BULK ...), um eine ganze Datei als einzelnen LOB-Wert mitSINGLE_BLOB,SINGLE_CLOBoderSINGLE_NCLOBzu 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:
- Der Artikel Verwenden von BULK INSERT oder OPENROWSET(BULK...) zum Importieren von Daten in SQL Server bietet eine detaillierte Schritt-für-Schritt-Anleitung einschließlich Sicherheitsaspekten.
-
Der Artikel "Bulk Import and Export of Data" (SQL Server) bietet einen Überblick über alle Massendatenbewegungsmethoden, einschließlich bcp,
BULK INSERT, undOPENROWSET. - Der BULK INSERT Artikel (Transact-SQL) liefert die vollständige T-SQL-Referenz für
BULK INSERT. - Der Artikel OPENROWSET BULK (Transact-SQL) liefert die vollständige T-SQL-Referenz für
OPENROWSET(BULK ...). - Der Artikel "Beispiele für Massenzugriff auf Daten in Azure Blob Storage bietet nebeneinanderfolgende Beispiele, die beide Methoden mit Azure Storage verwenden.
- Der Artikel Bulk import von großen Objektdaten mit OPENROWSET Bulk Rowset Provider (SQL Server) bietet
SINGLE_BLOB,SINGLE_CLOB, undSINGLE_NCLOBBeispiele. - Der Artikel „Verwenden einer Formatdatei zum Massenimport von Daten (SQL Server)“ erläutert die Verwendung einer Formatdatei für beide Methoden.
- Für Hinweise zur Erhaltung von Nulls oder Anwendung von Standardwerten während des Massenimports siehe Nulls oder Standardwerte während des Massenimports (SQL Server) speichern.
- Für Hinweise zur Erhaltung von Identitätswerten während des Massenimports siehe Speichern von Identitätswerten beim Massenimport von Daten (SQL Server).
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 |