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ö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 2019 (15.x) finden Sie unter CREATE EXTERNAL DATA SOURCE. Informationen zum Anzeigen der Features von SQL Server 2022 (16.x) Preview 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

Location path (Pfad zum Speicherort)

  • <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 die Verwendung von TYPE = HADOOP zum Laden von Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“.

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
  • Ressourcen-Manager
    • 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.

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) Preview 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) Preview 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)

Location path (Pfad zum Speicherort)

  • <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. Darüber hinaus sollte das SAS-Token wie folgt konfiguriert werden:
    • Schließen Sie bei der Konfiguration als Geheimnis das führende ? aus.
    • Für die zu ladende Datei (z. B. srt=o&sp=r) benötigen Sie mindestens eine Leseberechtigung.
    • Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
    • 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.

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 die Verwendung von TYPE = HADOOP zum Laden von Daten aus einem Azure Storage-Konto finden Sie unter Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „wasb://“.

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
  • Ressourcen-Manager
    • 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 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 2022 (16.x) Preview 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) Preview 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 Shared Access Signature (SAS)
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

Location path (Pfad zum Speicherort)

  • <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, Azure SQL-Datenbank oder Azure Synapse Analytics 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.
  • 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) Preview 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 für jeden Anbieter finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

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. Darüber hinaus sollte das SAS-Token wie folgt konfiguriert werden:
    • Schließen Sie bei der Konfiguration als Geheimnis das führende ? aus.
    • Für die zu ladende Datei (z. B. srt=o&sp=r) benötigen Sie mindestens eine Leseberechtigung.
    • Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
    • 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.

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.
  • 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) Preview enthalten sein. Weitere Informationen finden Sie unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.

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

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
  • Ressourcen-Manager
    • 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]);

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-Instanz 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.

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.

Der ODBC-Parameter „Database“ ist nicht erforderlich, geben Sie stattdessen den Datenbanknamen über einen dreiteiligen Namen in der CREATE EXTERNAL TABLE-Anweisung innerhalb des LOCATION-Parameters an. Ein Beispiel finden Sie unter CREATE EXTERNAL TABLE.

Im folgenden Beispiel „WINSQL2019AGL“ ist der Name der Verfügbarkeitsgruppenlistener 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' ,
  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' ,
  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) 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 = '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 mithilfe generischer ODBC-Daten zu PostgreSQL

Wie in anderen Beispielen erstellen Sie zunächst einen Masterschlü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 eine Verbindung mit einem PostgreSQL-Datenbankserver im gleichen Netzwerk herzustellen, wobei der vollqualifizierte Domänenname des PostgreSQL-Servers verwendet wird, indem der Standardport von TCP 5432 verwendet wird POSTGRES1.

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) Preview 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 abhängig von der SQL Server-Version für Linux. Wählen Sie in der Dropdownliste zur Versionsauswahl die geeignete Version aus. Dieser Inhalt gilt für SQL Server 2022 (16.x) Preview und höhere Versionen.

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> ])
[ ; ]

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://<storage_account_name>.blob.core.windows.net/<container_name> Ab SQL Server 2022 (16.x) Preview
Hierarchischer Namespace wird unterstützt
Shared Access Signature (SAS)
Azure Data Lake Storage Gen2 adls adls://<storage_account_name>.dfs.core.windows.net/<container_name> Ab SQL Server 2022 (16.x) Preview 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://<server_name>:<port>/ Ab SQL Server 2022 (16.x) Preview *

* Muss eine datenbankbezogene Anmeldeinformation sein, wobei IDENTITY mit IDENTITY = 'S3 Access Key' hartcodiert ist und das SECRET-Argument im Format = '<AccessKeyID>:<SecretKeyID>' enthalten ist. 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.
  • <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) Preview): Der Endpunkt und der Port, der zur Verbindungsherstellung mit dem S3-kompatiblen Speicher verwendet wird.

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, Azure SQL-Datenbank oder Azure Synapse Analytics 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) Preview über Azure Data Lake Storage Gen2 unterstützt.

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 für jeden Anbieter finden Sie unter CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.

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:

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.

Aktualisieren auf SQL Server 2022

Ab SQL Server 2022 (16.x) Preview 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]);

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 für den Zugriff auf Daten in Azure Storage mithilfe der Schnittstelle „abs://“

Ab SQL Server 2022 (16.x) Preview wird ein neues Präfix (abs) für Azure Storage-Konten (v2) verwendet. Das Präfix abs unterstützt zudem die Authentifizierung mit SAS (Shared Access Signature). Dieses abs-Präfix ersetzt das in früheren Versionen verwendete wasb. Da HADOOP nicht mehr unterstützt wird, wird TYPE = BLOB_STORAGE 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://<storage_account_name>.blob.core.windows.net/<container>' ,
    CREDENTIAL = AzureStorageCredentialv2,
  ) ;

C. 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-Instanz herzustellen.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
  LOCATION = 'sqlserver://WINSQL2019:58137',
  CREDENTIAL = SQLServerCredentials
) ;

D: 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.

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.

