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.

Ü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 oder OPENROWSET

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 von Namenode 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 Konfigurationsparameter fs.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 den Namenode 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 HADOOPangegeben werden. Unterstützt Verbindungen mit Cloudera CDH, Hortonworks HDP oder einem Azure Storage-Konto. Das Verhalten dieses Parameters unterscheidet sich in späteren Versionen von SQL Server.

Ein Beispiel für das Laden von TYPE = HADOOP Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der wasb://-Schnittstelle

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[: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 oder OPENROWSET

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 von Namenode 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 Konfigurationsparameter fs.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 über ODBC 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 den Namenode 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 von SHARED ACCESS SIGNATURE als Identität erstellt werden.
  • TYPE = BLOB_STORAGE ist nur für Massenvorgänge zulässig. Sie können mit TYPE = 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 als SECRET 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

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 Sie HADOOP, 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

Ü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 oder OPENROWSET

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 von Namenode 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 Konfigurationsparameter fs.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 über ODBC verbinden.
  • Die Verwendung von wasbs oder abfss 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 oder abfss 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 den Namenode 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 und sqldatapool werden zum Herstellen einer Verbindung zwischen der Masterinstanz und dem Speicherpool eines Big Data-Clusters unterstützt. Verwenden Sie hdfs für Cloudera CDH oder Hortonworks HDP. Weitere Informationen zur Verwendung von sqlhdfs 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 Datei tnsnames.ora an, die sich auf dem Oracle-Server befindet.
  • Das Schlüsselwort ServerName gibt den Alias an, der in der Datei tnsnames.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 von SHARED ACCESS SIGNATURE als Identität erstellt werden.
    • TYPE = BLOB_STORAGE ist nur für Massenvorgänge zulässig. Sie können mit TYPE = 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

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 Sie HADOOP, 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_OPTIONSfestlegen oder die Verfügbarkeitsdatenbank als Standarddatenbank für die Anmeldeinformationen für die Datenbankbereich festlegen. Dazu müssen Sie alle Verfügbarkeitsreplikate der Verfügbarkeitsgruppe verwenden.

Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
    WITH IDENTITY = 'username',
    SECRET = 'password';

Erstellen Sie als Nächstes die neue externe Datenquelle.

Unabhängig davon, ob Sie die Verfügbarkeitsdatenbank 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

Ü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 oder OPENROWSET

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 über ODBC 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] in abs 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] in adls 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) oder abs://<storage_account_name>.blob.core.windows.net/<container>.
      • Azure Data Lake Gen2 unterstützt: adls://<container>@<storage_account_name>.blob.core.windows.net (empfohlen) oder adls://<storage_account_name>.dfs.core.windows.net/<container>.

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 Datei tnsnames.ora an, die sich auf dem Oracle-Server befindet.
  • Das Schlüsselwort ServerName gibt den Alias an, der in der Datei tnsnames.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:

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
  • 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 und Object müssen ausgewählt werden, um das SAS-Token zu generieren.

Ein Beispiel für die Verwendung von CREDENTIAL mit einem S3-kompatiblen Objektspeicher und PolyBase finden Sie unter Konfigurieren von PolyBase für den Zugriff auf externe Daten in einem S3-kompatiblen Objektspeicher.

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_OPTIONSfestlegen oder die Verfügbarkeitsdatenbank als Standarddatenbank für die Anmeldeinformationen für die Datenbankbereich festlegen. Dazu müssen Sie alle Verfügbarkeitsreplikate der Verfügbarkeitsgruppe verwenden.

Erstellen Sie zunächst die datenbankbezogenen Anmeldeinformationen, indem Sie die Anmeldeinformationen für eine SQL authentifizierten Anmeldung speichern. Der SQL ODBC-Connector für PolyBase unterstützt nur die einfache Authentifizierung. Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Datenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY. Im folgenden Beispiel werden datenbankbezogene Anmeldeinformationen erstellt, und Sie müssen Ihre eigene Anmeldung und Ihr eigenes Kennwort eingeben.

CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
    WITH IDENTITY = 'username',
    SECRET = 'password';

Erstellen Sie als Nächstes die neue externe Datenquelle.

Unabhängig davon, ob Sie die Verfügbarkeitsdatenbank 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.

  1. Navigieren Sie zum Azure-Portal und zum gewünschten Speicherkonto.
  2. Navigieren Sie im Menü Datenspeicher zu dem gewünschten Container.
  3. Wählen Sie Freigegebene Zugriffstoken aus.
  4. 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
  1. Wählen Sie das Tokenablaufdatum aus.
  2. Generieren Sie das SAS-Token und die URL.
  3. 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

* 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 oder OPENROWSET
  • 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. Das DATABASE_NAME-Argument stellt die Datenbank zum Hosten der Shardzuordnung bereit, und SHARD_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 des DATABASE_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 von SHARED 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 als SECRET erstellt werden.
  • TYPE = BLOB_STORAGE ist nur für Massenvorgänge zulässig. Sie können mit TYPE = 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

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 Sie abfss verwenden, wenn eine sichere TLS/SSL-Verbindung ausgewählt ist. Beachten Sie, dass abfss 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 von wasbs:// 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

* 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 von Namenode 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 Konfigurationsparameter fs.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 den Namenode 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 oder SHARED 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:

  • 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

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.

  1. 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
    
  2. 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
    
  3. 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]
    );
    
  4. 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;
    
  5. 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;
    
  6. 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
    

Nächste Schritte