CREATE EXTERNAL DATA SOURCE (Transact-SQL)
Erstellt eine externe Datenquelle für Abfragen mithilfe von SQL Server, Azure SQL-Datenbank, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) oder Azure SQL Edge.
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) 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 Laden von Dateien mithilfe von PolyBase
- Massenladevorgänge mit
BULK INSERT
oderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus.
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.
Syntax für SQL Server 2016
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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[:port]>'
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 vonNamenode
im 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.
wasbs
ist 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 denNamenode
des Hadoop-Clusters zu verwenden. Falls nicht, führen Sie den Befehl ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
CREDENTIAL = 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.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ HADOOP ]
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. In SQL Server 2016 ist dieser Parameter immer erforderlich und sollte nur als HADOOP
angegeben 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[:port]'
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 Connectivity Configuration (Transact-SQL) (Konfiguration der PolyBase-Netzwerkkonnektivität (Transact-SQL)).
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 nicht überprüft, wenn Sie die externe Datenquelle erstellen. Das Eingeben eines falschen Werts verursacht zum Zeitpunkt der Ausführung einer Weitergabe gegebenenfalls einen Abfragefehler, da sich der bereitgestellte Wert nicht auflösen 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 Connectivity | 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 und möglicherweise benutzerdefinierte Konfigurationen, die nicht die Standardportzuweisung verwenden.
Hadoop-Clusterkomponente | Standardport |
---|---|
NameNode | 8020 |
DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
Resource Manager Job Submission (Hortonworks 1.3) | 50300 |
Resource Manager Job Submission (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 |
Resource Manager Job History | 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.
A. 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 (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
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 (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
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 (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
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 Speichercontainer heißt daily
. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden für den 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. Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
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 (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Nächste Schritte
Übersicht: SQL Server 2017
Gilt für: Nur 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 Laden von Dateien mithilfe von PolyBase
- Massenladevorgänge mit
BULK INSERT
oderOPENROWSET
Hinweis
Diese Syntax variiert abhängig von der SQL Server-Version für Linux. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus.
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. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus.
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.
Syntax für SQL Server 2017
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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[:port]>'
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 vonNamenode
im 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 überODBC
verbinden. wasbs
ist 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 denNamenode
des Hadoop-Clusters zu verwenden. Falls nicht, führen Sie den Befehl ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
CREDENTIAL = 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:
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.- Wenn
TYPE
=BLOB_STORAGE
, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATURE
als Identität erstellt werden. TYPE
=BLOB_STORAGE
ist nur für Massenvorgänge zulässig. Sie können mitTYPE
=BLOB_STORAGE
keine externen Tabellen für eine externe Datenquelle erstellen.- Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
- Wenn
TYPE
=HADOOP
, müssen die Anmeldeinformationen mithilfe des Speicherkontoschlüssels alsSECRET
erstellt werden.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Um ein SAS-Token zu erstellen, navigieren Sie zu Azure-Portal ><Your_Storage_Account> -> Shared Access Signature > Berechtigungen konfigurieren > SAS und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können mit dem Azure Storage-Explorer eine SAS erstellen und konfigurieren.
Unter Verwendung von PowerShell, der Azure CLI, .NET und der REST-API können Sie eine SAS programmgesteuert 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 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).
- 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 - Wenn ein SAS-Token generiert wird, enthält es am Anfang ein Fragezeichen („?“). Schließen Sie bei der Konfiguration als SECRET das führende
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.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
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 Sie
BLOB_STORAGE
, wenn Sie Massenvorgänge mit BULK INSERT oder OPENROWSET über ein Azure Storage-Konto ausführen. Eingeführt in SQL Server 2017 (14.x) Verwenden SieHADOOP
, wenn Sie CREATE EXTERNAL TABLE für Azure Storage verwenden möchten.
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[:port]'
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 Connectivity Configuration (Transact-SQL) (Konfiguration der PolyBase-Netzwerkkonnektivität (Transact-SQL)).
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 nicht überprüft, wenn Sie die externe Datenquelle erstellen. Das Eingeben eines falschen Werts verursacht zum Zeitpunkt der Ausführung einer Weitergabe gegebenenfalls einen Abfragefehler, da sich der bereitgestellte Wert nicht auflösen 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 Connectivity | 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. Beachten Sie, dass Hadoop-Versionsabhängigkeiten sowie die Möglichkeit bestehen, dass eine benutzerdefinierte Konfiguration die Standardportzuweisung nicht verwendet.
Hadoop-Clusterkomponente | Standardport |
---|---|
NameNode | 8020 |
DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
Resource Manager Job Submission (Hortonworks 1.3) | 50300 |
Resource Manager Job Submission (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 |
Resource Manager Job History | 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 des Typs 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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
A. 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 (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
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 (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
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 (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
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 Speichercontainer heißt daily
. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden für den Zugriff auf Daten über die wasb://
-Schnittstelle nicht unterstützt. Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
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 (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Beispiele: Massenvorgänge
Wichtig
An das Ende der LOCATION
-URL darf kein / , Dateiname oder Shared Access Signature-Parameter hinzugefügt werden, 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öher
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_storage_account_key>';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
Dies wird beim BULK INSERT-Beispiel praktisch veranschaulicht.
Nächste Schritte
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- Konfiguration der PolyBase-Netzwerkkonnektivität
Übersicht: SQL Server 2019
Gilt für: SQL Server 2019 (15.x) und höher
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 Laden von Dateien mithilfe von PolyBase
- Massenladevorgänge mit
BULK INSERT
oderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus.
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. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus.
Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) finden Sie unter CREATE EXTERNAL DATA SOURCE.
Syntax für SQL Server 2019
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 } ]
[ [ , ] 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[:port]>'
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 |
Oracle | 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 vonNamenode
im 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
sqlserver
kö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 überODBC
verbinden. - Die Verwendung von
wasbs
oderabfss
ist 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
abfs
oderabfss
ab 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 denNamenode
des Hadoop-Clusters zu verwenden. Falls nicht, führen Sie den Befehl ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen. - Die Typen
sqlhdfs
undsqldatapool
werden zum Herstellen einer Verbindung zwischen der Masterinstanz und dem Speicherpool eines Big Data-Clusters unterstützt. Verwenden Siehdfs
für Cloudera CDH oder Hortonworks HDP. Weitere Informationen zur Verwendung vonsqlhdfs
zum 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 externe Datenquellen von HDFS Cloudera (CDP) und Hortonworks (HDP) wird eingestellt und nicht in SQL Server 2022 (16.x) enthalten sein. Weitere Informationen finden Sie unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.
CONNECTION_OPTIONS = key_value_pair
Nur für SQL Server 2019 (15.x) und höher 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.
Ab SQL Server 2019 (15.x) mit kumulativem Update 19 wurden zusätzliche Schlüsselwörter zur Unterstützung von Oracle TNS-Dateien eingeführt:
- Das Schlüsselwort
TNSNamesFile
gibt den Dateipfad zur Dateitnsnames.ora
an, die sich auf dem Oracle-Server befindet. - Das Schlüsselwort
ServerName
gibt den Alias an, der in der Dateitnsnames.ora
verwendet wird, um den Hostnamen und den Port zu ersetzen.
Pushdown = ON | OFF
Nur für SQL Server 2019 (15.x) angegeben. Gibt an, ob die Berechnung an die externe Datenquelle weitergegeben werden kann. Diese Option ist standardmäßig auf ON festgelegt.
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.
CREDENTIAL = 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:
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.- Wenn
TYPE
=BLOB_STORAGE
, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATURE
als Identität erstellt werden.TYPE
=BLOB_STORAGE
ist nur für Massenvorgänge zulässig. Sie können mitTYPE
=BLOB_STORAGE
keine externen Tabellen für eine externe Datenquelle erstellen.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Um ein SAS-Token zu erstellen, navigieren Sie zu Azure-Portal ><Your_Storage_Account> -> Shared Access Signature > Berechtigungen konfigurieren > SAS und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können mit dem Azure Storage-Explorer eine SAS erstellen und konfigurieren.
Unter Verwendung von PowerShell, der Azure CLI, .NET und der REST-API können Sie eine SAS programmgesteuert 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 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).
- 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 - Wenn ein SAS-Token generiert wird, enthält es am Anfang ein Fragezeichen („?“). Schließen Sie bei der Konfiguration als SECRET das führende
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.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
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 TYPE in SQL Server 2019 (15.x) nur an, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen.
- 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 Sie
BLOB_STORAGE
, wenn Sie Massenvorgänge mit BULK INSERT oder OPENROWSET mit SQL Server 2017 (14.x) über ein Azure Storage-Konto ausführen. Verwenden SieHADOOP
, wenn Sie CREATE EXTERNAL TABLE für Azure Storage verwenden möchten. - 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. 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[:port]'
Geben Sie RESOURCE_MANAGER_LOCATION in SQL Server 2019 (15.x) nur an, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen.
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 Connectivity Configuration (Transact-SQL) (Konfiguration der PolyBase-Netzwerkkonnektivität (Transact-SQL)).
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 nicht überprüft, wenn Sie die externe Datenquelle erstellen. Das Eingeben eines falschen Werts verursacht zum Zeitpunkt der Ausführung einer Weitergabe gegebenenfalls einen Abfragefehler, da sich der bereitgestellte Wert nicht auflösen 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 Connectivity | 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. Beachten Sie, dass Hadoop-Versionsabhängigkeiten sowie die Möglichkeit bestehen, dass eine benutzerdefinierte Konfiguration die Standardportzuweisung nicht verwendet.
Hadoop-Clusterkomponente | Standardport |
---|---|
NameNode | 8020 |
DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
Resource Manager Job Submission (Hortonworks 1.3) | 50300 |
Resource Manager Job Submission (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 |
Resource Manager Job History | 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 des Typs 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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Beispiele
Wichtig
Informationen zum Installieren und Aktivieren von PolyBase finden Sie unter Installieren von PolyBase unter Windows.
A. 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 die Weitergabe der Berechnung dieser 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',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
Optional kann die externe Datenquelle für Oracle die Proxyauthentifizierung verwenden, um eine differenzierte Zugriffssteuerung zu ermöglichen. 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 TNSNamesFile
angegebenen Dateispeicherort tnsnames.ora
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 (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
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 (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
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 (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
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 Speichercontainer heißt daily
. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden für den Zugriff auf Daten über die wasb://
-Schnittstelle nicht unterstützt. Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
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 (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
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. Darüber hinaus müssen Sie entweder die Verfügbarkeitsdatenbank wie Database={dbname}
in CONNECTION_OPTIONS
festlegen 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 CONNECTION_OPTIONS
als Standarddatenbank für die Anmeldung in den Anmeldeinformationen für die Datenbank einbezogen Database=dbname
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
An das Ende der LOCATION
-URL darf kein / , Dateiname oder Shared Access Signature-Parameter hinzugefügt werden, 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. 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 = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
Dies wird beim BULK INSERT-Beispiel praktisch veranschaulicht.
I. 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 Speichercontainer heißt daily
. Die externe Azure Data Lake Storage Gen2-Datenquelle ist nur für die Datenübertragung vorgesehen, da Prädikatpushdowns nicht unterstützt werden.
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 (
LOCATION = 'abfss://daily@logs.dfs.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
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
);
Nächste Schritte
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- Konfiguration der PolyBase-Netzwerkkonnektivität
Übersicht: SQL Server 2022
Gilt für: SQL Server 2022 (16.x) und höher
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 Laden von Dateien mithilfe von PolyBase
- Massenladevorgänge mit
BULK INSERT
oderOPENROWSET
Hinweis
Diese Syntax variiert je nach SQL Server-Version. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus. Dieser Inhalt gilt für SQL Server 2022 (16.x) und höher.
Syntax für SQL Server 2022 und höher
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[:port]>'
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/ or 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/ or 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 |
Oracle | 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
sqlserver
kö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 überODBC
verbinden. - Die Option für hierarchische Namespaces für Azure Storage-Konten (v2) mit Verwendung von Präfix
adls
wird 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 in SQL Server 2022 (16.x) nicht erforderlich, das TYPE-Argument 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]
inabs
geä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]
inadls
geä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 Data Lake Gen2 unterstützt:
adls://<container>@<storage_account_name>.blob.core.windows.net
(empfohlen) oderadls://<storage_account_name>.dfs.core.windows.net/<container>
.
- Azure Storage Account v2:
- Der LOCATION-Pfad kann die folgenden Formate verwenden:
CONNECTION_OPTIONS = key_value_pair
Nur für SQL Server 2019 (15.x) und höher 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 version Applies to: SQL Server 2022 (16.x) kumulatives Update 2, zusätzliche Schlüsselwörter wurden eingeführt, um Oracle TNS-Dateien zu unterstützen:
- Das Schlüsselwort
TNSNamesFile
gibt den Dateipfad zur Dateitnsnames.ora
an, die sich auf dem Oracle-Server befindet. - Das Schlüsselwort
ServerName
gibt den Alias an, der in der Dateitnsnames.ora
verwendet wird, um den Hostnamen und den Port zu ersetzen.
PUSHDOWN = ON | OFF
Gilt für: SQL Server 2019 (15.x) und höher. Gibt an, ob die Berechnung an die externe Datenquelle weitergegeben werden kann. Diese Option 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 der Weitergabe auf Abfrageebene erfolgt über einen Hinweis.
CREDENTIAL = 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:
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist 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
IDENTITY
SHARED ACCESS SIGNATURE
sein.- 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:
Um ein SAS-Token zu erstellen, navigieren Sie zu Azure-Portal ><Your_Storage_Account> -> Shared Access Signature > Berechtigungen konfigurieren > SAS und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können mit dem Azure Storage-Explorer eine SAS erstellen und konfigurieren.
Unter Verwendung von PowerShell, der Azure CLI, .NET und der REST-API können Sie eine SAS programmgesteuert 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 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).
- 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 - Wenn ein SAS-Token generiert wird, enthält es am Anfang ein Fragezeichen („?“). Schließen Sie bei der Konfiguration als SECRET das führende
Für Azure Blob Storage und Azure Data Lake Gen 2:
- Zulässige Dienste:
Blob
muss ausgewählt werden, um das SAS-Token zu generieren. - Zulässige Ressourcentypen:
Container
undObject
müssen ausgewählt werden, um das SAS-Token zu generieren.
- Zulässige Dienste:
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.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
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 manuell neu zu erstellen, die zuvor mit TYPE = HADOOP
erstellt wurden, und alle externen Tabellen, die diese externe Datenquelle verwenden.
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 | From | Beschreibung |
---|---|---|
Azure Blob Storage | 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.
A. 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 die Weitergabe der Berechnung dieser 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',
CREDENTIAL = OracleProxyAccount,
PUSHDOWN = ON
);
Optional kann die externe Datenquelle für Oracle die Proxyauthentifizierung verwenden, um eine differenzierte Zugriffssteuerung zu ermöglichen. 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 Bezieht sich auf: SQL Server 2022 (16.x) Kumulatives Update 2, CREATE EXTERNAL DATA SOURCE
unterstützt 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 TNSNamesFile
angegebenen Dateispeicherort tnsnames.ora
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. Darüber hinaus müssen Sie entweder die Verfügbarkeitsdatenbank wie Database={dbname}
in CONNECTION_OPTIONS
festlegen 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 CONNECTION_OPTIONS
als Standarddatenbank für die Anmeldung in den Anmeldeinformationen für die Datenbank einbezogen Database=dbname
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)
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; als Referenz verwenden Sie die nachfolgende 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ö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; TYPE = BLOB_STORAGE
wird nicht mehr benötigt.
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
An das Ende der LOCATION
-URL darf kein / , Dateiname oder Shared Access Signature-Parameter hinzugefügt werden, 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öher.
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,
);
Nächste Schritte
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
- Konfiguration der PolyBase-Netzwerkkonnektivität
* 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:
- Massenladevorgänge mit
BULK INSERT
oderOPENROWSET
- Abfragen von SQL-Datenbank- oder Azure Synapse-Remoteinstanzen mithilfe von SQL-Datenbank mit elastischen Abfragen
- Abfragen einer Shard-SQL-Datenbank mithilfe elastischer Abfragen
Syntax
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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[:port]>'
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 ist es nicht erforderlich, einen Pfad- oder Portwert anzugeben. |
Kafka | kafka |
kafka://<kafka_bootstrap_server_name_ip>:<port_number> |
Nur in Azure SQL Edge verfügbar. |
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_NAME
wird 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.
CREDENTIAL = 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).
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.- Wenn
TYPE
=BLOB_STORAGE
, müssen die Anmeldeinformationen mithilfe vonSHARED ACCESS SIGNATURE
als Identität erstellt werden. - Wenn Sie über den WASB[s]-Connector eine Verbindung mit Azure Storage herstellen, muss die Authentifizierung über einen Speicherkontoschlüssel und nicht über eine Shared Access Signature (SAS) erfolgen.
- Wenn
TYPE
=HADOOP
, müssen die Anmeldeinformationen mithilfe des Speicherkontoschlüssels alsSECRET
erstellt werden. TYPE
=BLOB_STORAGE
ist nur für Massenvorgänge zulässig. Sie können mitTYPE
=BLOB_STORAGE
keine externen Tabellen für eine externe Datenquelle erstellen.
Es gibt mehrere Möglichkeiten, eine Shared Access Signature zu erstellen:
Um ein SAS-Token zu erstellen, navigieren Sie zu Azure-Portal ><Your_Storage_Account> -> Shared Access Signature > Berechtigungen konfigurieren > SAS und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
Sie können mit dem Azure Storage-Explorer eine SAS erstellen und konfigurieren.
Unter Verwendung von PowerShell, der Azure CLI, .NET und der REST-API können Sie eine SAS programmgesteuert 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 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).
- 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 - Wenn ein SAS-Token generiert wird, enthält es am Anfang ein Fragezeichen („?“). Schließen Sie bei der Konfiguration als SECRET das führende
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.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]
Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich.
- Verwenden Sie
RDBMS
fü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. - Verwenden Sie
BLOB_STORAGE
beim Ausführen von Massenvorgängen mit BULK INSERT oder OPENROWSET.
Wichtig
Legen Sie TYPE
nicht fest, 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.
TYPE | 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 externe Datenquelle, bei der TYPE
= RDBMS
ist, finden Sie unter Erstellen einer externen RDBMS-Datenquelle.
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
A. 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
An das Ende der LOCATION
-URL darf kein / , Dateiname oder Shared Access Signature-Parameter hinzugefügt werden, 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. 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 = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';
CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
CREDENTIAL = AccessAzureInvoices,
TYPE = BLOB_STORAGE
);
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.
A. Erstellen einer externen Datenquelle für einen Verweis auf Kafka
Gilt für: Nur Azure 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 Streamen von Daten und unterstützt keinen Prädikatpushdown.
-- 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: Nur Azure 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 dient nur zum Streamen von Daten und unterstützt keinen Prädikatpushdown.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (LOCATION = 'edgehub://');
Nächste Schritte
* Azure Synapse
Analytics *
Ü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 von Azure Synapse Analytics-Ressourcen mithilfe von Azure SQL-Datenbank mit einer elastischen Abfrage finden Sie unter SQL-Datenbank.
Syntax
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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.
LOCATION = '<prefix>://<path>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
Externe Datenquelle | Präfix für Connectorspeicherort | Location path (Pfad zum Speicherort) |
---|---|---|
Data Lake Storage* Gen1 | adl |
<storage_account>.azuredatalake.net |
Data Lake Storage Gen2 | abfs[s] |
<container>@<storage_account>.dfs.core.windows.net |
Azure Blob Storage | wasbs |
<container>@<storage_account>.blob.core.windows.net |
Azure Blob Storage | 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 |
---|---|---|---|---|
Data Lake Storage** Gen1 | adl |
Nein | Nein | Ja |
Data Lake Storage Gen2 | abfs[s] |
Ja | Ja | Ja |
Azure Blob Storage | wasbs |
Ja | Ja*** | Ja |
Azure Blob Storage | 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 die native Datenvirtualisierung in dedizierten SQL-Pools (wobei TYPE nicht gleich HADOOP) unterstützt wasb
.
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 diese Option aktiviert ist, müssen Sieabfss
verwenden, wenn eine sichere TLS/SSL-Verbindung ausgewählt ist. Beachten Sie, dassabfss
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.https
ist nicht für alle Datenzugriffsmethoden verfügbar. wasbs
wird 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.
CREDENTIAL = credential_name
Optional. 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.
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.
Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
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.
TYPE = 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 nativen Datenzugriff zu verwenden. Geben Sie nicht das Argument TYPE an, wenn Sie den neueren nativen Datenzugriff 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
A. 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 Speichercontainer heißt daily
. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden für den Zugriff auf Daten über die wasb://
-Schnittstelle nicht unterstützt. Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
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 (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
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 (
LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
-- 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
LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
CREDENTIAL = ADLS_credential,
TYPE = HADOOP
);
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://
Wenn eine Verbindung mit einem Konto in Azure Data Lake Storage Gen 2 mithilfe einer verwalteten Identität hergestellt wird, muss SECRET nicht angegeben werden.
-- 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
);
Nächste Schritte
- CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREATE EXTERNAL TABLE (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Verwenden von Shared Access Signatures (SAS)
* Analytics
Platform System (PDW) *
Übersicht: Analyseplattformsystem
Gilt für: Analytics Platform System (PDW)
Erstellt eine externe Datenquelle für PolyBase-Abfragen. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen den folgenden Anwendungsfall: Datenvirtualisierung und Laden von Dateien mithilfe von PolyBase.
Syntax
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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[:port]>'
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 vonNamenode
im 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.
wasbs
wird empfohlen, da Daten mithilfe einer sicheren TLS-Verbindung gesendet werden.- Hierarchische Namespaces können nicht zusammen mit Azure Storage-Konten in „wasb://“ verwendet werden.
- Für erfolgreiche PolyBase-Abfragen während eines Hadoop-
Namenode
-Failovers sollten Sie in Betracht ziehen, eine virtuelle IP-Adresse für denNamenode
des Hadoop-Clusters zu verwenden. Falls nicht, führen Sie den Befehl ALTER EXTERNAL DATA SOURCE aus, um auf den neuen Speicherort zu verweisen.
CREDENTIAL = 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.
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.
TYPE = [ 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[:port]'
Geben Sie RESOURCE_MANAGER_LOCATION in SQL Server 2019 (15.x) nur an, wenn Sie eine Verbindung mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto herstellen.
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 Connectivity Configuration (Transact-SQL) (Konfiguration der PolyBase-Netzwerkkonnektivität (Transact-SQL)).
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 nicht überprüft, wenn Sie die externe Datenquelle erstellen. Das Eingeben eines falschen Werts verursacht zum Zeitpunkt der Ausführung einer Weitergabe gegebenenfalls einen Abfragefehler, da sich der bereitgestellte Wert nicht auflösen 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 Connectivity | 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. Beachten Sie, dass Hadoop-Versionsabhängigkeiten sowie die Möglichkeit bestehen, dass eine benutzerdefinierte Konfiguration die Standardportzuweisung nicht verwendet.
Hadoop-Clusterkomponente | Standardport |
---|---|
NameNode | 8020 |
DataNode (Datenübertragung, nicht privilegierter IPC-Port) | 50010 |
DataNode (Datenübertragung, privilegierter IPC-Port) | 1019 |
Resource Manager Job Submission (Hortonworks 1.3) | 50300 |
Resource Manager Job Submission (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 |
Resource Manager Job History | 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 des Typs 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 are not valid.: Error [Parameters provided to connect to the Azure storage account are not valid.] occurred while accessing external file.'
Beispiele
A. 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 (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
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 (
LOCATION = 'hdfs://10.10.10.10:8020',
TYPE = HADOOP,
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 (
LOCATION = 'hdfs://10.10.10.10:8050',
CREDENTIAL = HadoopUser1,
TYPE = HADOOP,
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 Speichercontainer heißt daily
. Die externe Azure Storage-Datenquelle dient nur der Datenübertragung. Die Prädikatweitergabe wird nicht unterstützt. Hierarchische Namespaces werden für den Zugriff auf Daten über die wasb://
-Schnittstelle nicht unterstützt. Beachten Sie, dass die Authentifizierung beim Herstellen einer Verbindung mit Azure Storage über den WASB[s]-Connector mit einem Speicherkontoschlüssel und nicht mit einer Shared Access Signature (SAS) erfolgen muss.
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 (
LOCATION = 'wasbs://daily@logs.blob.core.windows.net/',
CREDENTIAL = AzureStorageCredential,
TYPE = HADOOP
);
Nächste Schritte
* SQL Managed Instance *
Übersicht: Verwaltete Azure SQL-Instanz
Gilt für: Azure SQL verwaltete Instanz
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 bietet über die T-SQL-Syntax OPENROWSET oder CREATE EXTERNAL TABLE Zugriff auf externe Daten in einer Vielzahl von Dateiformaten.
Syntax
Weitere Informationen zu Syntaxkonventionen finden Sie unter Transact-SQL-Syntaxkonventionen.
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[:port]>'
Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.
Externe Datenquelle | Speicherort-Präfix | Location path (Pfad zum Speicherort) |
---|---|---|
Azure Blob Storage | 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.
An das Ende der LOCATION
-URL darf kein / , Dateiname oder Shared Access Signature-Parameter hinzugefügt werden, wenn Sie eine externe Datenquelle für Massenvorgänge konfigurieren.
CREDENTIAL = 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).
CREDENTIAL
ist nur erforderlich, wenn die Daten gesichert wurden.CREDENTIAL
ist für Datasets, die den anonymen Zugriff zulassen, nicht erforderlich.- Wenn Anmeldeinformationen erforderlich sind, müssen diese mithilfe von
Managed Identity
oderSHARED ACCESS SIGNATURE
als IDENTITY erstellt werden. Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
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 systemseitig zugewiesene verwaltete Dienstidentität von Azure SQL Managed Instance. Diese muss aktiviert werden, wenn sie für diesen 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:
- Um ein SAS-Token abzurufen, navigieren Sie zu Azure-Portal ><Your_Storage_Account> -> Shared Access Signature > Berechtigungen konfigurieren > SAS und Verbindungszeichenfolge generieren. Weitere Informationen finden Sie unter Generieren einer Shared Access Signature.
- Sie können mit dem Azure Storage-Explorer eine SAS erstellen und konfigurieren.
- Unter Verwendung von PowerShell, der Azure CLI, .NET und der REST-API können Sie eine SAS programmgesteuert 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 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).
- 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 - Wenn ein SAS-Token generiert wird, enthält es am Anfang ein Fragezeichen („?“). Schließen Sie bei der Konfiguration als SECRET das führende
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.
A. Abfragen externer Daten aus Azure SQL Managed Instance mit OPENROWSET oder einer externen Tabelle
Weitere Beispiele finden Sie unter Erstellen externer Datenquellen oder Datenvirtualisierung mit 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>' GO
Erstellen 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 '?' GO
Erstellen 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;
Alternativ können Sie Daten mithilfe von OPENROWSET mit der WITH-Klausel abfragen, anstatt sich auf den Schemarückschluss zu verlassen, bei dem möglicherweise Kosten für die Ausführung anfallen. Bei einer CSV-Datei werden Schemarückschlüsse 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