Der ODBC-Parameter „Database“ ist nicht erforderlich, geben Sie stattdessen den Datenbanknamen über einen dreiteiligen Namen in der CREATE EXTERNAL TABLE-Anweisung innerhalb des LOCATION-Parameters an. Ein Beispiel finden Sie unter CREATE EXTERNAL TABLE.

Im folgenden Beispiel „WINSQL2019AGL“ ist der Name der Verfügbarkeitsgruppenlistener 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' ,
  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' ,
  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

E. Erstellen einer externen Datenquelle zum Abfragen einer Parquet-Datei in einem S3-kompatiblen Objektspeicher über PolyBase

Gilt für: SQL Server 2022 (16.x) Preview und höhere Versionen

Das folgende Beispielskript erstellt eine externe Datenquelle s3_ds in der Quellbenutzerdatenbank in SQL Server. Die externe Datenquelle verweist auf die Anmeldeinformationen für die Datenbank s3_dc.

CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH
    IDENTITY = 'S3 Access Key', -- for s3-compatible object storage the identity must always be S3 Access Key
    SECRET = <access_key_id>:<secret_key_id> -- provided by the s3-compatible object storage
GO

CREATE EXTERNAL DATA SOURCE s3_ds
WITH
(   LOCATION = 's3://<ip_address>:<port>/'
,   CREDENTIAL = s3_dc
);
GO

Überprüfen Sie die neue externe Datenquelle mit sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Das folgende Beispiel veranschaulicht die Verwendung von T-SQL zur Abfrage einer in einem S3-kompatiblen Objektspeicher gespeicherten Parquet-Datei über eine OPENROWSET-Abfrage. Weitere Informationen finden Sie unter Virtualisieren einer Parquet-Datei in einem S3-kompatiblen Objektspeicher mit PolyBase.

SELECT  * 
FROM    OPENROWSET
        (   BULK '/<bucket>/<parquet_folder>'
        ,   FORMAT       = 'PARQUET'
        ,   DATA_SOURCE  = 's3_ds'
        ) AS [cc];

F. Erstellen einer externen Datenquelle für den Zugriff auf Daten in Azure Data Lake Gen2

Ab SQL Server 2022 (16.x) Preview wird ein neues Präfix (adls) für Azure Data Lake Gen2 verwendet, das 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://<storage_account>.dfs.core.windows.net'
,CREDENTIAL = datalakegen2
)

G. Erstellen einer externen Datenquelle für den Zugriff auf Daten in einer CSV-Datei

Wie in anderen Beispielen erstellen Sie zunächst einen Masterschlüssel für die Datenbank und datenbankbezogene Anmeldeinformation. Die datenbankbezogene Anmeldeinformation werden für die externe Datenquelle verwendet. In diesem Beispiel befindet sich die CSV-Datei in Azure Blob Storage. Ab SQL Server 2022 (16.x) Preview verwenden Sie daher das Präfix abs und die Identitätsmethode SHARED ACCESS SIGNATURE. Ein ausführlicheres Beispiel finden Sie unter Virtualisieren einer CSV-Datei mit PolyBase.

CREATE EXTERNAL DATA SOURCE Blob_CSV
WITH
(
 LOCATION = 'abs://<storage_account_name>.blob.core.windows.net/<container>'
,CREDENTIAL = blob_storage 
);

H. Erstellen einer externen Datenquelle für den Zugriff auf Daten in einer CSV-Datei

Wie in anderen Beispielen erstellen Sie zunächst einen Masterschlüssel für die Datenbank und datenbankbezogene Anmeldeinformation. Die datenbankbezogene Anmeldeinformation werden für die externe Datenquelle verwendet.

In diesem Beispiel befindet sich die Delta-Tabelle in Azure Data Lake Storage Gen2. Verwenden Sie daher das Präfix adls und die Identitätsmethode SHARED ACCESS SIGNATURE. Ein ausführlicheres Beispiel finden Sie unter Virtualisieren einer Delta-Tabelle mit PolyBase.

Wenn Ihr Speicherkonto beispielsweise delta_lake_sample und der Container sink heißt, lautet der Code:

CREATE EXTERNAL DATA SOURCE Delta_ED
WITH
(
 LOCATION = 'abs://delta_lake_sample.dfs.core.windows.net/sink'
,CREDENTIAL = delta_storage_dsc
)

I. Erstellen einer externen Datenquelle mit generischem ODBC zu PostgreSQL

Wie in anderen Beispielen erstellen Sie zunächst einen Masterschlü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 eine Verbindung mit einem PostgreSQL-Datenbankserver im gleichen Netzwerk herzustellen, wobei der vollqualifizierte Domänenname des PostgreSQL-Servers mit dem Standardport von TCP 5432 verwendet wird POSTGRES1.

CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH
(
 LOCATION = 'odbc://POSTGRES1.domain:5432'
,CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};'
,CREDENTIAL = postgres_credential
)

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.

