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 höhere Versionen
von Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics Analytics
Platform System (PDW)
SQL Analytics Endpoint in Microsoft Fabric
Warehouse in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric SQL-Datenbank in Microsoft Fabric
Erstellt eine externe Datenquelle zum Abfragen externer Daten, die für PolyBase- und Datenvirtualisierungsfeatures verwendet werden.
Dieser Artikel stellt die Syntax, Argumente, Anweisungen, Berechtigungen und Beispiele für das SQL-Produkt Ihrer Wahl bereit.
Auswählen eines Produkts
Wählen Sie in der folgenden Zeile den Namen des Produkts aus, an dem Sie interessiert sind. Dann werden nur Informationen zu diesem Produkt angezeigt.
* SQL Server *
Übersicht: SQL Server 2016
Gilt für: SQL Server 2016 (13.x)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung und Datenlast mithilfe von PolyBase in SQL Server
- Massenladevorgänge mit
BULK INSERToderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen.
Informationen zum Anzeigen der Features von SQL Server 2019 (15.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Transact-SQL-Syntaxkonventionen
Syntax für SQL Server 2016
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL Server eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Unterstützte Standorte nach Produkt/Dienst | Authentifizierung |
|---|---|---|---|---|
| Cloudera CDH oder Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) bis SQL Server 2019 (15.x) | Anonyme oder grundlegende Authentifizierung |
| Azure Storage-Konto (V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Seit SQL Server 2016 (13.x) Hierarchischer Namespace wird nicht unterstützt |
Azure Storage-Kontoschlüssel |
Speicherortpfad:
-
<Namenode>: Der Name des Computers, der Namensdienst-URI oder die IP-Adresse vonNamenodeim Hadoop-Cluster. PolyBase muss DNS-Namen auflösen, die vom Hadoop-Cluster verwendet werden. -
port= Der Port, an dem die externe Datenquelle lauscht. In Hadoop verwendet der Port den Konfigurationsparameterfs.defaultFS. Der Standardwert ist 8020. -
<container>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource -
<server_name>= Hostname. -
<instance_name>= Der Name der von SQL Server benannten Instanz. Wird verwendet, wenn Sie den SQL Server-Browserdienst auf der Zielinstanz ausführen.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die SQL Server-Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Verwenden Sie beim Abfragen von Hadoop für alle Tabellen die gleiche externe Datenquelle, um eine konsistente Abfragesemantik zu ermöglichen.
-
wasbsist optional, wird jedoch in SQL Server 2016 (13.x) für den Zugriff auf Azure Storage-Konten empfohlen, da Daten über eine sichere TLS-/SSL-Verbindung gesendet werden. - Für erfolgreiche PolyBase-Abfragen während eines Hadoop-
Namenode-Failovers sollten Sie in Betracht ziehen, eine virtuelle IP-Adresse für denNamenodedes Hadoop-Clusters zu verwenden. Führen Sie in diesem Beispiel ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
CREDENTIAL ist nur erforderlich, wenn die Daten gesichert wurden.
CREDENTIAL ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
TYP = * [ HADOOP ] *
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. In SQL Server 2016 ist dieser Parameter immer erforderlich und sollte nur als HADOOPangegeben werden. Unterstützt Verbindungen mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto. Das Verhalten dieses Parameters unterscheidet sich in späteren Versionen von SQL Server.
Ein Beispiel für das Laden von TYPE = HADOOP Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der wasb://-Schnittstelle
RESOURCE_MANAGER_LOCATION = *'ResourceManager_URI[:p ort]'
Konfigurieren Sie diesen optionalen Wert nur, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen. Eine vollständige Liste der unterstützten Hadoop-Versionen finden Sie unter PolyBase-Konnektivitätskonfiguration.
Wenn RESOURCE_MANAGER_LOCATION definiert ist, trifft der Abfrageoptimierer zur Verbesserung der Leistung eine kostenorientierte Entscheidung. Ein MapReduce-Auftrag kann zum Übertragen der Berechnung an Hadoop verwendet werden. Durch die Angabe von RESOURCE_MANAGER_LOCATION kann die Menge der zwischen Hadoop und SQL Server transferierten Daten erheblich reduziert werden, was wiederum zu einer verbesserten Abfrageleistung führen kann.
Wenn der Ressourcen-Manager nicht angegeben ist, wird die Weitergabe der Berechnung an Hadoop für PolyBase-Abfragen deaktiviert. Erstellen einer externen Datenquelle zum Verweisen auf Hadoop mit aktivierter Weitergabe stellt ein konkretes Beispiel und weitere Anleitungen bereit.
Der RESOURCE_MANAGER_LOCATION Wert wird beim Erstellen der externen Datenquelle nicht überprüft. Das Eingeben eines falschen Werts kann zu Einem Abfragefehler bei der Ausführung führen, wenn ein Pushdown versucht wird, da der angegebene Wert nicht aufgelöst werden kann.
Damit PolyBase ordnungsgemäß mit einer externen Hadoop-Datenquelle funktioniert, müssen die Ports für die folgenden Hadoop-Clusterkomponenten geöffnet sein:
- HDFS-Ports
- NameNode
- Datanode
- Ressourcenmanager
- Auftragsübermittlung
- Auftragsverlauf
Wenn kein Port angegeben ist, wird der Standardwert mithilfe der aktuellen Einstellung für die Konfiguration von „Hadoop Connectivity“ ausgewählt.
| Hadoop-Konnektivität | Standardport des Ressourcen-Managers |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
Die folgende Tabelle zeigt die Standardports für diese Komponenten. Es gibt Hadoop-Versionsabhängigkeiten sowie die Möglichkeit einer benutzerdefinierten Konfiguration, die die Standardportzuweisung nicht verwendet.
| Hadoop-Clusterkomponente | Standardport |
|---|---|
| NameNode | 8020 |
| DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
| DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
| Ressourcen-Manager-Auftragsübermittlung (Hortonworks 1.3) | 50300 |
| Ressourcen-Manager-Auftragsübermittlung (Cloudera 4.3) | 8021 |
| Resource Manager Job Submission (Hortonworks 2.0 unter Windows, Cloudera 5.x unter Linux) | 8032 |
| Resource Manager Job Submission (Hortonworks 2.x, 3.0 unter Linux, Hortonworks 2.1-3 unter Windows) | 8050 |
| Ressourcen-Manager-Auftragsverlauf | 10020 |
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in SQL Server.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
Ein. Erstellen einer externen Datenquelle, um auf Hadoop zu verweisen
Geben Sie den Computernamen oder die IP-Adresse von Hadoop-Namenode und des Ports an, um eine externe Datenquelle zu erstellen, die auf Ihre Hortonworks HDP- oder Cloudera CDH-Hadoop-Cluster verweist.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Erstellen einer externen Datenquelle, um mit der aktivierten Weitergabe auf Hadoop zu verweisen
Geben Sie die Option RESOURCE_MANAGER_LOCATION an, um die Berechnung für PolyBase-Abfragen an Hadoop weiterzugeben. Nach der Aktivierung trifft PolyBase eine kostenorientierte Entscheidung, um zu bestimmen, ob die Abfrageberechnung an Hadoop weitergegeben werden soll.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
C. Erstellen einer externen Datenquelle, um auf Kerberos-gesicherte Hadoop-Software zu verweisen
Überprüfen Sie den Wert der hadoop.security.authentication-Eigenschaft in der Datei „Hadoop-core-site.xml“, um zu überprüfen, ob der Hadoop-Cluster durch Kerberos geschützt wird. Um auf ein Kerberos-gesichertes Hadoop-Cluster zu verweisen, müssen Sie datenbankweit gültige Anmeldeinformationen angeben, die Ihren Kerberos-Benutzernamen und Ihr Kennwort enthalten. Der Hauptschlüssel der Datenbank wird verwendet, um datenbankspezifische Anmeldeinformationen zu verschlüsseln.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D: Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“
In diesem Beispiel ist die externe Datenquelle ein Azure Storage-Konto (V2) namens logs. Der Lagerbehälter heißt daily. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden beim Zugriff auf Daten über die wasb:// Schnittstelle nicht unterstützt.
In diesem Beispiel wird gezeigt, wie Sie die datenbankweit gültigen Anmeldeinformationen für die Authentifizierung bei einem Azure Storage-Konto (V2) erstellen. Geben Sie den Azure Storage-Kontoschlüssel im Anmeldeinformationsgeheimnis der Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird. Beim Herstellen einer Verbindung mit dem Azure Storage über wasb oder wasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
In SQL Server 2016 (13.x) sollte TYPE auch dann auf HADOOP festgelegt werden, wenn auf Azure Storage zugegriffen wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Verwandte Inhalte
Übersicht: SQL Server 2017
Gilt für: SQL Server 2017 (14.x)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung und Datenlast mithilfe von PolyBase in SQL Server
- Massenladevorgänge mit
BULK INSERToderOPENROWSET
Hinweis
Diese Syntax variiert abhängig von der SQL Server-Version für Linux. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen.
Informationen zum Anzeigen der Features von SQL Server 2019 (15.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen.
Informationen zum Anzeigen der Features von SQL Server 2019 (15.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Transact-SQL-Syntaxkonventionen
Syntax für SQL Server 2017
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL Server eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Unterstützte Standorte nach Produkt/Dienst | Authentifizierung |
|---|---|---|---|---|
| Cloudera CDH oder Hortonworks HDP | hdfs |
<Namenode>[:port] |
Nur SQL Server 2016 (13.x) bis SQL Server 2019 (15.x) | Anonyme oder grundlegende Authentifizierung |
| Azure Storage-Konto (V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Seit SQL Server 2016 (13.x) Hierarchischer Namespace wird nicht unterstützt |
Azure Storage-Kontoschlüssel |
| Massenvorgänge | https |
<storage_account>.blob.core.windows.net/<container> |
Ab SQL Server 2017 (14.x) | Shared Access Signature (SAS) |
Speicherortpfad:
-
<Namenode>= Der Name des Computers, der Namensdienst-URI oder die IP-Adresse vonNamenodeim Hadoop-Cluster. PolyBase muss DNS-Namen auflösen, die vom Hadoop-Cluster verwendet werden. -
port= Der Port, an dem die externe Datenquelle lauscht. In Hadoop verwendet der Port den Konfigurationsparameterfs.defaultFS. Der Standardwert ist 8020. -
<container>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource -
<server_name>= Hostname. -
<instance_name>= Der Name der von SQL Server benannten Instanz. Wird verwendet, wenn Sie den SQL Server-Browserdienst auf der Zielinstanz ausführen.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die SQL Server-Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Verwenden Sie beim Abfragen von Hadoop für alle Tabellen die gleiche externe Datenquelle, um eine konsistente Abfragesemantik zu ermöglichen.
- Geben Sie
Driver={<Name of Driver>}an, wenn Sie sich überODBCverbinden. -
wasbsist optional, wird jedoch in SQL Server 2017 (14.x) für den Zugriff auf Azure Storage-Konten empfohlen, da Daten über eine sichere TLS-/SSL-Verbindung gesendet werden. - Für erfolgreiche PolyBase-Abfragen während eines Hadoop-
Namenode-Failovers sollten Sie in Betracht ziehen, eine virtuelle IP-Adresse für denNamenodedes Hadoop-Clusters zu verwenden. Führen Sie in diesem Beispiel ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich. - Wenn
TYPE=BLOB_STORAGE, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATUREals Identität erstellt werden. -
TYPE=BLOB_STORAGEist nur für Massenvorgänge zulässig; Sie können keine externen Tabellen für eine externe Datenquelle mitTYPE=BLOB_STORAGE. - Beim Herstellen einer Verbindung mit dem Azure Storage über
wasboderwasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS). - Wenn
TYPE=HADOOP, müssen die Anmeldeinformationen mithilfe des Speicherkontoschlüssels alsSECRETerstellt werden.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Sie können ein SAS-Token erstellen, indem Sie zum Azure-Portal navigieren –>< Your_Storage_Account> –> Gemeinsame Zugriffssignatur – Berechtigungen konfigurieren –>> SAS- und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
?aus. - Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten
Ein Beispiel für die Verwendung von CREDENTIAL mit SHARED ACCESS SIGNATURE und TYPE = BLOB_STORAGE finden Sie unter Erstellen einer externen Datenquelle für Massenvorgänge und Abrufen von Daten aus Azure Storage in SQL-Datenbank.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
TYP = * [ HADOOP | BLOB_STORAGE ] *
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich und sollte nur festgelegt werden, wenn eine Verbindung mit Cloudera CDH, Hortonworks HDP, einem Azure Storage-Konto oder einer Azure Data Lake Storage Gen2-Instanz hergestellt wird.
- Verwenden Sie
HADOOP, wenn es sich bei der externen Datenquelle um Cloudera CDH, Hortonworks HDP, ein Azure Storage-Konto oder eine Azure Data Lake Storage Gen2-Instanz handelt. - Verwenden
BLOB_STORAGESie beim Ausführen von Massenoperationen aus dem Azure Storage-Konto mit BULK INSERT oder OPENROWSET BULK. Eingeführt in SQL Server 2017 (14.x) Verwenden Sie diese AnwendungHADOOP, wenn sie für Azure Storage vorgesehenCREATE EXTERNAL TABLEist.
Hinweis
TYPE sollte auch dann auf HADOOP festgelegt werden, wenn auf Azure Storage zugegriffen wird.
Ein Beispiel für das Laden von TYPE = HADOOP Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der wasb://-Schnittstelle
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Konfigurieren Sie diesen optionalen Wert nur, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen. Eine vollständige Liste der unterstützten Hadoop-Versionen finden Sie unter PolyBase-Konnektivitätskonfiguration.
Wenn RESOURCE_MANAGER_LOCATION definiert ist, trifft der Abfrageoptimierer zur Verbesserung der Leistung eine kostenorientierte Entscheidung. Ein MapReduce-Auftrag kann zum Übertragen der Berechnung an Hadoop verwendet werden. Durch die Angabe von RESOURCE_MANAGER_LOCATION kann die Menge der zwischen Hadoop und SQL Server transferierten Daten erheblich reduziert werden, was wiederum zu einer verbesserten Abfrageleistung führen kann.
Wenn der Ressourcen-Manager nicht angegeben ist, wird die Weitergabe der Berechnung an Hadoop für PolyBase-Abfragen deaktiviert. Erstellen einer externen Datenquelle zum Verweisen auf Hadoop mit aktivierter Weitergabe stellt ein konkretes Beispiel und weitere Anleitungen bereit.
Der RESOURCE_MANAGER_LOCATION Wert wird beim Erstellen der externen Datenquelle nicht überprüft. Das Eingeben eines falschen Werts kann zu Einem Abfragefehler bei der Ausführung führen, wenn ein Pushdown versucht wird, da der angegebene Wert nicht aufgelöst werden kann.
Damit PolyBase ordnungsgemäß mit einer externen Hadoop-Datenquelle funktioniert, müssen die Ports für die folgenden Hadoop-Clusterkomponenten geöffnet sein:
- HDFS-Ports
- NameNode
- Datanode
- Ressourcenmanager
- Auftragsübermittlung
- Auftragsverlauf
Wenn kein Port angegeben ist, wird der Standardwert mithilfe der aktuellen Einstellung für die Konfiguration von „Hadoop Connectivity“ ausgewählt.
| Hadoop-Konnektivität | Standardport des Ressourcen-Managers |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
Die folgende Tabelle zeigt die Standardports für diese Komponenten. Es gibt Hadoop-Versionsabhängigkeiten sowie die Möglichkeit einer benutzerdefinierten Konfiguration, die die Standardportzuweisung nicht verwendet.
| Hadoop-Clusterkomponente | Standardport |
|---|---|
| NameNode | 8020 |
| DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
| DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
| Ressourcen-Manager-Auftragsübermittlung (Hortonworks 1.3) | 50300 |
| Ressourcen-Manager-Auftragsübermittlung (Cloudera 4.3) | 8021 |
| Resource Manager Job Submission (Hortonworks 2.0 unter Windows, Cloudera 5.x unter Linux) | 8032 |
| Resource Manager Job Submission (Hortonworks 2.x, 3.0 unter Linux, Hortonworks 2.1-3 unter Windows) | 8050 |
| Ressourcen-Manager-Auftragsverlauf | 10020 |
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in SQL Server.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Ein SAS-Token mit Typ HADOOP wird nicht unterstützt. Es wird nur mit Typ BLOB_STORAGE unterstützt, wenn stattdessen ein Speicherkonto-Zugriffsschlüssel verwendet wird. Beim Erstellen einer externen Datenquelle mit dem Typ HADOOP und SAS-Anmeldeinformationen tritt folgender Fehler auf:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
Ein. Erstellen einer externen Datenquelle, um auf Hadoop zu verweisen
Geben Sie den Computernamen oder die IP-Adresse von Hadoop-Namenode und des Ports an, um eine externe Datenquelle zu erstellen, die auf Ihre Hortonworks HDP- oder Cloudera CDH-Hadoop-Cluster verweist.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Erstellen einer externen Datenquelle, um mit der aktivierten Weitergabe auf Hadoop zu verweisen
Geben Sie die Option RESOURCE_MANAGER_LOCATION an, um die Berechnung für PolyBase-Abfragen an Hadoop weiterzugeben. Nach der Aktivierung trifft PolyBase eine kostenorientierte Entscheidung, um zu bestimmen, ob die Abfrageberechnung an Hadoop weitergegeben werden soll.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
C. Erstellen einer externen Datenquelle, um auf Kerberos-gesicherte Hadoop-Software zu verweisen
Überprüfen Sie den Wert der hadoop.security.authentication-Eigenschaft in der Datei „Hadoop-core-site.xml“, um zu überprüfen, ob der Hadoop-Cluster durch Kerberos geschützt wird. Um auf ein Kerberos-gesichertes Hadoop-Cluster zu verweisen, müssen Sie datenbankweit gültige Anmeldeinformationen angeben, die Ihren Kerberos-Benutzernamen und Ihr Kennwort enthalten. Der Hauptschlüssel der Datenbank wird verwendet, um datenbankspezifische Anmeldeinformationen zu verschlüsseln.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D: Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“
In diesem Beispiel ist die externe Datenquelle ein Azure Storage-Konto (V2) namens logs. Der Lagerbehälter heißt daily. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden beim Zugriff auf Daten über die wasb:// Schnittstelle nicht unterstützt. Beim Herstellen einer Verbindung mit dem Azure Storage über wasb oder wasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
In diesem Beispiel wird gezeigt, wie Sie die datenbankweit gültigen Anmeldeinformationen für die Authentifizierung bei einem Azure Storage-Konto (V2) erstellen. Geben Sie den Azure Storage-Kontoschlüssel im Anmeldeinformationsgeheimnis der Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Beispiele: Massenvorgänge
Wichtig
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
E. Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen
Gilt für: SQL Server 2017 (14.x) und höhere Versionen.
Verwenden Sie die folgende Datenquelle für Massenvorgänge mit BULK INSERT oder OPENROWSET BULK. Die Anmeldeinformationen müssen SHARED ACCESS SIGNATURE als Identität festgelegt haben, dürfen kein führendes ? im SAS-Token aufweisen, müssen mindestens Leseberechtigung für die zu ladende Datei besitzen (z. B. srt=o&sp=r), und ihr Ablaufdatum muss gültig sein (alle Datumsangaben sind in UTC-Zeit). Weitere Informationen zu SAS finden Sie unter Verwenden von Shared Access Signatures (SAS).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = -- Remove ? from the beginning of the SAS token'<azure_storage_account_key>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices
);
Sie finden dieses Beispiel unter BULK INSERT.
Verwandte Inhalte
- EXTERNE DATENQUELLE ÄNDERN (Transact-SQL)
- DATENBANK-SCOPED CREDENTIAL ERSTELLEN (Transact-SQL)
- EXTERNES DATEIFORMAT ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ERSTELLEN (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- PolyBase-Konnektivitätskonfiguration (Transact-SQL)
Übersicht: SQL Server 2019
Gilt für: SQL Server 2019 (15.x)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung und Datenlast mithilfe von PolyBase in SQL Server
- Massenladevorgänge mit
BULK INSERToderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Transact-SQL-Syntaxkonventionen
Syntax für SQL Server 2019
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' ]
)
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL Server eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Unterstützte Standorte nach Produkt/Dienst | Authentifizierung |
|---|---|---|---|---|
| Cloudera CDH oder Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) bis SQL Server 2019 (15.x) | Anonyme oder grundlegende Authentifizierung |
| Azure Storage-Konto (V2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Seit SQL Server 2016 (13.x) Hierarchischer Namespace wird nicht unterstützt |
Azure Storage-Kontoschlüssel |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Ab SQL Server 2019 (15.x) | Nur SQL-Authentifizierung |
| Orakel | oracle |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Teradata | teradata |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| MongoDB oder Cosmos DB-API für MongoDB | mongodb |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Generisches ODBC | odbc |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) – nur Windows | Nur Standardauthentifizierung |
| Massenvorgänge | https |
<storage_account>.blob.core.windows.net/<container> |
Ab SQL Server 2017 (14.x) | Shared Access Signature (SAS) |
| Azure Data Lake Storage Gen2 | abfs[s] |
abfss://<container>@<storage_account>.dfs.core.windows.net |
Ab SQL Server 2019 (15.x) CU11 | Speicherzugriffsschlüssel |
| Datenpool in Big Data-Clustern von SQL Server | sqldatapool |
sqldatapool://controller-svc/default |
Nur in Big Data-Clustern von SQL Server 2019 | Nur Standardauthentifizierung |
| Speicherpool in Big Data-Clustern von SQL Server | sqlhdfs |
sqlhdfs://controller-svc/default |
Nur in Big Data-Clustern von SQL Server 2019 | Nur Standardauthentifizierung |
Speicherortpfad:
-
<Namenode>: Der Name des Computers, der Namensdienst-URI oder die IP-Adresse vonNamenodeim Hadoop-Cluster. PolyBase muss DNS-Namen auflösen, die vom Hadoop-Cluster verwendet werden. -
port= Der Port, an dem die externe Datenquelle lauscht. In Hadoop verwendet der Port den Konfigurationsparameterfs.defaultFS. Der Standardwert ist 8020. -
<container>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource -
<server_name>= Hostname. -
<instance_name>= Der Name der von SQL Server benannten Instanz. Wird verwendet, wenn Sie den SQL Server-Browserdienst auf der Zielinstanz ausführen.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die SQL Server-Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Verwenden Sie beim Abfragen von Hadoop für alle Tabellen die gleiche externe Datenquelle, um eine konsistente Abfragesemantik zu ermöglichen.
- Mit dem Connector
sqlserverkönnen Sie SQL Server 2019 (15.x) mit einer anderen SQL Server-Instanz oder mit Azure SQL-Datenbank verbinden. - Geben Sie
Driver={<Name of Driver>}an, wenn Sie sich überODBCverbinden. - Die Verwendung von
wasbsoderabfssist optional, wird jedoch in SQL Server 2019 (15.x) für den Zugriff auf Azure Storage-Konten empfohlen, da Daten über eine sichere TLS-/SSL-Verbindung gesendet werden. - Für den Zugriff auf Azure Storage-Konten werden die APIs
abfsoderabfssab SQL Server 2019 (15.x) CU11 unterstützt. Weitere Informationen finden Sie unter Azure Blob File System (ABFS). - Die Option für hierarchische Namespaces für Azure Storage-Konten (V2) mit
abfs[s]wird ab SQL Server 2019 (15.x) CU11 über Azure Data Lake Storage Gen2 unterstützt. Die Option für hierarchische Namespaces wird andernfalls nicht unterstützt und sollte deaktiviert bleiben. - Für erfolgreiche PolyBase-Abfragen während eines Hadoop-
Namenode-Failovers sollten Sie in Betracht ziehen, eine virtuelle IP-Adresse für denNamenodedes Hadoop-Clusters zu verwenden. Führen Sie in diesem Beispiel ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen. - Die Typen
sqlhdfsundsqldatapoolwerden zum Herstellen einer Verbindung zwischen der Masterinstanz und dem Speicherpool eines Big Data-Clusters unterstützt. Verwenden Siehdfsfür Cloudera CDH oder Hortonworks HDP. Weitere Informationen zur Verwendung vonsqlhdfszum Abfragen von Speicherpools in Big Data-Clustern von SQL Server finden Sie unter Abfragen von HDFS in einem Big Data-Cluster von SQL Server 2019. - Sql Server-Unterstützung für HDFS Cloudera (CDP) und Hortonworks (HDP) externe Datenquellen wurden eingestellt und sind nicht in SQL Server 2022 (16.x) und höheren Versionen enthalten. Weitere Informationen finden Sie unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.
CONNECTION_OPTIONS = key_value_pair
Für SQL Server 2019 (15.x) und höhere Versionen angegeben. Gibt zusätzliche Optionen bei einer Verbindung über ODBC mit einer externen Datenquelle an. Wenn Sie mehrere Verbindungsoptionen verwenden möchten, trennen Sie diese durch ein Semikolon.
Gilt für generische ODBC-Verbindungen sowie für integrierte ODBC-Connectors für SQL Server, Oracle, Teradata, MongoDB und die Azure Cosmos DB-API für MongoDB.
key_value_pair ist das Schlüsselwort sowie der Wert für eine bestimmte Verbindungsoption. Die verfügbaren Schlüsselwörter und Werte sind vom Typ der externen Datenquelle abhängig. Es ist mindestens der Name des Treibers erforderlich. Allerdings sind auch Optionen wie APP='<your_application_name>' oder ApplicationIntent= ReadOnly|ReadWrite bei der Problembehandlung nützlich.
Mögliche Schlüsselwertpaare sind spezifisch für den Anbieter für den externen Datenquellenanbieter. Weitere Informationen zu jedem Anbietern finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
SQL Server 2019 (15.x) Kumulatives Update 19 und höhere Versionen bieten zusätzliche Schlüsselwörter zur Unterstützung von Oracle TNS-Dateien:
- Das Schlüsselwort
TNSNamesFilegibt den Dateipfad zur Dateitnsnames.oraan, die sich auf dem Oracle-Server befindet. - Das Schlüsselwort
ServerNamegibt den Alias an, der in der Dateitnsnames.oraverwendet wird, um den Hostnamen und den Port zu ersetzen.
Pushdown = EIN | AUS
Nur für SQL Server 2019 (15.x) angegeben. Gibt an, ob die Berechnung an die externe Datenquelle weitergegeben werden kann. Standardmäßig ist sie aktiviert .
PUSHDOWN wird beim Herstellen einer Verbindung mit SQL Server, Oracle, Teradata, MongoDB, der Azure Cosmos DB-API für MongoDB oder ODBC auf der Ebene der externen Datenquelle unterstützt.
Das Aktivieren oder Deaktivieren von Pushdown auf Abfrageebene erfolgt über den EXTERNALPUSHDOWN-Hinweis.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich. - Wenn
TYPE=BLOB_STORAGE, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATUREals Identität erstellt werden. -
TYPE=BLOB_STORAGEist nur für Massenvorgänge zulässig; Sie können keine externen Tabellen für eine externe Datenquelle mitTYPE=BLOB_STORAGE.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Sie können ein SAS-Token erstellen, indem Sie zum Azure-Portal navigieren –>< Your_Storage_Account> –> Gemeinsame Zugriffssignatur – Berechtigungen konfigurieren –>> SAS- und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
?aus. - Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten
Ein Beispiel für die Verwendung von CREDENTIAL mit SHARED ACCESS SIGNATURE und TYPE = BLOB_STORAGE finden Sie unter Erstellen einer externen Datenquelle für Massenvorgänge und Abrufen von Daten aus Azure Storage in SQL-Datenbank.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
TYP = * [ HADOOP | BLOB_STORAGE ] *
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich und sollte nur festgelegt werden, wenn eine Verbindung mit Cloudera CDH, Hortonworks HDP, einem Azure Storage-Konto oder einer Azure Data Lake Storage Gen2-Instanz hergestellt wird.
- Geben Sie in SQL Server 2019 (15.x) nicht TYPE an, es sei denn, eine Verbindung mit Cloudera CDH, Hortonworks HDP, einem Azure Storage-Konto.
- Verwenden Sie
HADOOP, wenn es sich bei der externen Datenquelle um Cloudera CDH, Hortonworks HDP, ein Azure Storage-Konto oder eine Azure Data Lake Storage Gen2-Instanz handelt. - Wird
BLOB_STORAGEbeim Ausführen von Massenvorgängen aus einem Azure Storage-Konto mit BULK INSERT oder OPENROWSET BULK mit SQL Server 2017 (14.x) verwendet. Verwenden SieHADOOP, wenn Sie CREATE EXTERNAL TABLE für Azure Storage verwenden möchten. - Sql Server-Unterstützung für HDFS Cloudera (CDP) und Hortonworks (HDP) externe Datenquellen wurden eingestellt und sind nicht in SQL Server 2022 (16.x) und höheren Versionen enthalten. Weitere Informationen finden Sie unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.
Ein Beispiel für das Laden von TYPE = HADOOP Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der wasb://-Schnittstelle.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Geben Sie in SQL Server 2019 (15.x) nicht RESOURCE_MANAGER_LOCATION an, es sei denn, eine Verbindung mit Cloudera CDH, Hortonworks HDP, einem Azure Storage-Konto.
Konfigurieren Sie diesen optionalen Wert nur, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen. Eine vollständige Liste der unterstützten Hadoop-Versionen finden Sie unter PolyBase-Konnektivitätskonfiguration.
Wenn RESOURCE_MANAGER_LOCATION definiert ist, trifft der Abfrageoptimierer zur Verbesserung der Leistung eine kostenorientierte Entscheidung. Ein MapReduce-Auftrag kann zum Übertragen der Berechnung an Hadoop verwendet werden. Durch die Angabe von RESOURCE_MANAGER_LOCATION kann die Menge der zwischen Hadoop und SQL Server transferierten Daten erheblich reduziert werden, was wiederum zu einer verbesserten Abfrageleistung führen kann.
Wenn der Ressourcen-Manager nicht angegeben ist, wird die Weitergabe der Berechnung an Hadoop für PolyBase-Abfragen deaktiviert. Erstellen einer externen Datenquelle zum Verweisen auf Hadoop mit aktivierter Weitergabe stellt ein konkretes Beispiel und weitere Anleitungen bereit.
Der RESOURCE_MANAGER_LOCATION Wert wird beim Erstellen der externen Datenquelle nicht überprüft. Das Eingeben eines falschen Werts kann zu Einem Abfragefehler bei der Ausführung führen, wenn ein Pushdown versucht wird, da der angegebene Wert nicht aufgelöst werden kann.
Damit PolyBase ordnungsgemäß mit einer externen Hadoop-Datenquelle funktioniert, müssen die Ports für die folgenden Hadoop-Clusterkomponenten geöffnet sein:
- HDFS-Ports
- NameNode
- Datanode
- Ressourcenmanager
- Auftragsübermittlung
- Auftragsverlauf
Wenn kein Port angegeben ist, wird der Standardwert mithilfe der aktuellen Einstellung für die Konfiguration von „Hadoop Connectivity“ ausgewählt.
| Hadoop-Konnektivität | Standardport des Ressourcen-Managers |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
Die folgende Tabelle zeigt die Standardports für diese Komponenten. Es gibt Hadoop-Versionsabhängigkeiten sowie die Möglichkeit einer benutzerdefinierten Konfiguration, die die Standardportzuweisung nicht verwendet.
| Hadoop-Clusterkomponente | Standardport |
|---|---|
| NameNode | 8020 |
| DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
| DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
| Ressourcen-Manager-Auftragsübermittlung (Hortonworks 1.3) | 50300 |
| Ressourcen-Manager-Auftragsübermittlung (Cloudera 4.3) | 8021 |
| Resource Manager Job Submission (Hortonworks 2.0 unter Windows, Cloudera 5.x unter Linux) | 8032 |
| Resource Manager Job Submission (Hortonworks 2.x, 3.0 unter Linux, Hortonworks 2.1-3 unter Windows) | 8050 |
| Ressourcen-Manager-Auftragsverlauf | 10020 |
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in SQL Server.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Wenn Sie eine Verbindung mit dem Speicher- oder Datenpool in einem Big Data-Cluster in SQL Server 2019 herstellen, werden die Anmeldeinformationen des Benutzers an das Back-End-System übergeben. Erstellen Sie Anmeldenamen im Datenpool selbst, um die Pass-Through-Authentifizierung zu aktivieren.
Ein SAS-Token mit Typ HADOOP wird nicht unterstützt. Es wird nur mit Typ BLOB_STORAGE unterstützt, wenn stattdessen ein Speicherkonto-Zugriffsschlüssel verwendet wird. Beim Erstellen einer externen Datenquelle mit dem Typ HADOOP und SAS-Anmeldeinformationen tritt folgender Fehler auf:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
Ein. Erstellen einer externe Datenquelle in SQL Server 2019 für den Verweis auf Oracle
Stellen Sie sicher, dass Sie über datenbankweit gültige Anmeldeinformationen verfügen, um eine externe Datenquelle zu erstellen, die auf Oracle verweist. Optional können Sie auch Pushdown-Berechnungen für diese Datenquelle aktivieren oder deaktivieren.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Optional kann die externe Datenquelle für Oracle die Proxyauthentifizierung verwenden, um eine differenzierte Zugriffssteuerung bereitzustellen. Ein Proxybenutzer kann so konfiguriert werden, dass er im Vergleich zu dem Benutzer, dessen Identität angenommen wird, eingeschränkten Zugriff hat.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Alternativ können Sie die TNS-Authentifizierung verwenden.
Ab SQL Server 2019 (15.x), kumulatives Update 19, unterstützt CREATE EXTERNAL DATA SOURCE jetzt die Verwendung von TNS-Dateien beim Herstellen einer Verbindung mit Oracle.
Der CONNECTION_OPTIONS-Parameter wurde erweitert und verwendet jetzt TNSNamesFile und ServerName als Variablen, um die Datei tnsnames.ora zu durchsuchen und eine Verbindung mit dem Server herzustellen.
Im folgenden Beispiel sucht SQL Server während der Laufzeit den von tnsnames.ora angegebenen Dateispeicherort TNSNamesFile und den von ServerName angegebenen Host- und Netzwerkport.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
Weitere Beispiele für andere Datenquellen wie MongoDB finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in MongoDB.
B. Erstellen einer externen Datenquelle, um auf Hadoop zu verweisen
Geben Sie den Computernamen oder die IP-Adresse von Hadoop-Namenode und des Ports an, um eine externe Datenquelle zu erstellen, die auf Ihre Hortonworks HDP- oder Cloudera CDH-Hadoop-Cluster verweist.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
C. Erstellen einer externen Datenquelle, um mit der aktivierten Weitergabe auf Hadoop zu verweisen
Geben Sie die Option RESOURCE_MANAGER_LOCATION an, um die Berechnung für PolyBase-Abfragen an Hadoop weiterzugeben. Nach der Aktivierung trifft PolyBase eine kostenorientierte Entscheidung, um zu bestimmen, ob die Abfrageberechnung an Hadoop weitergegeben werden soll.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D: Erstellen einer externen Datenquelle, um auf Kerberos-gesicherte Hadoop-Software zu verweisen
Überprüfen Sie den Wert der hadoop.security.authentication-Eigenschaft in der Datei „Hadoop-core-site.xml“, um zu überprüfen, ob der Hadoop-Cluster durch Kerberos geschützt wird. Um auf ein Kerberos-gesichertes Hadoop-Cluster zu verweisen, müssen Sie datenbankweit gültige Anmeldeinformationen angeben, die Ihren Kerberos-Benutzernamen und Ihr Kennwort enthalten. Der Hauptschlüssel der Datenbank wird verwendet, um datenbankspezifische Anmeldeinformationen zu verschlüsseln.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
E. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“
In diesem Beispiel ist die externe Datenquelle ein Azure Storage-Konto (V2) namens logs. Der Lagerbehälter heißt daily. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden beim Zugriff auf Daten über die wasb:// Schnittstelle nicht unterstützt. Beim Herstellen einer Verbindung mit dem Azure Storage über wasb oder wasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
In diesem Beispiel wird gezeigt, wie Sie die datenbankweit gültigen Anmeldeinformationen für die Authentifizierung bei einem Azure Storage-Konto (V2) erstellen. Geben Sie den Azure Storage-Kontoschlüssel im Anmeldeinformationsgeheimnis der Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
F. Erstellen einer externen Datenquelle für einen Verweis auf eine benannte SQL Server-Instanz über die PolyBase-Konnektivität
Gilt für: SQL Server 2019 (15.x) und höher
Geben Sie mit CONNECTION_OPTIONS den Instanznamen an, wenn Sie eine externe Datenquelle erstellen, die auf eine benannte Instanz von SQL Server verweist.
Im folgenden Beispiel ist WINSQL2019 der Hostname und SQL2019 der Instanzname.
'Server=%s\SQL2019' ist das Schlüssel-Wert-Paar.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternativ können Sie einen Port verwenden, um eine Verbindung mit einer SQL Server-Standardinstanz herzustellen.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
G. Erstellen einer externen Datenquelle zum Verweisen auf ein lesbares sekundäres Replikat der Always On-Verfügbarkeitsgruppe
Gilt für: SQL Server 2019 (15.x) und höher
Um eine externe Datenquelle zu erstellen, die auf ein lesbares sekundäres Replikat von SQL Server verweist, verwenden Sie CONNECTION_OPTIONS, um ApplicationIntent=ReadOnly anzugeben. Außerdem müssen Sie entweder die Verfügbarkeitsdatenbank wie Database={dbname} in CONNECTION_OPTIONSfestlegen oder die Verfügbarkeitsdatenbank als Standarddatenbank für die Anmeldeinformationen für die Datenbankbereich festlegen. Dazu müssen Sie alle Verfügbarkeitsreplikate der Verfügbarkeitsgruppe verwenden.
Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Erstellen Sie als Nächstes die neue externe Datenquelle.
Unabhängig davon, ob Sie die Verfügbarkeitsdatenbank Database=dbname als Standarddatenbank für die Anmeldung in den Anmeldeinformationen für die Datenbank einbezogen CONNECTION_OPTIONS oder festlegen, müssen Sie den Datenbanknamen weiterhin über einen dreiteiligen Namen in der CREATE EXTERNAL TABLE-Anweisung innerhalb des LOCATION-Parameters angeben. Ein Beispiel finden Sie unter CREATE EXTERNAL TABLE.
Im folgenden Beispiel ist WINSQL2019AGL der Name des Verfügbarkeitsgruppenlisteners und dbname der Name der Datenbank, die das Ziel der CREATE EXTERNAL TABLE-Anweisung sein soll.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Sie können das Umleitungsverhalten der Verfügbarkeitsgruppe veranschaulichen, indem Sie „ApplicationIntent“ angeben und eine externe Tabelle in der Systemansicht sys.servers erstellen. Im folgenden Beispielskript werden zwei externe Datenquellen erstellt, und für jede wird eine externe Tabelle erstellt. Verwenden Sie die Ansichten, um zu testen, welcher Server auf die Verbindung reagiert. Ähnliche Ergebnisse können auch über die schreibgeschützte Routingfunktion erreicht werden. Weitere Informationen finden Sie unter Konfigurieren des schreibgeschützten Routings für eine Always On-Verfügbarkeitsgruppe.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Erstellen Sie innerhalb der Datenbank in der Verfügbarkeitsgruppe eine Ansicht, die sys.servers und den Namen der lokalen Instanz zurückgeben soll, wodurch Sie ermitteln können, welches Replikat auf die Abfrage reagiert. Weitere Informationen finden Sie unter sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Erstellen Sie dann eine externe Tabelle in der Quellinstanz:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
Beispiele: Massenvorgänge
Wichtig
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
H. Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen
Gilt für: SQL Server 2017 (14.x) SQL Server 2019 (15.x)
Verwenden Sie die folgende Datenquelle für Massenvorgänge mit BULK INSERT oder OPENROWSET BULK. Die Anmeldeinformationen müssen SHARED ACCESS SIGNATURE als Identität festgelegt haben, dürfen kein führendes ? im SAS-Token aufweisen, müssen mindestens Leseberechtigung für die zu ladende Datei besitzen (z. B. srt=o&sp=r), und ihr Ablaufdatum muss gültig sein (alle Datumsangaben sind in UTC-Zeit). Weitere Informationen zu SAS finden Sie unter Verwenden von Shared Access Signatures (SAS).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = -- Remove ? from the beginning of the SAS token'<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
TYPE = BLOB_STORAGE,
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices
);
Sie finden dieses Beispiel unter BULK INSERT.
Ich. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „abfs://“
Gilt für: SQL Server 2019 (15.x) CU11 und höher
In diesem Beispiel ist die externe Datenquelle ein Azure Data Lake Storage Gen2-Konto logs, das den Azure Blob Filesystem-Treiber (ABFS) verwendet. Der Lagerbehälter heißt daily. Die externe Datenquelle Azure Data Lake Storage Gen2 ist nur für die Datenübertragung vorgesehen, da das Prädikat-Pushdown nicht unterstützt wird.
In diesem Beispiel wird gezeigt, wie Sie die datenbankweit gültigen Anmeldeinformationen für die Authentifizierung bei einem Azure Data Lake Storage Gen2-Konto erstellen. Geben Sie den Azure Storage-Kontoschlüssel im Anmeldeinformationsgeheimnis der Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
J. Erstellen einer externen Datenquelle mit generischer ODBC zu PostgreSQL
Wie in vorherigen Beispielen erstellen Sie zunächst einen Hauptschlüssel für die Datenbank und datenbankbezogene Anmeldeinformation. Die datenbankbezogene Anmeldeinformation werden für die externe Datenquelle verwendet. In diesem Beispiel wird auch davon ausgegangen, dass ein generischer ODBC-Datenanbieter für PostgreSQL auf dem Server installiert ist.
In diesem Beispiel wird der generische ODBC-Datenanbieter verwendet, um mit dem Standardport des TCP 5432 eine Verbindung mit einem PostgreSQL-Datenbankserver im gleichen Netzwerk herzustellen, wobei der vollqualifizierte Domänenname des PostgreSQL-Servers POSTGRES1 lautet.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Verwandte Inhalte
- EXTERNE DATENQUELLE ÄNDERN (Transact-SQL)
- DATENBANK-SCOPED CREDENTIAL ERSTELLEN (Transact-SQL)
- EXTERNES DATEIFORMAT ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ERSTELLEN (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- PolyBase-Konnektivitätskonfiguration (Transact-SQL)
Übersicht: SQL Server 2022
Gilt für: SQL Server 2022 (16.x) und höhere Versionen
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung und Datenlast mithilfe von PolyBase in SQL Server
- Massenladevorgänge mit
BULK INSERToderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen. Dieser Inhalt gilt für SQL Server 2022 (16.x) und höhere Versionen.
Syntax für SQL Server 2022
Syntax für SQL Server 2022 und höhere Versionen
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL Server eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Unterstützte Standorte nach Produkt/Dienst | Authentifizierung |
|---|---|---|---|---|
| Azure Storage-Konto(V2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/oder abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Ab SQL Server 2022 (16.x) Hierarchischer Namespace wird unterstützt |
Shared Access Signature (SAS) |
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/oder adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Ab SQL Server 2022 (16.x) | Shared Access Signature (SAS) |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Ab SQL Server 2019 (15.x) | Nur SQL-Authentifizierung |
| Orakel | oracle |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Teradata | teradata |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| MongoDB oder Cosmos DB-API für MongoDB | mongodb |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Generisches ODBC | odbc |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) – nur Windows | Nur Standardauthentifizierung |
| Massenvorgänge | https |
<storage_account>.blob.core.windows.net/<container> |
Ab SQL Server 2017 (14.x) | Shared Access Signature (SAS) |
| S3-kompatibler Objektspeicher | s3 |
- S3-kompatibel: s3://<server_name>:<port>/- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>oder s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Ab SQL Server 2022 (16.x) | Einfach oder Pass-Through (STS) * |
* Muss eine Datenbank mit Anmeldeinformationen mit Gültigkeitsbereich sein, wobei die IDENTITÄT hartcodiert IDENTITY = 'S3 Access Key' ist und das ARGUMENT SECRET im Format = '<AccessKeyID>:<SecretKeyID>' vorhanden ist oder die Pass-Through-Autorisierung (PASS-Through, STS) verwendet. Weitere Information erhalten Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten im S3-kompatiblen Objektspeicher.
Speicherortpfad:
-
port= Der Port, an dem die externe Datenquelle lauscht. Optional in vielen Fällen, abhängig von der Netzwerkkonfiguration. -
<container_name>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource -
<server_name>= Hostname. -
<instance_name>= Der Name der von SQL Server benannten Instanz. Wird verwendet, wenn Sie den SQL Server-Browserdienst auf der Zielinstanz ausführen. -
<ip_address>:<port>= Nur für S3-kompatiblen Objektspeicher (ab SQL Server 2022 (16.x)): Der Endpunkt und der Port, der zum Herstellen einer Verbindung mit dem S3-kompatiblen Speicher verwendet wird. -
<bucket_name>= Nur für S3-kompatible Objektspeicher (ab SQL Server 2022 (16.x)), spezifisch für die Speicherplattform. -
<region>= Nur für S3-kompatible Objektspeicher (ab SQL Server 2022 (16.x)), spezifisch für die Speicherplattform. -
<folder>= Teil des Speicherpfads innerhalb der Speicher-URL.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die SQL Server-Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Mit dem Connector
sqlserverkönnen Sie SQL Server 2019 (15.x) mit einer anderen SQL Server-Instanz oder mit Azure SQL-Datenbank verbinden. - Geben Sie
Driver={<Name of Driver>}an, wenn Sie sich überODBCverbinden. - Die Option für hierarchische Namespaces für Azure Storage-Konten (v2) mit Verwendung von Präfix
adlswird in SQL Server 2022 (16.x) über Azure Data Lake Storage Gen2 unterstützt.
- Die SQL Server-Unterstützung für externe Datenquellen von HDFS Cloudera (CDP) und Hortonworks (HDP) wird eingestellt und nicht in SQL Server 2022 (16.x) enthalten sein. Es ist nicht erforderlich, das ARGUMENT TYPE in SQL Server 2022 (16.x) zu verwenden.
- Weitere Informationen zum S3-kompatiblen Objektspeicher und PolyBase ab SQL Server 2022 (16.x) finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in einem S3-kompatiblen Objektspeicher. Ein Beispiel für die Abfrage einer Parquet-Datei in einem S3-kompatiblen Objektspeicher finden Sie unter Virtualisieren einer Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase.
- Im Gegensatz zu früheren Versionen wurde in SQL Server 2022 (16.x) das Präfix für Azure Storage-Konten (v2) von
wasb[s]inabsgeändert. - Im Gegensatz zu früheren Versionen wurde in SQL Server 2022 (16.x) das Präfix für Azure Data Lake Storage Gen2 von
abfs[s]inadlsgeändert. - Ein Beispiel mit PolyBase zur Virtualisierung einer CSV-Datei in Azure Storage finden Sie unter Virtualisieren einer CSV-Datei mit PolyBase.
- Ein Beispiel mit PolyBase zur Virtualisierung einer Delta-Tabelle in ADLS Gen2 finden Sie unter Virtualisierung einer Delta-Tabelle mit PolyBase.
- SQL Server 2022 (16.x) unterstützt vollständig zwei URL-Formate für Azure Storage Account v2 (
abs) und Azure Data Lake Gen2 (adls).- Der LOCATION-Pfad kann die folgenden Formate verwenden:
<container>@<storage_account_name>..(empfohlen) oder<storage_account_name>../<container>. Beispiel:- Azure Storage Account v2:
abs://<container>@<storage_account_name>.blob.core.windows.net(empfohlen) oderabs://<storage_account_name>.blob.core.windows.net/<container>.
- Azure Storage Account v2:
- Der LOCATION-Pfad kann die folgenden Formate verwenden:
- Azure Data Lake Gen2 unterstützt:
adls://<container>@<storage_account_name>.blob.core.windows.net(empfohlen) oderadls://<storage_account_name>.dfs.core.windows.net/<container>.
CONNECTION_OPTIONS = key_value_pair
Für SQL Server 2019 (15.x) und höhere Versionen angegeben. Gibt zusätzliche Optionen bei einer Verbindung über ODBC mit einer externen Datenquelle an. Wenn Sie mehrere Verbindungsoptionen verwenden möchten, trennen Sie diese durch ein Semikolon.
Gilt für generische ODBC-Verbindungen sowie für integrierte ODBC-Connectors für SQL Server, Oracle, Teradata, MongoDB und die Azure Cosmos DB-API für MongoDB.
key_value_pair ist das Schlüsselwort sowie der Wert für eine bestimmte Verbindungsoption. Die verfügbaren Schlüsselwörter und Werte sind vom Typ der externen Datenquelle abhängig. Es ist mindestens der Name des Treibers erforderlich. Allerdings sind auch Optionen wie APP='<your_application_name>' oder ApplicationIntent= ReadOnly|ReadWrite bei der Problembehandlung nützlich.
Mögliche Schlüsselwertpaare sind spezifisch für den Treiber. Weitere Informationen zu jedem Anbietern finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Ab SQL Server 2022 (16.x) wurden zusätzliche Schlüsselwörter eingeführt, um Oracle TNS-Dateien zu unterstützen:
- Das Schlüsselwort
TNSNamesFilegibt den Dateipfad zur Dateitnsnames.oraan, die sich auf dem Oracle-Server befindet. - Das Schlüsselwort
ServerNamegibt den Alias an, der in der Dateitnsnames.oraverwendet wird, um den Hostnamen und den Port zu ersetzen.
PUSHDOWN = EIN | AUS
Gilt für: SQL Server 2019 (15.x) und höhere Versionen. Gibt an, ob die Berechnung an die externe Datenquelle weitergegeben werden kann. Sie ist standardmäßig aktiviert.
PUSHDOWN wird beim Herstellen einer Verbindung mit SQL Server, Oracle, Teradata, MongoDB, der Azure Cosmos DB-API für MongoDB oder ODBC auf der Ebene der externen Datenquelle unterstützt.
Das Aktivieren oder Deaktivieren von Pushdown auf Abfrageebene erfolgt über den EXTERNALPUSHDOWN-Hinweis.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich. - Wenn Sie auf das Azure Storage-Konto (V2) oder Azure Data Lake Storage Gen2 zugreifen, muss der
IDENTITYSHARED ACCESS SIGNATUREsein. - Ein Beispiel finden Sie unter Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Sie können ein SAS-Token erstellen, indem Sie zum Azure-Portal navigieren –>< Your_Storage_Account> –> Gemeinsame Zugriffssignatur – Berechtigungen konfigurieren –>> SAS- und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
?aus. - Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten Verwenden Sie Create External Table as Select (CETAS) Lesen, Erstellen, Auflisten und Schreiben Für Azure Blob Storage und Azure Data Lake Gen 2:
- Zulässige Dienste:
Blobmuss ausgewählt werden, um das SAS-Token zu generieren.
- Zulässige Dienste:
Zulässige Ressourcentypen:
ContainerundObjectmüssen ausgewählt werden, um das SAS-Token zu generieren.
Ein Beispiel für die Verwendung von CREDENTIAL mit einem S3-kompatiblen Objektspeicher und PolyBase finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in einem S3-kompatiblen Objektspeicher.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in SQL Server.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Upgrade auf SQL Server 2022
Ab SQL Server 2022 (16.x) werden externe Datenquellen von Hadoop nicht mehr unterstützt. Es ist erforderlich, externe Datenquellen, die zuvor mit TYPE = HADOOPerstellt wurden, und alle externen Tabellen, die diese externe Datenquelle verwenden, manuell neu zu erstellen.
Benutzer müssen außerdem ihre externen Datenquellen für die Verwendung neuer Konnektoren konfigurieren, wenn sie eine Verbindung mit Azure Storage herstellen.
| Externe Datenquelle | Von | Beschreibung |
|---|---|---|
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | wasb[s] |
abs |
| ADLS Gen2 | abfs[s] |
adls |
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
Ein. Erstellen einer externe Datenquelle in SQL Server zum Verweisen auf Oracle
Stellen Sie sicher, dass Sie über datenbankweit gültige Anmeldeinformationen verfügen, um eine externe Datenquelle zu erstellen, die auf Oracle verweist. Optional können Sie auch Pushdown-Berechnungen für diese Datenquelle aktivieren oder deaktivieren.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Optional kann die externe Datenquelle für Oracle die Proxyauthentifizierung verwenden, um eine differenzierte Zugriffssteuerung bereitzustellen. Ein Proxybenutzer kann so konfiguriert werden, dass er im Vergleich zu dem Benutzer, dessen Identität angenommen wird, eingeschränkten Zugriff hat.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Alternativ können Sie sich auch mit TNS authentifizieren.
Ab SQL Server 2022 (16.x) unterstützt das kumulative Update 2 CREATE EXTERNAL DATA SOURCE jetzt die Verwendung von TNS-Dateien beim Herstellen einer Verbindung mit Oracle.
Der CONNECTION_OPTIONS-Parameter wurde erweitert und verwendet jetzt TNSNamesFile und ServerName als Variablen, um die Datei tnsnames.ora zu durchsuchen und eine Verbindung mit dem Server herzustellen.
Im folgenden Beispiel sucht SQL Server während der Laufzeit den von tnsnames.ora angegebenen Dateispeicherort TNSNamesFile und den von ServerName angegebenen Host- und Netzwerkport.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
B. Erstellen einer externen Datenquelle für einen Verweis auf eine benannte SQL Server-Instanz über die PolyBase-Konnektivität
Gilt für: SQL Server 2019 (15.x) und höher
Geben Sie mit CONNECTION_OPTIONS den Instanznamen an, wenn Sie eine externe Datenquelle erstellen, die auf eine benannte Instanz von SQL Server verweist.
Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Im folgenden Beispiel ist WINSQL2019 der Hostname und SQL2019 der Instanzname.
'Server=%s\SQL2019' ist das Schlüssel-Wert-Paar.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternativ können Sie einen Port verwenden, um eine Verbindung mit einer SQL Server-Standardinstanz herzustellen.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
C. Erstellen einer externen Datenquelle zum Verweisen auf ein lesbares sekundäres Replikat der Always On-Verfügbarkeitsgruppe
Gilt für: SQL Server 2019 (15.x) und höher
Um eine externe Datenquelle zu erstellen, die auf ein lesbares sekundäres Replikat von SQL Server verweist, verwenden Sie CONNECTION_OPTIONS, um ApplicationIntent=ReadOnly anzugeben. Außerdem müssen Sie entweder die Verfügbarkeitsdatenbank wie Database={dbname} in CONNECTION_OPTIONSfestlegen oder die Verfügbarkeitsdatenbank als Standarddatenbank für die Anmeldeinformationen für die Datenbankbereich festlegen. Dazu müssen Sie alle Verfügbarkeitsreplikate der Verfügbarkeitsgruppe verwenden.
Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Erstellen Sie als Nächstes die neue externe Datenquelle.
Unabhängig davon, ob Sie die Verfügbarkeitsdatenbank Database=dbname als Standarddatenbank für die Anmeldung in den Anmeldeinformationen für die Datenbank einbezogen CONNECTION_OPTIONS oder festlegen, müssen Sie den Datenbanknamen weiterhin über einen dreiteiligen Namen in der CREATE EXTERNAL TABLE-Anweisung innerhalb des LOCATION-Parameters angeben. Ein Beispiel finden Sie unter CREATE EXTERNAL TABLE.
Im folgenden Beispiel ist WINSQL2019AGL der Name des Verfügbarkeitsgruppenlisteners und dbname der Name der Datenbank, die das Ziel der CREATE EXTERNAL TABLE-Anweisung sein soll.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Sie können das Umleitungsverhalten der Verfügbarkeitsgruppe veranschaulichen, indem Sie „ApplicationIntent“ angeben und eine externe Tabelle in der Systemansicht sys.servers erstellen. Im folgenden Beispielskript werden zwei externe Datenquellen erstellt, und für jede wird eine externe Tabelle erstellt. Verwenden Sie die Ansichten, um zu testen, welcher Server auf die Verbindung reagiert. Ähnliche Ergebnisse können auch über die schreibgeschützte Routingfunktion erreicht werden. Weitere Informationen finden Sie unter Konfigurieren des schreibgeschützten Routings für eine Always On-Verfügbarkeitsgruppe.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Erstellen Sie innerhalb der Datenbank in der Verfügbarkeitsgruppe eine Ansicht, die sys.servers und den Namen der lokalen Instanz zurückgeben soll, wodurch Sie ermitteln können, welches Replikat auf die Abfrage reagiert. Weitere Informationen finden Sie unter sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Erstellen Sie dann eine externe Tabelle in der Quellinstanz:
CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO
D: Erstellen einer externen Datenquelle zum Abfragen einer Parquet-Datei in einem S3-kompatiblen Objektspeicher über PolyBase
Gilt für: SQL Server 2022 (16.x) und höher
Das folgende Beispielskript erstellt eine externe Datenquelle s3_ds in der Quellbenutzerdatenbank in SQL Server. Die externe Datenquelle verweist auf die Anmeldeinformationen für die Datenbank s3_dc.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Überprüfen Sie die neue externe Datenquelle mit sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Das folgende Beispiel veranschaulicht die Verwendung von T-SQL zur Abfrage einer in einem S3-kompatiblen Objektspeicher gespeicherten Parquet-Datei über eine OPENROWSET-Abfrage. Weitere Informationen finden Sie unter Virtualisieren einer Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Erstellen einer externen Datenquelle mit generischer ODBC zu PostgreSQL
Wie in vorherigen Beispielen erstellen Sie zunächst einen Hauptschlüssel für die Datenbank und datenbankbezogene Anmeldeinformation. Die datenbankbezogene Anmeldeinformation werden für die externe Datenquelle verwendet. In diesem Beispiel wird auch davon ausgegangen, dass ein generischer ODBC-Datenanbieter für PostgreSQL auf dem Server installiert ist.
In diesem Beispiel wird der generische ODBC-Datenanbieter verwendet, um mit dem Standardport des TCP 5432 eine Verbindung mit einem PostgreSQL-Datenbankserver im gleichen Netzwerk herzustellen, wobei der vollqualifizierte Domänenname des PostgreSQL-Servers POSTGRES1 lautet.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Azure Storage
Erstellen einer SAS (Shared Access Signature)
Für Azure Blob Storage und Azure Data Lake Storage (ADLS) Gen2 ist die unterstützte Authentifizierungsmethode freigegebene Zugriffssignatur (SAS). Führen Sie die folgenden Schritte aus, um ein SAS-Token zu generieren. Weitere Informationen finden Sie unter CREDENTIAL.
Navigieren Sie zum Azure-Portal und zum gewünschten Speicherkonto.
Navigieren Sie im Menü Datenspeicher zu dem gewünschten Container.
Wählen Sie Freigegebene Zugriffstoken aus.
Wählen Sie die entsprechende Berechtigung basierend auf der gewünschten Aktion aus:
Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten Verwenden Sie Create External Table as Select (CETAS) Lesen, Erstellen und Schreiben Wählen Sie das Tokenablaufdatum aus.
Generieren Sie das SAS-Token und die URL.
Kopieren Sie das SAS-Token.
F. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Blob Storage mithilfe der Schnittstelle „abs://“
Gilt für: SQL Server 2022 (16.x) und höher
Ab SQL Server 2022 (16.x) wird ein neues Präfix (abs) für Azure Storage-Konten (v2) verwendet. Das Präfix abs unterstützt die Authentifizierung mithilfe von SHARED ACCESS SIGNATURE. Dieses abs-Präfix ersetzt das in früheren Versionen verwendete wasb. HADOOP wird nicht mehr unterstützt, es ist nicht mehr erforderlich TYPE = BLOB_STORAGE.
Der Azure Storage-Kontoschlüssel wird nicht länger benötigt, stattdessen wird SAS Token verwendet, wie aus dem folgenden Beispiel hervorgeht:
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Ein ausführlicheres Beispiel für den Zugriff auf in Azure Blob Storage gespeicherte CSV-Dateien finden Sie unter Virtualisieren von CSV-Dateien mit PolyBase.
G. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Data Lake Gen2
Gilt für: SQL Server 2022 (16.x) und höhere Versionen
Ab SQL Server 2022 (16.x) wird ein neues Präfix (adls) für Azure Data Lake Gen2 verwendet, welches das in Vorgängerversionen verwendete Präfix abfs ersetzt. Das Präfix adls unterstützt zudem SAS-Token als Authentifizierungsmethode, wie im folgenden Beispiel gezeigt:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Ein ausführlicheres Beispiel für den Zugriff auf in Azure Data Lake Gen2 gespeicherte Deltadateien finden Sie unter Virtualisieren der Deltatabelle mit PolyBase.
Beispiele: Massenvorgänge
Wichtig
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
H. Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Verwenden Sie die folgende Datenquelle für Massenvorgänge mit BULK INSERT oder OPENROWSET BULK. Die Anmeldeinformationen müssen SHARED ACCESS SIGNATURE als Identität festgelegt haben, dürfen kein führendes ? im SAS-Token aufweisen, müssen mindestens Leseberechtigung für die zu ladende Datei besitzen (z. B. srt=o&sp=r), und ihr Ablaufdatum muss gültig sein (alle Datumsangaben sind in UTC-Zeit). Weitere Informationen zu SAS finden Sie unter Verwenden von Shared Access Signatures (SAS).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Verwandte Inhalte
- EXTERNE DATENQUELLE ÄNDERN (Transact-SQL)
- DATENBANK-SCOPED CREDENTIAL ERSTELLEN (Transact-SQL)
- EXTERNES DATEIFORMAT ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ERSTELLEN (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- PolyBase-Konnektivitätskonfiguration (Transact-SQL)
Übersicht: SQL Server 2025
Gilt für: SQL Server 2025 (17.x)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung und Datenlast mithilfe von PolyBase in SQL Server
- Massenladevorgänge mit
BULK INSERToderOPENROWSET
Unterstützt Managed Identity-Verbindungen für Instanzen, die von Azure Arc aktiviert werden. Für Details siehe Connect to Azure Storage mit verwalteter Identität von PolyBase.
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Verwenden Sie die Dropdownliste für die Versionsauswahl, um die entsprechende Version auszuwählen. Dieser Inhalt gilt für SQL Server 2025 (17.x) und spätere Versionen.
Syntax für SQL Server 2025 und höhere Versionen
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL Server eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Unterstützte Standorte nach Produkt/Dienst | Authentifizierung |
|---|---|---|---|---|
| Azure Storage-Konto(V2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/oder abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Ab SQL Server 2022 (16.x) Hierarchischer Namespace wird unterstützt |
Shared Access Signature (SAS) oder PolyBase-Unterstützung für verwaltete Identität in Azure Storage1 |
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/oder adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Ab SQL Server 2022 (16.x) | Shared Access Signature (SAS) oder PolyBase-Unterstützung für verwaltete Identität in Azure Storage1 |
| SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Ab SQL Server 2019 (15.x) | Nur SQL-Authentifizierung |
| Orakel | oracle |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Teradata | teradata |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| MongoDB oder Cosmos DB-API für MongoDB | mongodb |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) | Nur Standardauthentifizierung |
| Generisches ODBC | odbc |
<server_name>[:port] |
Ab SQL Server 2019 (15.x) – nur Windows | Nur Standardauthentifizierung |
| Massenvorgänge | https |
<storage_account>.blob.core.windows.net/<container> |
Ab SQL Server 2017 (14.x) | Shared Access Signature (SAS) |
| S3-kompatibler Objektspeicher | s3 |
- S3-kompatibel: s3://<server_name>:<port>/- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>oder s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Ab SQL Server 2022 (16.x) | Standard oder Pass-Through (STS) 2 |
1 Benötigt SQL Server 2025 (17.x)-Instanz, die von Azure Arc aktiviert wird. Für Details siehe Connect to Azure Storage mit verwalteter Identität von PolyBase.
2 Muss eine Anmeldeinformation mit Datenbankbereich sein, bei der das IDENTITY Argument hartcodiert IDENTITY = 'S3 Access Key' ist und das SECRET Argument im Format = '<AccessKeyID>:<SecretKeyID>' vorhanden ist oder die Pass-Through-Autorisierung (PASS-Through, STS) verwendet. Weitere Information erhalten Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten im S3-kompatiblen Objektspeicher.
Speicherortpfad:
| Location path (Pfad zum Speicherort) | BESCHREIBUNG |
|---|---|
port |
Der Port, auf den die externe Datenquelle lauscht. Optional in vielen Fällen, abhängig von der Netzwerkkonfiguration. |
<container_name> |
Der Container des Speicherkontos, das die Daten enthält. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. |
<storage_account> |
Der Name des Speicherkontos der Azure-Ressource. |
<server_name> |
Der Hostname. |
<instance_name> |
Der Name der benannten SQL Server-Instanz. Wird verwendet, wenn Sie den SQL Server-Browserdienst auf der Zielinstanz ausführen. |
<ip_address>:<port>
1 |
Nur für S3-kompatible Objektspeicher wird der Endpunkt und der Port verwendet, um eine Verbindung mit dem S3-kompatiblen Speicher herzustellen. |
<bucket_name>
1 |
Nur für S3-kompatible Objektspeicher, spezifisch für die Speicherplattform. |
<region>
1 |
Nur für S3-kompatible Objektspeicher, spezifisch für die Speicherplattform. |
<folder> |
Teil des Speicherpfads innerhalb der Speicher-URL. |
1 SQL Server 2022 (16.x) und höhere Versionen.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
Beim Erstellen des Objekts überprüft die SQL Server-Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
Mit dem Connector
sqlserverkönnen Sie SQL Server 2019 (15.x) mit einer anderen SQL Server-Instanz oder mit Azure SQL-Datenbank verbinden.Geben Sie
Driver={<Name of Driver>}an, wenn Sie sich überODBCverbinden.Die hierarchische Namespaceoption für Azure Storage Accounts(V2) mit dem Präfix
adlswird über Azure Data Lake Storage Gen2 in SQL Server 2022 (16.x) und höheren Versionen unterstützt.Sql Server-Unterstützung für HDFS Cloudera (CDP) und Hortonworks (HDP) externe Datenquellen werden eingestellt und nicht in SQL Server 2022 (16.x) und höheren Versionen enthalten. Es ist nicht nötig, das Argument
TYPEin SQL Server 2025 (17.x) zu verwenden.Weitere Informationen zum S3-kompatiblen Objektspeicher und PolyBase in SQL Server 2022 (16.x) und höheren Versionen finden Sie unter Configure PolyBase to access external data in S3-kompatiblem Objektspeicher. Ein Beispiel für die Abfrage einer Parquet-Datei in einem S3-kompatiblen Objektspeicher finden Sie unter Virtualisieren einer Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase.
In SQL Server 2022 (16.x) und höheren Versionen:
Das Präfix, das für azure Storage Account (v2) verwendet wird, wurde von
wasb[s]zuabsDas Präfix, das für Azure Data Lake Storage Gen2 verwendet wird, wurde von
abfs[s]zuadlsEin Beispiel mit PolyBase zur Virtualisierung einer CSV-Datei in Azure Storage finden Sie unter Virtualisieren einer CSV-Datei mit PolyBase.
Ein Beispiel mit PolyBase zur Virtualisierung einer Delta-Tabelle in ADLS Gen2 finden Sie unter Virtualisierung einer Delta-Tabelle mit PolyBase.
SQL Server 2022 (16.x) und höhere Versionen unterstützen vollständig zwei URL-Formate für Azure Storage Account v2 (
abs) und Azure Data Lake Gen2 (adls).Der
LOCATIONPfad kann die Formate verwenden:<container>@<storage_account_name>..(empfohlen) oder<storage_account_name>../<container>. Beispiel:- Azure Storage Account v2:
abs://<container>@<storage_account_name>.blob.core.windows.net(empfohlen) oderabs://<storage_account_name>.blob.core.windows.net/<container>.
- Azure Storage Account v2:
Azure Data Lake Gen2 unterstützt:
adls://<container>@<storage_account_name>.blob.core.windows.net(empfohlen) oderadls://<storage_account_name>.dfs.core.windows.net/<container>.
CONNECTION_OPTIONS = key_value_pair
Gilt für: SQL Server 2019 (15.x) und höhere Versionen.
Gibt zusätzliche Optionen bei einer Verbindung über ODBC mit einer externen Datenquelle an. Wenn Sie mehrere Verbindungsoptionen verwenden möchten, trennen Sie diese durch ein Semikolon.
Gilt für generische ODBC-Verbindungen sowie für integrierte ODBC-Connectors für SQL Server, Oracle, Teradata, MongoDB und die Azure Cosmos DB-API für MongoDB.
key_value_pair ist das Schlüsselwort sowie der Wert für eine bestimmte Verbindungsoption. Die verfügbaren Schlüsselwörter und Werte sind vom Typ der externen Datenquelle abhängig. Es ist mindestens der Name des Treibers erforderlich. Allerdings sind auch Optionen wie APP='<your_application_name>' oder ApplicationIntent= ReadOnly|ReadWrite bei der Problembehandlung nützlich.
Mögliche Schlüsselwertpaare sind spezifisch für den Treiber. Weitere Informationen zu jedem Anbietern finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Ab SQL Server 2022 (16.x) wurden zusätzliche Schlüsselwörter eingeführt, um Oracle TNS-Dateien zu unterstützen:
- Das Schlüsselwort
TNSNamesFilegibt den Dateipfad zur Dateitnsnames.oraan, die sich auf dem Oracle-Server befindet. - Das Schlüsselwort
ServerNamegibt den Alias an, der in der Dateitnsnames.oraverwendet wird, um den Hostnamen und den Port zu ersetzen.
Verschlüsselungsoptionen in SQL Server 2025 (17.x)
Ab SQL Server 2025 (17.x) ist bei Verwendung sqlserver als Datenquelle der Microsoft ODBC Driver Version 18 für SQL Server der Standardtreiber. Die Encryption Option ist erforderlich (Yes, Nooder Strict), und TrustServerCertificate ist verfügbar (Yes oder No). Wenn Encryption nicht angegeben, lautet Encrypt=Yes;TrustServerCertificate=No;das Standardverhalten und erfordert ein Serverzertifikat.
Um eine Verbindung mit dem TDS 8.0-Protokoll herzustellen, wurde der strikte Modus (Encrypt=Strict) hinzugefügt. In diesem Modus muss ein vertrauenswürdiges Serverzertifikat installiert und immer überprüft werden (TrustServerCertificate wird ignoriert). Das neue Schlüsselwort HostnameInCertificate kann verwendet werden, um den erwarteten Hostnamen anzugeben, der im Zertifikat gefunden wird, wenn er sich vom angegebenen Server unterscheidet.
HostnameInCertificate kann in allen Verschlüsselungsmodi verwendet werden und gilt auch, wenn die serverseitige Option "Verschlüsselung erzwingen " aktiviert ist, was dazu führt, dass der Treiber das Zertifikat im optionalen oder obligatorischen Modus überprüft, es sei denn, die Verwendung TrustServerCertificatewird deaktiviert.
Weitere Informationen zu Encryption Optionen, Serverzertifikaten und TrustServerCertificatefeatures des Microsoft ODBC-Treibers für SQL Server unter Windows.
Sie sollten immer den neuesten Treiber verwenden. SQL Server 2025 (17.x) unterstützt jedoch auch den Microsoft ODBC Driver Version 17 für SQL Server für Abwärtskompatibilität. Weitere Informationen zum Ändern der von PolyBase verwendeten Treiberversion finden Sie unter Ändern der SQL Server-Treiberversion für PolyBase.
PUSHDOWN = EIN | AUS
Gilt für: SQL Server 2019 (15.x) und höhere Versionen.
Gibt an, ob die Berechnung an die externe Datenquelle weitergegeben werden kann. Standardmäßig aktiviert.
PUSHDOWN wird beim Herstellen einer Verbindung mit SQL Server, Oracle, Teradata, MongoDB, der Azure Cosmos DB-API für MongoDB oder ODBC auf der Ebene der externen Datenquelle unterstützt.
Das Aktivieren oder Deaktivieren der Weitergabe auf Abfrageebene erfolgt über einen Hinweis.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.Wenn Sie auf das Azure Storage-Konto (V2) oder Azure Data Lake Storage Gen2 zugreifen, muss der
IDENTITYSHARED ACCESS SIGNATUREsein.Ein Beispiel finden Sie unter Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Sie können ein SAS-Token erstellen, indem Sie zum Azure-Portal><navigieren, Your_Storage_Account>>Freigegebene Zugriffssignatur>konfigurieren Berechtigungen> generierenSAS und Verbindungszeichenfolge. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie die Führende
?aus, wenn sie als konfiguriertSECRETist.Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten Verwenden Sie Create External Table as Select (CETAS) Lesen, Erstellen, Auflisten und Schreiben Für Azure Blob Storage und Azure Data Lake Gen 2:
- Zulässige Dienste:
Blobmuss ausgewählt werden, um das SAS-Token zu generieren.
- Zulässige Dienste:
Zulässige Ressourcentypen:
ContainerundObjectmüssen ausgewählt werden, um das SAS-Token zu generieren.
Ein Beispiel für die Verwendung von CREDENTIAL mit einem S3-kompatiblen Objektspeicher und PolyBase finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in einem S3-kompatiblen Objektspeicher.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in SQL Server.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Upgrade auf SQL Server 2025
In SQL Server 2022 (16.x) und höheren Versionen werden hadoop externe Datenquellen nicht unterstützt. Es ist erforderlich, externe Datenquellen, die zuvor mit TYPE = HADOOPerstellt wurden, und alle externen Tabellen, die diese externe Datenquelle verwenden, manuell neu zu erstellen.
Benutzer müssen außerdem ihre externen Datenquellen für die Verwendung neuer Konnektoren konfigurieren, wenn sie eine Verbindung mit Azure Storage herstellen.
| Externe Datenquelle | Von | Beschreibung |
|---|---|---|
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | wasb[s] | Bauchmuskeln |
| ADLS Gen2 | abfs[s] | adls |
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
Ein. Erstellen einer externe Datenquelle in SQL Server zum Verweisen auf Oracle
Stellen Sie sicher, dass Sie über datenbankweit gültige Anmeldeinformationen verfügen, um eine externe Datenquelle zu erstellen, die auf Oracle verweist. Optional können Sie auch Pushdown-Berechnungen für diese Datenquelle aktivieren oder deaktivieren.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Optional kann die externe Datenquelle für Oracle die Proxyauthentifizierung verwenden, um eine differenzierte Zugriffssteuerung bereitzustellen. Ein Proxybenutzer kann so konfiguriert werden, dass er im Vergleich zu dem Benutzer, dessen Identität angenommen wird, eingeschränkten Zugriff hat.
CREATE DATABASE SCOPED CREDENTIAL [OracleProxyCredential]
WITH IDENTITY = 'oracle_username',
SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE [OracleSalesSrvr]
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
CONNECTION_OPTIONS = 'ImpersonateUser=%CURRENT_USER',
CREDENTIAL = [OracleProxyCredential]
);
Alternativ können Sie sich auch mit TNS authentifizieren.
Ab SQL Server 2022 (16.x) unterstützt das kumulative Update 2 CREATE EXTERNAL DATA SOURCE jetzt die Verwendung von TNS-Dateien beim Herstellen einer Verbindung mit Oracle.
Der CONNECTION_OPTIONS-Parameter wurde erweitert und verwendet jetzt TNSNamesFile und ServerName als Variablen, um die Datei tnsnames.ora zu durchsuchen und eine Verbindung mit dem Server herzustellen.
Im folgenden Beispiel sucht SQL Server während der Laufzeit den von tnsnames.ora angegebenen Dateispeicherort TNSNamesFile und den von ServerName angegebenen Host- und Netzwerkport.
CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
LOCATION = N'oracle://XE',
CREDENTIAL = [OracleCredentialTest],
CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);
B. Erstellen einer externen Datenquelle für einen Verweis auf eine benannte SQL Server-Instanz über die PolyBase-Konnektivität
Gilt für: SQL Server 2019 (15.x) und höhere Versionen.
Geben Sie mit CONNECTION_OPTIONS den Instanznamen an, wenn Sie eine externe Datenquelle erstellen, die auf eine benannte Instanz von SQL Server verweist.
Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Im folgenden Beispiel ist WINSQL2019 der Hostname und SQL2019 der Instanzname.
'Server=%s\SQL2019' ist das Schlüssel-Wert-Paar.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternativ können Sie einen Port verwenden, um eine Verbindung mit einer SQL Server-Standardinstanz herzustellen.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
C. Erstellen einer externen Datenquelle zum Verweisen auf ein lesbares sekundäres Replikat der Always On-Verfügbarkeitsgruppe
Gilt für: SQL Server 2019 (15.x) und höhere Versionen.
Um eine externe Datenquelle zu erstellen, die auf ein lesbares sekundäres Replikat von SQL Server verweist, verwenden Sie CONNECTION_OPTIONS, um ApplicationIntent=ReadOnly anzugeben. Darüber hinaus müssen Sie entweder die Verfügbarkeitsdatenbank wie Database={dbname} in CONNECTION_OPTIONS, oder die Verfügbarkeitsdatenbank als Standarddatenbank für die Anmeldeinformationen für die Datenbankbereich festlegen. Dazu müssen Sie alle Verfügbarkeitsreplikate der Verfügbarkeitsgruppe verwenden.
Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Erstellen Sie als Nächstes die neue externe Datenquelle.
Unabhängig davon, ob Sie die Verfügbarkeitsdatenbank Database=dbname als Standarddatenbank für die Anmeldung in den Anmeldeinformationen für die Datenbank einbezogen CONNECTION_OPTIONS oder festlegen, müssen Sie den Datenbanknamen weiterhin über einen dreiteiligen Namen in der CREATE EXTERNAL TABLE-Anweisung innerhalb des LOCATION-Parameters angeben. Ein Beispiel finden Sie unter CREATE EXTERNAL TABLE.
Im folgenden Beispiel ist WINSQL2019AGL der Name des Verfügbarkeitsgruppenlisteners und dbname der Name der Datenbank, die das Ziel der CREATE EXTERNAL TABLE-Anweisung sein soll.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Sie können das Umleitungsverhalten der Verfügbarkeitsgruppe veranschaulichen, indem Sie „ApplicationIntent“ angeben und eine externe Tabelle in der Systemansicht sys.servers erstellen. Im folgenden Beispielskript werden zwei externe Datenquellen erstellt, und für jede wird eine externe Tabelle erstellt. Verwenden Sie die Ansichten, um zu testen, welcher Server auf die Verbindung reagiert. Ähnliche Ergebnisse können auch über die schreibgeschützte Routingfunktion erreicht werden. Weitere Informationen finden Sie unter Konfigurieren des schreibgeschützten Routings für eine Always On-Verfügbarkeitsgruppe.
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = [SQLServerCredentials]
);
GO
CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
CREDENTIAL = [SQLServerCredentials]
);
GO
Erstellen Sie innerhalb der Datenbank in der Verfügbarkeitsgruppe eine Ansicht, die sys.servers und den Namen der lokalen Instanz zurückgeben soll, wodurch Sie ermitteln können, welches Replikat auf die Abfrage reagiert. Weitere Informationen finden Sie unter sys.servers.
CREATE VIEW vw_sys_servers AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Erstellen Sie dann eine externe Tabelle in der Quellinstanz:
CREATE EXTERNAL TABLE vw_sys_servers_ro
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
CREATE EXTERNAL TABLE vw_sys_servers_rw
(
name SYSNAME NOT NULL
)
WITH (
DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO
SELECT [name]
FROM dbo.vw_sys_servers_ro;
--should return secondary replica instance
SELECT [name]
FROM dbo.vw_sys_servers_rw;
--should return primary replica instance
GO
D: Erstellen einer externen Datenquelle zum Abfragen einer Parquet-Datei in einem S3-kompatiblen Objektspeicher über PolyBase
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Das folgende Beispielskript erstellt eine externe Datenquelle s3_ds in der Quellbenutzerdatenbank in SQL Server. Die externe Datenquelle verweist auf die Anmeldeinformationen für die Datenbank s3_dc.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>'; -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Überprüfen Sie die neue externe Datenquelle mit sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Das folgende Beispiel veranschaulicht die Verwendung von T-SQL zur Abfrage einer in einem S3-kompatiblen Objektspeicher gespeicherten Parquet-Datei über eine OPENROWSET-Abfrage. Weitere Informationen finden Sie unter Virtualisieren einer Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase.
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Erstellen einer externen Datenquelle mit generischer ODBC zu PostgreSQL
Wie in vorherigen Beispielen erstellen Sie zunächst einen Hauptschlüssel für die Datenbank und datenbankbezogene Anmeldeinformation. Die datenbankbezogene Anmeldeinformation werden für die externe Datenquelle verwendet. In diesem Beispiel wird auch davon ausgegangen, dass ein generischer ODBC-Datenanbieter für PostgreSQL auf dem Server installiert ist.
In diesem Beispiel wird der generische ODBC-Datenanbieter verwendet, um mit dem Standardport des TCP 5432 eine Verbindung mit einem PostgreSQL-Datenbankserver im gleichen Netzwerk herzustellen, wobei der vollqualifizierte Domänenname des PostgreSQL-Servers POSTGRES1 lautet.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Azure Storage
Erstellen einer SAS (Shared Access Signature)
Sowohl für Azure Blob Storage als auch für Azure Data Lake Gen2 ist die unterstützte Authentifizierungsmethode Shared Access Signature (SAS). Führen Sie die folgenden Schritte aus, um ein SAS-Token zu generieren. Weitere Informationen finden Sie unter CREDENTIAL.
- Navigieren Sie zum Azure-Portal und zum gewünschten Speicherkonto.
- Navigieren Sie im Menü Datenspeicher zu dem gewünschten Container.
- Wählen Sie Freigegebene Zugriffstoken aus.
- Wählen Sie die entsprechende Berechtigung basierend auf der gewünschten Aktion aus. Verwenden Sie zur Referenz die folgende Tabelle:
| Aktion | Berechtigung |
|---|---|
| Lesen von Daten aus einer Datei | Lesen |
| Lesen von Daten aus mehreren Dateien und Unterordnern | Lesen und Auflisten |
| Verwenden Sie Create External Table as Select (CETAS) | Lesen, Erstellen und Schreiben |
- Wählen Sie das Tokenablaufdatum aus.
- Generieren Sie das SAS-Token und die URL.
- Kopieren Sie das SAS-Token.
F. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Blob Storage mithilfe der Schnittstelle „abs://“
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Verwenden Sie ein neues Präfix abs für Das Azure Storage-Konto v2. Das Präfix abs unterstützt die Authentifizierung mithilfe von SHARED ACCESS SIGNATURE. Dieses abs-Präfix ersetzt das in früheren Versionen verwendete wasb. HADOOP wird nicht mehr unterstützt, es ist nicht mehr erforderlich TYPE = BLOB_STORAGE.
Der Azure Storage-Kontoschlüssel wird nicht länger benötigt, stattdessen wird SAS Token verwendet, wie aus dem folgenden Beispiel hervorgeht:
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
SECRET = '<Blob_SAS_Token>';
GO
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredentialv2
);
Ein ausführlicheres Beispiel für den Zugriff auf in Azure Blob Storage gespeicherte CSV-Dateien finden Sie unter Virtualisieren von CSV-Dateien mit PolyBase.
G. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Data Lake Gen2
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Verwenden Sie ein neues Präfix adls für Azure Data Lake Gen2, das in abfs früheren Versionen ersetzt wird. Das Präfix adls unterstützt zudem SAS-Token als Authentifizierungsmethode, wie im folgenden Beispiel gezeigt:
--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<DataLakeGen2_SAS_Token>';
GO
CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
CREDENTIAL = datalakegen2
);
Ein ausführlicheres Beispiel für den Zugriff auf in Azure Data Lake Gen2 gespeicherte Deltadateien finden Sie unter Virtualisieren der Deltatabelle mit PolyBase.
Beispiele: Massenvorgänge
Wichtig
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
H. Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen
Gilt für: SQL Server 2022 (16.x) und höhere Versionen.
Verwenden Sie die folgende Datenquelle für Massenvorgänge mit BULK INSERT oder OPENROWSET. Die Anmeldeinformationen müssen SHARED ACCESS SIGNATURE als Identität festgelegt haben, dürfen kein führendes ? im SAS-Token aufweisen, müssen mindestens Leseberechtigung für die zu ladende Datei besitzen (z. B. srt=o&sp=r), und ihr Ablaufdatum muss gültig sein (alle Datumsangaben sind in UTC-Zeit). Weitere Informationen zu SAS finden Sie unter Verwenden von Shared Access Signatures (SAS).
CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
-- Remove ? from the beginning of the SAS token
SECRET = '<azure_shared_access_signature>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = AccessAzureInvoices,
);
Ich. Erstellen einer externen Datenquelle mithilfe von TDS 8.0 zum Herstellen einer Verbindung mit einem anderen SQL Server
Gilt für: SQL Server 2025 (17.x) und neuere Versionen.
Wenn Sie den neuesten Microsoft ODBC-Treiber 18 für SQL Server verwenden, müssen Sie die Encryption Option unter CONNECTION_OPTIONSverwenden und TrustServerCertificate auch unterstützt werden. Wenn Encryption nicht angegeben, lautet Encrypt=Yes;TrustServerCertificate=No;das Standardverhalten , und Sie benötigen ein Serverzertifikat.
In diesem Beispiel wird die SQL-Authentifizierung verwendet. Um die Anmeldeinformationen zu schützen, benötigen Sie einen Datenbankmasterschlüssel (DMK). Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel wird eine Anmeldeinformationen mit Datenbankbereich mit benutzerdefiniertem Anmelde- und Kennwortbereich erstellt.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = '<username>',
SECRET = '<password>';
Der Zielservername ist WINSQL2022, Port 58137, und es ist eine Standardinstanz. Durch Angeben Encrypt=Strictverwendet die Verbindung TDS 8.0, und das Serverzertifikat wird immer überprüft. in diesem Beispiel lautet die HostnameinCertificate verwendete Eigenschaft WINSQL2022:
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=Strict;HostnameInCertificate=WINSQL2022;'
CREDENTIAL = SQLServerCredentials
);
J. Erstellen einer externen Datenquelle mithilfe der Verschlüsselungs- und TrustServerCertificate-Option
Im folgenden Beispiel sind zwei Codebeispiele aufgeführt. Der erste Codeausschnitt hat Encryption und TrustServerCertificate ist festgelegt.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
CREDENTIAL = SQLServerCredentials
);
Der folgende Codeausschnitt ist nicht Encryption aktiviert.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encrypt=no;'
CREDENTIAL = SQLServerCredentials
);
Verwandte Inhalte
- EXTERNE DATENQUELLE ÄNDERN (Transact-SQL)
- DATENBANK-SCOPED CREDENTIAL ERSTELLEN (Transact-SQL)
- EXTERNES DATEIFORMAT ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ERSTELLEN (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- PolyBase-Konnektivitätskonfiguration (Transact-SQL)
* SQL-Datenbank *
Übersicht: Azure SQL-Datenbank
gilt für: Azure SQL-Datenbank
Erstellt eine externe Datenquelle für elastische Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen diese primären Anwendungsfälle:
- Datenvirtualisierung (Vorschau)
- Massenladevorgänge mit
BULK INSERToderOPENROWSET - Abfragen von SQL-Datenbank- oder Azure Synapse-Remoteinstanzen mithilfe von SQL-Datenbank mit elastischen Abfragen
- Abfragen einer Shard-SQL-Datenbank mithilfe elastischer Abfragen
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER } ]
[ [ , ] DATABASE_NAME = '<database_name>' ]
[ [ , ] SHARD_MAP_NAME = '<shard_map_manager>' ] )
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank in SQL-Datenbank eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Verfügbarkeit |
|---|---|---|---|
| Massenvorgänge | https |
<storage_account>.blob.core.windows.net/<container> |
|
| Elastische Abfrage (Shard) | Nicht erforderlich | <shard_map_server_name>.database.windows.net |
|
| Elastische Abfrage (Remote) | Nicht erforderlich | <remote_server_name>.database.windows.net |
|
| EdgeHub | edgehub |
edgehub:// |
Nur in Azure SQL Edge verfügbar. EdgeHub befindet sich immer lokal bei der Azure SQL Edge-Instanz. Daher muss kein Pfad- oder Portwert angegeben werden. |
| Kafka | kafka |
kafka://<kafka_bootstrap_server_name_ip>:<port_number> |
Nur in Azure SQL Edge verfügbar. |
| Azure Storage-Konto (v2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/oder abs://<storage_account_name>.blob.core.windows.net/
<container_name> |
|
| Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/oder adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Speicherortpfad:
-
<shard_map_server_name>= Der logische Servername in Azure, der den Shardzuordnungs-Manager hostet. DasDATABASE_NAME-Argument stellt die Datenbank zum Hosten der Shardzuordnung bereit, undSHARD_MAP_NAMEwird für die Shardzuordnung selbst verwendet. -
<remote_server_name>= Der Name des logischen Zielservers für die elastische Abfrage. Der Name der Datenbank wird mithilfe desDATABASE_NAME-Arguments angegeben.
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
- Verwenden Sie zum Laden von Daten aus Azure Storage in Azure SQL-Datenbank ein SAS-Token (Shared Access Signature).
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich. - Wenn
TYPE=BLOB_STORAGE, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATUREals Identität erstellt werden. - Wenn die Verbindung mit Azure Storage den WASB[s]-Connector verwendet, muss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
- Wenn
TYPE=HADOOP, müssen die Anmeldeinformationen mithilfe des Speicherkontoschlüssels alsSECRETerstellt werden. -
TYPE=BLOB_STORAGEist nur für Massenvorgänge zulässig; Sie können keine externen Tabellen für eine externe Datenquelle mitTYPE=BLOB_STORAGE.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Sie können ein SAS-Token erstellen, indem Sie zum Azure-Portal navigieren –>< Your_Storage_Account> –> Gemeinsame Zugriffssignatur – Berechtigungen konfigurieren –>> SAS- und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
?aus. - Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten Verwenden Sie Create External Table as Select (CETAS) Lesen, Erstellen und Schreiben
Ein Beispiel für die Verwendung von CREDENTIAL mit SHARED ACCESS SIGNATURE und TYPE = BLOB_STORAGE finden Sie unter Erstellen einer externen Datenquelle für Massenvorgänge und Abrufen von Daten aus Azure Storage in SQL-Datenbank.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
TYP = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich und sollte nur für bestimmte externe Datenquellen bereitgestellt werden.
- Verwenden Sie
RDBMSfür datenbankübergreifende Abfragen mit elastischen Abfragen in SQL-Datenbank. - Verwenden Sie beim Erstellen einer externen Datenquelle
SHARD_MAP_MANAGER, wenn Sie eine Verbindung mit einer Shard-SQL-Datenbank herstellen. - Die Verwendung
BLOB_STORAGEerfolgt nur für dashttpsPräfix. Geben Sie fürabdundadlsPräfixe nichtTYPEan.
Wichtig
Legen Sie diese Option nicht fest TYPE , wenn Sie eine andere externe Datenquelle verwenden.
DATABASE_NAME = database_name
Konfigurieren Sie dieses Argument, wenn der TYPE auf RDBMS oder SHARD_MAP_MANAGER festgelegt ist.
| ART | Wert von DATABASE_NAME |
|---|---|
RDBMS |
Der Name der Remotedatenbank auf dem mit LOCATION bereitgestellten Server. |
SHARD_MAP_MANAGER |
Der Name der Datenbank, die als Shardzuordnungs-Manager fungiert. |
Ein Beispiel zum Erstellen einer externen Datenquelle, in dem TYPE = RDBMSsie sich auf " Erstellen einer externen RDBMS-Datenquelle" beziehen.
SHARD_MAP_NAME = shard_map_name
Wird verwendet, wenn das TYPE-Argument auf SHARD_MAP_MANAGER festgelegt wird, nur um den Namen der Shardzuordnung festzulegen.
Ein Beispiel zum Erstellen einer externe Datenquelle, bei der TYPE = SHARD_MAP_MANAGER ist, finden Sie unter Erstellen einer externen Datenquelle mithilfe des Shardzuordnungs-Managers.
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in Azure SQL-Datenbank.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Beispiele
Ein. Erstellen einer externen Datenquelle für einen Shardzuordnungs-Manager
Zur Erstellung einer externen Datenquelle, die auf SHARD_MAP_MANAGER verweist, wird der Name des SQL-Datenbankservers angegeben, der den Shardzuordnungs-Manager in SQL-Datenbank oder der SQL Server-Datenbank auf einer VM hostet.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ElasticDBQueryCred
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = SHARD_MAP_MANAGER,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'ElasticScaleStarterKit_ShardMapManagerDb',
CREDENTIAL = ElasticDBQueryCred,
SHARD_MAP_NAME = 'CustomerIDShardMap'
);
Sie finden ein ausführliches Tutorial unter Getting started with elastic queries for sharding (horizontal partitioning) (Erste Schritte mit elastischen Abfragen für Sharding (horizontales Partitionieren)).
B. Erstellen einer externen RDBMS-Datenquelle
Zur Erstellung einer externen Datenquelle, die auf RDBMS verweist, wird der Name des SQL-Datenbankservers der Remotedatenbank in SQL-Datenbank angegeben.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL SQL_Credential
WITH IDENTITY = '<username>',
SECRET = '<password>';
CREATE EXTERNAL DATA SOURCE MyElasticDBQueryDataSrc
WITH (
TYPE = RDBMS,
LOCATION = '<server_name>.database.windows.net',
DATABASE_NAME = 'Customers',
CREDENTIAL = SQL_Credential
);
Sie finden ein ausführliches Tutorial für RDBMS unter Getting started with cross-database queries (vertical partitioning) (Erste Schritte mit datenbankübergreifenden Abfragen (vertikale Partitionierung)).
Beispiele: Massenvorgänge
Wichtig
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
C. Erstellen einer externen Datenquelle für Massenvorgänge, die Daten aus Azure Storage abrufen
Verwenden Sie die folgende Datenquelle für Massenvorgänge mit BULK INSERT oder OPENROWSET BULK. Die Anmeldeinformationen müssen SHARED ACCESS SIGNATURE als Identität festgelegt haben, dürfen kein führendes ? im SAS-Token aufweisen, müssen mindestens Leseberechtigung für die zu ladende Datei besitzen (z. B. srt=o&sp=r), und ihr Ablaufdatum muss gültig sein (alle Datumsangaben sind in UTC-Zeit). Weitere Informationen zu SAS finden Sie unter Verwenden von Shared Access Signatures (SAS).
Erstellen Einer externen Datenquelle für Azure Blob Storage (ABS) mithilfe der verwalteten Identität:
CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity';
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateABS
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
CREDENTIAL = [DSC_MI]
);
Erstellen Einer externen Datenquelle für Azure Data Lake Gen2 (ADLS) mithilfe der Benutzeridentität:
CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity';
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateADLS
WITH (
LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/',
CREDENTIAL = [DSC_ADLS]
);
Sie finden dieses Beispiel unter BULK INSERT.
Beispiele: Azure SQL Edge
Wichtig
Informationen zum Konfigurieren externer Daten für Azure SQL Edge finden Sie unter Datenstreaming in Azure SQL Edge.
Ein. Erstellen einer externen Datenquelle für einen Verweis auf Kafka
Gilt für:NurAzure SQL Edge
In diesem Beispiel handelt es sich bei der externen Datenquelle um einen Kafka-Server mit der IP-Adresse xxx.xxx.xxx.xxx, der an Port 1900 lauscht. Die externe Kafka-Datenquelle dient nur zum Datenstreaming und unterstützt kein Prädikat-Pushdown.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
WITH (
LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900'
);
B. Erstellen einer externen Datenquelle für einen Verweis auf EdgeHub
Gilt für:NurAzure SQL Edge
In diesem Beispiel ist die externe Datenquelle eine EdgeHub-Instanz, die auf demselben Edgegerät wie Azure SQL Edge ausgeführt wird. Die externe EdgeHub-Datenquelle ist nur für das Datenstreaming vorgesehen und unterstützt kein Prädikat-Pushdown.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (
LOCATION = 'edgehub://'
);
Verwandte Inhalte
* Azure Synapse
Analytik*
Übersicht: Azure Synapse Analytics
Gilt für: Azure Synapse Analytics
Erstellt eine externe Datenquelle für die Datenvirtualisierung. Externe Datenquellen dienen zum Herstellen von Konnektivität und unterstützen den primären Anwendungsfall der Datenvirtualisierung und das Laden von Dateien aus externen Datenquellen. Weitere Informationen finden Sie unter Verwenden externer Tabellen mit Synapse SQL.
Wichtig
Informationen zum Erstellen einer externen Datenquelle zum Abfragen einer Azure Synapse Analytics-Ressource mit Azure SQL-Datenbank mit elastischer Abfrage finden Sie unter CREATE EXTERNAL DATA SOURCE for Azure SQL Database.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
)
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Azure SQL-Datenbank in Azure Synapse Analytics eindeutig sein.
ORT = '<Präfix>://<path>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) |
|---|---|---|
| Daten-Lake-Speicher* Gen1 | adl |
<storage_account>.azuredatalake.net |
| Data Lake Storage Gen2 | abfs[s] |
<container>@<storage_account>.dfs.core.windows.net |
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | wasbs |
<container>@<storage_account>.blob.core.windows.net |
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | https |
<storage_account>.blob.core.windows.net/<container>/subfolders |
| Data Lake Storage Gen1 | http[s] |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
| Data Lake Storage Gen2 | http[s] |
<storage_account>.dfs.core.windows.net/<container>/subfolders |
| Data Lake Storage Gen2 | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
* Für Microsoft Azure Data Lake Storage Gen1 gibt es eingeschränkten Support, Gen2 wird für alle Neuentwicklungen empfohlen.
| Externe Datenquelle | Präfix für Connectorspeicherort | Dedizierte SQL-Pools: PolyBase | Dedizierte SQL-Pools: nativ* | Serverlose SQL-Pools |
|---|---|---|---|---|
| Datenlake-Speicher** Gen1 | adl |
Nein | Nein | Ja |
| Data Lake Storage Gen2 | abfs[s] |
Ja | Ja | Ja |
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | wasbs |
Ja | Ja*** | Ja |
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | https |
Nein | Ja | Ja |
| Data Lake Storage Gen1 | http[s] |
Nein | Nein | Ja |
| Data Lake Storage Gen2 | http[s] |
Ja | Ja | Ja |
| Data Lake Storage Gen2 | wasb[s] |
Ja | Ja | Ja |
* Serverlose und dedizierte SQL-Pools in Azure Synapse Analytics nutzen für die Datenvirtualisierung verschiedene Codebasen. Serverlose SQL-Pools unterstützen eine native Datenvirtualisierungstechnologie. Dedizierte SQL-Pools unterstützen sowohl die native als auch die PolyBase-Datenvirtualisierung. Die PolyBase-Datenvirtualisierung wird verwendet, wenn EXTERNAL DATA SOURCE mit TYPE=HADOOP erstellt wird.
** Für Microsoft Azure Data Lake Storage Gen1 gibt es eingeschränkten Support, Gen2 wird für alle Neuentwicklungen empfohlen.
*** Der sicherere wasbs-Connector wird gegenüber wasb empfohlen. Nur systemeigene Datenvirtualisierung in dedizierten SQL-Pools (wobei TYPE keine HADOOP-Unterstützung wasbhat).
Speicherortpfad:
-
<container>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Bei der Bereitstellung von Azure Data Lake Storage Gen2 ist die Standardoption
enable secure SSL connections. Wenn dies aktiviert ist, müssen Sie verwendenabfss, wenn eine sichere TLS/SSL-Verbindung ausgewählt ist, obwohlabfsssie auch für unsichere TLS-Verbindungen funktioniert. Weitere Informationen finden Sie unter Azure Blob File System (ABFS). - Azure Synapse überprüft die Existenz der externen Datenquelle nicht, wenn das Objekt erstellt wird. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Verwenden Sie beim Abfragen von Hadoop für alle Tabellen die gleiche externe Datenquelle, um eine konsistente Abfragesemantik zu ermöglichen.
- Mit dem Präfix
https:können Sie Unterordner im Pfad verwenden.httpsist für alle Datenzugriffsmethoden nicht verfügbar. -
wasbswird empfohlen, da Daten mithilfe einer sicheren TLS-Verbindung gesendet werden. - Hierarchische Namespaces werden mit Azure V2-Speicherkonten nicht unterstützt, wenn der Zugriff auf Daten über die ältere
wasb://-Schnittstelle erfolgt. Bei Verwendung vonwasbs://werden hierarchische Namespaces jedoch unterstützt.
ANMELDEINFORMATIONEN = credential_name
Wahlfrei. Gibt eine datenbankbezogene Anmeldeinformationen für die Authentifizierung für die externe Datenquelle an. Externe Datenquelle ohne Anmeldeinformationen kann auf ein öffentliches Speicherkonto zugreifen oder die Microsoft Entra-Identität des Anrufers verwenden, um auf Dateien im Azure-Speicher zuzugreifen.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
- Verwenden Sie einen Azure Storage-Schlüssel, um Daten aus Azure Storage oder Azure Data Lake Storage Gen2 (ADLS) in Azure Synapse Analytics zu laden.
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.
Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
In serverlosen SQL-Pool können Anmeldeinformationen mit Datenbankbereich die verwaltete Identität des Arbeitsbereichs, den Dienstprinzipalnamen oder das SAS-Token (Shared Access Signature) angeben. Der Zugriff über eine Benutzeridentität, auch bekannt als Microsoft Entra Passthrough, ist auch in den datenbankbezogenen Anmeldeinformationen möglich, ebenso wie anonymer Zugriff auf öffentlich verfügbaren Speicher. Weitere Informationen finden Sie unter Unterstützte Speicherautorisierungstypen.
In dediziertem SQL-Pool können Anmeldeinformationen mit Datenbankbereichssignatur (Shared Access Signature, SAS)-Token, Speicherzugriffsschlüssel, Dienstprinzipal, verwaltete Arbeitsbereichsidentität oder Microsoft Entra-Passthrough angeben.
TYP = HADOOP
Optional, nicht empfohlen.
Sie können TYPE nur mit dedizierten SQL-Pools angeben.
HADOOP ist der einzige zulässige Wert, sofern angegeben. Externe Datenquellen mit TYPE=HADOOP sind nur in dedizierten SQL-Pools verfügbar.
Verwenden Sie HADOOP für Legacyimplementierungen, andernfalls wird empfohlen, den neueren systemeigenen Datenzugriff zu verwenden. Geben Sie das TYPE-Argument nicht an, um den neueren systemeigenen Datenzugriff zu verwenden.
Ein Beispiel für die Verwendung von TYPE = HADOOP zum Laden von Daten aus Azure Storage finden Sie unter Erstellen einer externen Datenquelle für Verweise auf Azure Data Lake Storage Gen1 oder Gen2 mithilfe eines Dienstprinzipals.
Serverlose und dedizierte SQL-Pools in Azure Synapse Analytics nutzen für die Datenvirtualisierung verschiedene Codebasen. Serverlose SQL-Pools unterstützen eine native Datenvirtualisierungstechnologie. Dedizierte SQL-Pools unterstützen sowohl die native als auch die PolyBase-Datenvirtualisierung. Die PolyBase-Datenvirtualisierung wird verwendet, wenn EXTERNAL DATA SOURCE mit TYPE=HADOOP erstellt wird.
Berechtigungen
Erfordert die CONTROL-Berechtigung für die Datenbank.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
Die meisten externen Datenquellen unterstützen die proxybasierte Authentifizierung mithilfe datenbankbezogener Anmeldeinformationen zum Erstellen des Proxykontos.
SAS-(Shared Access Signature-)Schlüssel werden unterstützt, um die Authentifizierung für Azure Data Lake Store-Speicherkonten der Generation 2 zu ermöglichen. Kunden, die sich mithilfe einer Signatur für den freigegebenen Zugriff authentifizieren möchten, müssen datenbankbezogene Anmeldeinformationen erstellen, wobei IDENTITY = "Shared Access Signature", und ein SAS-Token als Geheimnis eingeben.
Wenn Sie datenbankbezogene Anmeldeinformationen erstellen, wobei IDENTITY = "Shared Access Signature", und einen Speicherschlüsselwert als Geheimnis verwenden, erhalten Sie die folgende Fehlermeldung:
'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'
Beispiele
Ein. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“
In diesem Beispiel ist die externe Datenquelle ein Azure Storage V2-Konto namens logs. Der Lagerbehälter heißt daily. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden beim Zugriff auf Daten über die wasb:// Schnittstelle nicht unterstützt. Beim Herstellen einer Verbindung mit dem Azure Storage über wasb oder wasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
In diesem Beispiel wird die Java-basierte Legacyzugriffsmethode HADOOP verwendet. Im folgenden Beispiel wird gezeigt, wie Sie die datenbankbezogenen gültigen Anmeldeinformationen für die Authentifizierung bei Azure Storage erstellen. Geben Sie den Azure Storage-Kontoschlüssel im Anmeldeinformationsgeheimnis der Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
B. Erstellen einer externen Datenquelle für Verweise auf Azure Data Lake Storage Gen1 oder Gen2 mithilfe eines Dienstprinzipals
Azure Data Lake Store-Konnektivität kann auf Ihrem ADLS-URI und dem Dienstprinzipal Ihrer Microsoft Entra-Anwendung basieren. Dokumentation zum Erstellen dieser Anwendung finden Sie unter Data lake store authentication using Microsoft Entra ID.
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
-- SECRET = '<KEY>'
SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';
-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
TYPE = HADOOP,
LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
CREDENTIAL = ADLS_credential
);
-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
-- Note the abfss endpoint when your account has secure transfer enabled
TYPE = HADOOP,
LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential
);
C. Erstellen einer externen Datenquelle für Verweise auf Azure Data Lake Storage Gen2 mithilfe des Speicherkontoschlüssels
-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
-- IDENTITY = '<storage_account_name>' ,
IDENTITY = 'newyorktaxidata',
-- SECRET = '<storage_account_key>'
SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ==';
-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
D: Erstellen einer externen Datenquelle für Azure Data Lake Store Gen2 mithilfe von abfs://
Es ist nicht nötig, beim Verbinden mit einem Azure Data Lake Store Gen2-Konto mit verwalteten Identitäten anzugebenSECRET.
-- If you do not have a Master Key on your DW you will need to create one
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity';
--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH (
TYPE = HADOOP,
LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net',
CREDENTIAL = msi_cred
);
Verwandte Inhalte
- DATENBANK-SCOPED CREDENTIAL ERSTELLEN (Transact-SQL)
- EXTERNES DATEIFORMAT ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ERSTELLEN (Transact-SQL)
- EXTERNE TABELLE ALS SELECT ERSTELLEN (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
*Analytik
Plattformsystem (PDW) *
Übersicht: Analyseplattformsystem
Gilt für: Analytics Platform System (PDW)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden verwendet, um Konnektivität herzustellen und den folgenden Anwendungsfall zu unterstützen: Datenvirtualisierung und Datenauslastung mit PolyBase in SQL Server.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Der Name muss innerhalb des Servers in Analytics Platform System (PDW) eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) |
|---|---|---|
| Cloudera CDH oder Hortonworks HDP | hdfs |
<Namenode>[:port] |
| Azure Storage-Konto | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Speicherortpfad:
-
<Namenode>: Der Name des Computers, der Namensdienst-URI oder die IP-Adresse vonNamenodeim Hadoop-Cluster. PolyBase muss DNS-Namen auflösen, die vom Hadoop-Cluster verwendet werden. -
port= Der Port, an dem die externe Datenquelle lauscht. In Hadoop verwendet der Port den Konfigurationsparameterfs.defaultFS. Der Standardwert ist 8020. -
<container>= Der Container des Speicherkontos, der die Daten speichert. Stammcontainer sind schreibgeschützt und Daten können nicht zurück in den Container geschrieben werden. -
<storage_account>= Name des Speicherkontos der Azure-Ressource
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Die PDW-Engine überprüft die Existenz der externen Datenquelle nicht, wenn das Objekt erstellt wird. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
- Verwenden Sie beim Abfragen von Hadoop für alle Tabellen die gleiche externe Datenquelle, um eine konsistente Abfragesemantik zu ermöglichen.
-
wasbswird empfohlen, da Daten mithilfe einer sicheren TLS-Verbindung gesendet werden. - Hierarchische Namespaces werden bei Verwendung mit Azure Storage-Konten über wasb:// nicht unterstützt.
- Für erfolgreiche PolyBase-Abfragen während eines Hadoop-
Namenode-Failovers sollten Sie in Betracht ziehen, eine virtuelle IP-Adresse für denNamenodedes Hadoop-Clusters zu verwenden. Führen Sie in diesem Beispiel ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
- Wenn Sie Daten aus Azure Storage in Azure Synapse oder PDW laden möchten, verwenden Sie einen Azure Storage-Schlüssel.
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.
TYP = * [ HADOOP ] *
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich.
- Verwenden Sie HADOOP, wenn die externe Datenquelle Cloudera CDH, Hortonworks HDP oder Azure Storage ist.
Ein Beispiel für die Verwendung von TYPE = HADOOP zum Laden von Daten aus Azure Storage finden Sie unter Erstellen einer externen Datenquelle für Verweise auf Hadoop.
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'
Geben Sie in SQL Server 2019 (15.x) nicht RESOURCE_MANAGER_LOCATION an, es sei denn, eine Verbindung mit Cloudera CDH, Hortonworks HDP, einem Azure Storage-Konto.
Konfigurieren Sie diesen optionalen Wert nur, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen. Eine vollständige Liste der unterstützten Hadoop-Versionen finden Sie unter PolyBase-Konnektivitätskonfiguration.
Wenn RESOURCE_MANAGER_LOCATION definiert ist, trifft der Abfrageoptimierer zur Verbesserung der Leistung eine kostenorientierte Entscheidung. Ein MapReduce-Auftrag kann zum Übertragen der Berechnung an Hadoop verwendet werden. Das Angeben von RESOURCE_MANAGER_LOCATION kann das Volume der zwischen Hadoop und SQL transferierten Daten erheblich reduzieren, was wiederum zu einer verbesserten Abfrageleistung führen kann.
Wenn der Ressourcen-Manager nicht angegeben ist, wird die Weitergabe der Berechnung an Hadoop für PolyBase-Abfragen deaktiviert. Erstellen einer externen Datenquelle zum Verweisen auf Hadoop mit aktivierter Weitergabe stellt ein konkretes Beispiel und weitere Anleitungen bereit.
Der RESOURCE_MANAGER_LOCATION Wert wird beim Erstellen der externen Datenquelle nicht überprüft. Das Eingeben eines falschen Werts kann zu Einem Abfragefehler bei der Ausführung führen, wenn ein Pushdown versucht wird, da der angegebene Wert nicht aufgelöst werden kann.
Damit PolyBase ordnungsgemäß mit einer externen Hadoop-Datenquelle funktioniert, müssen die Ports für die folgenden Hadoop-Clusterkomponenten geöffnet sein:
- HDFS-Ports
- NameNode
- Datanode
- Ressourcenmanager
- Auftragsübermittlung
- Auftragsverlauf
Wenn kein Port angegeben ist, wird der Standardwert mithilfe der aktuellen Einstellung für die Konfiguration von „Hadoop Connectivity“ ausgewählt.
| Hadoop-Konnektivität | Standardport des Ressourcen-Managers |
|---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
Die folgende Tabelle zeigt die Standardports für diese Komponenten. Es gibt Hadoop-Versionsabhängigkeiten sowie die Möglichkeit einer benutzerdefinierten Konfiguration, die die Standardportzuweisung nicht verwendet.
| Hadoop-Clusterkomponente | Standardport |
|---|---|
| NameNode | 8020 |
| DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
| DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
| Ressourcen-Manager-Auftragsübermittlung (Hortonworks 1.3) | 50300 |
| Ressourcen-Manager-Auftragsübermittlung (Cloudera 4.3) | 8021 |
| Resource Manager Job Submission (Hortonworks 2.0 unter Windows, Cloudera 5.x unter Linux) | 8032 |
| Resource Manager Job Submission (Hortonworks 2.x, 3.0 unter Linux, Hortonworks 2.1-3 unter Windows) | 8050 |
| Ressourcen-Manager-Auftragsverlauf | 10020 |
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in Analytics Platform System (PDW).
Hinweis
In vorherigen Releases von PDW waren ALTER ANY EXTERNAL DATA SOURCE-Berechtigungen beim Erstellen von externen Datenquellen erforderlich.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Sicherheit
PolyBase unterstützt die proxybasierte Authentifizierung für die meisten externen Datenquellen. Erstellen Sie datenbankweit gültige Anmeldeinformationen, um das Proxykonto zu erstellen.
Ein SAS-Token mit Typ HADOOP wird nicht unterstützt. Es wird nur mit Typ BLOB_STORAGE unterstützt, wenn stattdessen ein Speicherkonto-Zugriffsschlüssel verwendet wird. Beim Erstellen einer externen Datenquelle mit dem Typ HADOOP und SAS-Anmeldeinformationen tritt folgender Fehler auf:
Msg 105019, Level 16, State 1 - EXTERNAL TABLE access failed due to internal error: 'Java exception raised on call to HdfsBridge_Connect. Java exception message: Parameters provided to connect to the Azure storage account aren't valid.: Error [Parameters provided to connect to the Azure storage account aren't valid.] occurred while accessing external file.'
Beispiele
Ein. Erstellen einer externen Datenquelle, um auf Hadoop zu verweisen
Geben Sie den Computernamen oder die IP-Adresse von Hadoop-Namenode und des Ports an, um eine externe Datenquelle zu erstellen, die auf Hortonworks HDP oder Cloudera CDH verweist.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050'
);
B. Erstellen einer externen Datenquelle, um mit der aktivierten Weitergabe auf Hadoop zu verweisen
Geben Sie die Option RESOURCE_MANAGER_LOCATION an, um die Berechnung für PolyBase-Abfragen an Hadoop weiterzugeben. Nach der Aktivierung trifft PolyBase eine kostenorientierte Entscheidung, um zu bestimmen, ob die Abfrageberechnung an Hadoop weitergegeben werden soll.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8020',
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
C. Erstellen einer externen Datenquelle, um auf Kerberos-gesicherte Hadoop-Software zu verweisen
Überprüfen Sie den Wert der hadoop.security.authentication-Eigenschaft in der Datei „Hadoop-core-site.xml“, um zu überprüfen, ob der Hadoop-Cluster durch Kerberos geschützt wird. Um auf ein Kerberos-gesichertes Hadoop-Cluster zu verweisen, müssen Sie datenbankweit gültige Anmeldeinformationen angeben, die Ihren Kerberos-Benutzernamen und Ihr Kennwort enthalten. Der Hauptschlüssel der Datenbank wird verwendet, um datenbankspezifische Anmeldeinformationen zu verschlüsseln.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Kerberos user name and password.
CREATE DATABASE SCOPED CREDENTIAL HadoopUser1
WITH IDENTITY = '<hadoop_user_name>',
SECRET = '<hadoop_password>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
TYPE = HADOOP,
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);
D: Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“
In diesem Beispiel ist die externe Datenquelle ein Azure Storage-Konto (V2) namens logs. Der Lagerbehälter heißt daily. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden beim Zugriff auf Daten über die wasb:// Schnittstelle nicht unterstützt. Beim Herstellen einer Verbindung mit dem Azure Storage über wasb oder wasbsmuss die Authentifizierung mit einem Speicherkontoschlüssel erfolgen, nicht mit einer freigegebenen Zugriffssignatur (SAS).
Dieses Beispiel zeigt, wie Sie die datenbankweit gültigen Anmeldeinformationen für die Authentifizierung für Azure Storage erstellen. Geben Sie den Azure-Speicherkontoschlüssel in den Anmeldeinformation für die Datenbank an. Sie können eine beliebige Zeichenfolge in der datenbankweit gültigen Identität der Anmeldeinformationen angeben, da sie nicht für die Authentifizierung bei Azure Storage verwendet wird.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = '<my_account>',
SECRET = '<azure_storage_account_key>';
-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
TYPE = HADOOP,
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential
);
Verwandte Inhalte
* SQL Managed Instance *
Übersicht: Verwaltete Azure SQL-Instanz
Gilt für: Azure SQL Managed Instance
Hiermit wird eine externe Datenquelle in Azure SQL Managed Instance erstellt. Weitere Informationen finden Sie unter Datenvirtualisierung mit Azure SQL Managed Instance.
Die Datenvirtualisierung in azure SQL Managed Instance ermöglicht den Zugriff auf externe Daten in einer Vielzahl von Dateiformaten über OPENROWSET oder CREATE EXTERNAL TABLE.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Speicherort-Präfix | Location path (Pfad zum Speicherort) |
|---|---|---|
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | abs |
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name> |
| Azure Data Lake Service Gen2 | adls |
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name> |
Beim Erstellen des Objekts überprüft die Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
ANMELDEINFORMATIONEN = credential_name
Gibt die datenbankbezogenen Anmeldeinformationen für die Authentifizierung mit der externen Datenquelle an.
Zusätzliche Hinweise und Anweisungen für das Erstellen der Anmeldeinformationen:
- Verwenden Sie zum Laden von Daten aus Azure Storage in Azure SQL Managed Instance ein SAS-Token (Shared Access Signature).
-
CREDENTIAList nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAList für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich. - Wenn Anmeldeinformationen erforderlich sind, müssen diese mithilfe von
Managed IdentityoderSHARED ACCESS SIGNATUREals IDENTITY erstellt werden. Informationen zum Erstellen von Anmeldeinformationen mit Datenbankbereich finden Sie unter CREATE DATABASE SCOPED CREDENTIAL.
Gehen Sie wie folgt vor, um die verwaltete Dienstidentität für die datenbankbezogenen Anmeldeinformationen zu verwenden:
Geben Sie
WITH IDENTITY = 'Managed Identity'an.Verwenden Sie die vom System zugewiesene verwaltete Dienstidentität der verwalteten Azure SQL-Instanz, die aktiviert werden muss, wenn sie zu diesem Zweck verwendet werden soll.
- Gewähren Sie der systemseitig zugewiesenen verwalteten Dienstidentität von Azure SQL Managed Instance die Azure RBAC-Rolle Leser für die erforderlichen Azure Blob Storage-Container. Informationen zur Verwendung des Azure-Portals finden Sie unter Zuweisen von Azure-Rollen über das Azure-Portal.
Gehen Sie wie folgt vor, um eine Shared Access Signature (SAS) für die datenbankbezogenen Anmeldeinformationen zu erstellen:
Geben Sie
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...an.Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
- Sie können ein SAS-Token abrufen, indem Sie zum Azure-Portal navigieren –>< Your_Storage_Account> – Signatur für freigegebenen Zugriff –> Berechtigungen konfigurieren –>> SAS- und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
- Sie können ein SAS mit Azure Storage Explorer erstellen und konfigurieren.
- Sie können ein SAS-Token programmgesteuert über PowerShell, Azure CLI, .NET und REST-API erstellen. Weitere Informationen finden Sie unter Gewähren von eingeschränktem Zugriff auf Azure Storage-Ressourcen mithilfe von SAS (Shared Access Signature).
Das SAS-Token sollte wie folgt konfiguriert werden:
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
?aus. - Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
- Wenn ein SAS-Token generiert wird, enthält es am Anfang des Tokens ein Fragezeichen ('?'). Schließen Sie bei der Konfiguration als SECRET das führende
Für die zu ladende Datei (z. B.
srt=o&sp=r) müssen Sie mindestens Leseberechtigung erteilen. Für verschiedene Anwendungsfälle können mehrere Shared Access Signatures erstellt werden. Berechtigungen sollten wie folgt erteilt werden:Aktion Berechtigung Lesen von Daten aus einer Datei Lesen Lesen von Daten aus mehreren Dateien und Unterordnern Lesen und Auflisten Verwenden Sie Create External Table as Select (CETAS) Lesen, Erstellen und Schreiben
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in Azure SQL Managed Instance.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Beispiele
Weitere Beispiele finden Sie unter Datenvirtualisierung mit Azure SQL Managed Instance.
Ein. Abfragen externer Daten aus Azure SQL Managed Instance mit OPENROWSET oder einer externen Tabelle
Weitere Beispiele finden Sie unter CREATE EXTERNAL DATA SOURCE oder see Data Virtualization with Azure SQL Managed Instance.
Erstellen Sie den Datenbank-Hauptschlüssel, falls er nicht vorhanden ist.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GOErstellen Sie die datenbankbezogenen Anmeldeinformationen mithilfe eines SAS-Tokens. Sie können auch eine verwaltete Identität verwenden.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GOErstellen Sie die externe Datenquelle mithilfe der Anmeldeinformationen.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest', CREDENTIAL = [MyCredential] );Rufen Sie die Parquet-Datendatei in der externen Datenquelle mithilfe der T-SQL-Syntax OPENROWSET ab, die auf Schemarückschlüssen basiert, um Daten ohne Kenntnisse über das Schema zu untersuchen.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'parquet' ) AS filerows;Oder abfragen Sie Daten mit OPENROWSET der WITH-Klausel ab, anstatt sich auf schemainferenz zu verlassen, was die Abfrageausführungskosten in Frage stellen kann. In einer CSV-Datei wird die Schemaferenz nicht unterstützt.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource', FORMAT = 'CSV', FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;Alternativ können Sie ein externes Dateiformat (EXTERNAL FILEFORMAT) und eine externe Tabelle (EXTERNAL TABLE) erstellen, um die Daten wie bei einer lokalen Tabelle abzufragen.
-- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE --Create external file format CREATE EXTERNAL FILE FORMAT DemoFileFormat WITH (FORMAT_TYPE = PARQUET) GO --Create external table: CREATE EXTERNAL TABLE tbl_TaxiRides ( vendorID VARCHAR(100) COLLATE Latin1_General_BIN2, tpepPickupDateTime DATETIME2, tpepDropoffDateTime DATETIME2, passengerCount INT, tripDistance FLOAT, puLocationId VARCHAR(8000), doLocationId VARCHAR(8000), startLon FLOAT, startLat FLOAT, endLon FLOAT, endLat FLOAT, rateCodeId SMALLINT, storeAndFwdFlag VARCHAR(8000), paymentType VARCHAR(8000), fareAmount FLOAT, extra FLOAT, mtaTax FLOAT, improvementSurcharge VARCHAR(8000), tipAmount FLOAT, tollsAmount FLOAT, totalAmount FLOAT ) WITH ( LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet', DATA_SOURCE = NYCTaxiExternalDataSource, FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/ ); GO --Then, query the data via an external table with T-SQL: SELECT TOP 10 * FROM tbl_TaxiRides; GO
Verwandte Inhalte
*Microsoft Fabric Data Warehouse*
Übersicht: Microsoft Fabric Data Warehouse
Gilt für: Fabric Data Warehouse
Erstellt eine externe Datenquelle.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( LOCATION = '<prefix>://<path>[:<port>]' )
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
| Externe Datenquelle | Speicherort-Präfix | Location path (Pfad zum Speicherort) |
|---|---|---|
| Azure Blob Storage (Speicherdienst von Azure für unstrukturierte Daten) | https |
https://<storage_account>.blob.core.windows.net/<container>/<path> |
| Azure Data Lake Service Gen2 | abfss |
abfss://<container>@<storage_account>.dfs.core.windows.net/<path> |
Beim Erstellen des Objekts überprüft die Datenbank-Engine die Existenz der externen Datenquelle nicht.
Fügen Sie keine nachfolgenden /Parameter, Dateinamen oder Signaturparameter für den freigegebenen Zugriff am Ende der LOCATION URL hinzu, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
Berechtigungen
Wenn das Zielspeicherkonto privat ist, muss der Prinzipal auch über die Berechtigung für die Lesezugriffsdateien verfügen.
- Für Azure Data Lake Storage und Azure Blob Storage muss der Prinzipal die Rolle " Storage Blob Data Reader " (oder höher) auf Container- oder Speicherkontoebene zugewiesen haben.
- Für Fabric One Lake-Speicher muss der Prinzipal über "ReadAll"-Berechtigungen verfügen.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Beispiele
Ein. Abfragen externer Daten mit OPENROWSET oder einer externen Tabelle
Erstellen Sie die externe Datenquelle.
--Create external data source pointing to the file path, and referencing database-scoped credential: CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource WITH ( LOCATION = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest' );Rufen Sie die Parquet-Datendatei in der externen Datenquelle mithilfe der T-SQL-Syntax OPENROWSET ab, die auf Schemarückschlüssen basiert, um Daten ohne Kenntnisse über das Schema zu untersuchen.
--Query data with OPENROWSET, relying on schema inference. SELECT TOP 10 * FROM OPENROWSET ( BULK 'bing_covid-19_data.parquet', DATA_SOURCE = 'MyPrivateExternalDataSource' );Oder abfragen Sie Daten mit OPENROWSET der WITH-Klausel ab, anstatt sich auf schemainferenz zu verlassen, was die Abfrageausführungskosten in Frage stellen kann.
--Or, query data using the WITH clause on a CSV, where schema inference is not supported SELECT TOP 10 id, updated, confirmed, confirmed_change FROM OPENROWSET ( BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyPrivateExternalDataSource' FIRSTROW = 2 ) WITH ( id INT, updated DATE, confirmed INT, confirmed_change INT ) AS filerows;
Verwandte Inhalte
* Fabric SQL-Datenbank *
Überblick: SQL-Datenbank in Microsoft Fabric
Gilt für: SQL-Datenbank in Microsoft Fabric
Erstellt eine externe Datenquelle für die Datenvirtualisierung in einer SQL-Datenbank in Fabric.
Transact-SQL-Syntaxkonventionen
Syntax
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ ; ]
Argumente
data_source_name
Gibt den benutzerdefinierten Namen für die Datenquelle an. Dieser Name muss innerhalb der Datenbank eindeutig sein.
LOCATION = '<prefix>://<path[:p ort]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
Die SQL-Datenbank von Fabric unterstützt nur OneLake (abfss) als Datenquelle.
| Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) | Verfügbarkeit |
|---|---|---|---|
| OneLake | abfss |
abfss://<workspaceid>@<tenant>.dfs.fabric.microsoft.com/ |
Fabric SQL-Datenbank |
Zusätzliche Hinweise und Anweisungen für das Festlegen des Speicherorts:
- Beim Erstellen des Objekts überprüft die Datenbank-Engine die Existenz der externen Datenquelle nicht. Erstellen Sie zum Überprüfen mithilfe der externe Datenquelle eine externe Tabelle.
Berechtigungen
Erfordert die Berechtigung CONTROL für eine Datenbank in Azure SQL-Datenbank.
Sperren
Eine gemeinsame Sperre für das EXTERNAL DATA SOURCE-Objekt wird zugelassen.
Beispiele
Ein. Erstelle eine externe Datenquelle in einem Lakehouse-Dateiordner
Dieses Beispiel besteht darin, eine externe Datenquelle mit einem Lakehouse zu MyLakeHouse verbinden, um auf Parquet- und CSV-Dateien zuzugreifen, die hochgeladen wurden. Diese Dateien in diesem Beispiel befinden sich im Files Verzeichnis unter dem Contoso Ordner.
Um eine Fabric Lakehouse-Datenquelle zu erstellen, müssen Sie Workspace-ID, Tenant und Lakehouse-ID angeben. Um den ABFSS-Dateistandort eines Seehauses zu finden, gehe zum Fabric-Portal. Navigiere zu deinem Lakehouse, gehe zum gewünschten Ordnerstandort und wähle ..., Eigenschaften. Kopiere den ABFS-Pfad, der ungefähr so aussieht: abfss://<WorkSpaceID>@<Tenant>.dfs.fabric.microsoft.com/<LakehouseID>/Files/Contoso.
Da die Fabric SQL-Datenbank nur die Entra-ID-Passthrough-Authentifizierung unterstützt, muss keine datenbankbezogene Zugangsdaten bereitgestellt werden; die Verbindung verwendet immer die Anmeldedaten des Benutzers, um auf den Standort zuzugreifen.
CREATE EXTERNAL DATA SOURCE MyLakeHouse
WITH (
LOCATION = 'abfss://<workspace id>@<tenant>.dfs.fabric.microsoft.com/<lakehouseid>/Files/Contoso'
);