I. 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_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.

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. Darüber hinaus sollte das SAS-Token wie folgt konfiguriert werden:
    • Schließen Sie bei der Konfiguration als Geheimnis das führende ? aus.
    • Für die zu ladende Datei (z. B. srt=o&sp=r) benötigen Sie mindestens eine Leseberechtigung.
    • Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
    • 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.

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:NurAzure SQL Edge

In diesem Beispiel handelt es sich bei der externen Datenquelle um einen Kafka-Server mit der IP-Adresse xxx.xxx.xxx.xxx, der an Port 1900 lauscht. Die externe Kafka-Datenquelle dient nur zum 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'
)
GO

B. Erstellen einer externen Datenquelle für einen Verweis auf EdgeHub

Gilt für:NurAzure SQL Edge

In diesem Beispiel ist die externe Datenquelle eine EdgeHub-Instanz, die auf demselben Edgegerät wie Azure SQL Edge ausgeführt wird. Die externe EdgeHub-Datenquelle 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://'
)
go

Nächste Schritte

* Azure Synapse
Analytics *
 

 

Übersicht: Azure Synapse Analytics

Gilt für: Azure Synapse Analytics

Erstellt eine externe Datenquelle für PolyBase. Externe Datenquellen werden zum Herstellen von Verbindungen verwendet und unterstützen den primären Anwendungsfall: Datenvirtualisierung und Laden von Dateien mithilfe von PolyBase.

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[:port]>'

Stellt das Konnektivitätsprotokoll und den Pfad zur externe Datenquelle bereit.

Externe Datenquelle Präfix für Connectorspeicherort Location path (Pfad zum Speicherort)
Azure Data Lake Storage Gen 1 adl <storage_account>.azuredatalake.net
Azure Data Lake Storage Gen 2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Azure Storage-Konto (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net

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.
  • wasbs wird empfohlen, da Daten mithilfe einer sicheren TLS-Verbindung gesendet werden.
  • Hierarchische Namespaces werden für Azure Storage-Konten (V2) nicht unterstützt, wenn der Datenzugriff über PolyBase mithilfe der Schnittstelle „wasb://“ erfolgt.

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 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).

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 Azure Storage, ADLS Gen1 oder ADLS Gen2 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 Azure Data Lake Storage Gen1 oder Gen2 mithilfe eines Dienstprinzipals.

Berechtigungen

Erfordert die CONTROL-Berechtigung für die Datenbank.

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

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

Die Azure Data Lake Storage-Konnektivität kann auf Ihrem ADLS-URI und dem Dienstprinzipal Ihrer Azure Active Directory-Anwendung basieren. Die Dokumentation zum Erstellen dieser Anwendung finden Sie unter Authentifizierung bei Data Lake Storage mit Active Directory.

-- 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 Azure Active Directory 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 Gen 2 - 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 2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH
  -- Please 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 Gen 2 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 zum Verweis auf die PolyBase-Konnektivität mit Azure Data Lake Store Gen 2 über „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
  • Ressourcen-Manager
    • 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 Managed Instance

Erstellt eine externe Datenquelle in Azure SQL Managed Instance.

Hinweis

Einige Funktionen von PolyBase befinden sich in der Vorschau für Azure SQL Managed Instance. Dazu zählt z. B. die Möglichkeit zur Abfrage externer Daten (Parquet-Dateien) in Azure Data Lake Storage (ADLS) Gen2. Weitere Informationen finden Sie unter Datenvirtualisierung mit Azure SQL Managed Instance (Vorschau).

In Azure SQL Managed Instance werden externe Datenquellen zum Herstellen von Verbindungen und zur Unterstützung folgender Vorgänge verwendet:

  • Massenladevorgänge mit BULK INSERT oder OPENROWSET

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 } ]
  )
[ ; ]

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 Speicherort-Präfix Location path (Pfad zum Speicherort) Verfügbarkeit
Massenvorgänge https <storage_account>.blob.core.windows.net/<container>

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 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 TYPE = BLOB_STORAGE, müssen die Anmeldeinformationen mithilfe von SHARED ACCESS SIGNATURE als Identität erstellt werden. Darüber hinaus sollte das SAS-Token wie folgt konfiguriert werden:
    • Schließen Sie bei der Konfiguration als Geheimnis das führende ? aus.
    • Für die zu ladende Datei (z. B. srt=o&sp=r) benötigen Sie mindestens eine Leseberechtigung.
    • Verwenden Sie einen gültigen Ablaufzeitraum (alle Daten in UTC-Zeit).
    • 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.

Ein Beispiel für die Verwendung von CREDENTIAL mit SHARED ACCESS SIGNATURE und TYPE  = BLOB_STORAGE finden Sie unter Erstellen einer externen Datenquelle zum Ausführen von Massenvorgängen und Abrufen von Daten aus Azure Storage in SQL Managed Instance.

Weitere Informationen zum Erstellen datenbankweit gültiger Anmeldeinformationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYP = [ BLOB_STORAGE ]

Gibt den Typ der externe Datenquelle an, die konfiguriert wird. Dieser Parameter ist nicht immer erforderlich.

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: 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.

A. 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.

Nächste Schritte