Delen via


CREATE EXTERNAL DATA SOURCE (Transact-SQL)

van toepassing op: SQL Server 2016 (13.x) en hoger Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Hiermee maakt u een externe gegevensbron voor het opvragen van externe gegevens, die wordt gebruikt voor polybase- en gegevensvirtualisatiefuncties.

Dit artikel bevat de syntaxis, argumenten, opmerkingen, machtigingen en voorbeelden voor het SQL-product dat u kiest.

Een product selecteren

Selecteer in de volgende rij de productnaam waarin u geïnteresseerd bent en alleen de informatie van dat product wordt weergegeven.

* SQL Server *  

 

Overzicht: SQL Server 2016

Van toepassing op: SQL Server 2016 (13.x)

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

  • Gegevensvirtualisatie en gegevensbelasting met PolyBase-
  • Bewerkingen voor bulksgewijs laden met behulp van BULK INSERT of OPENROWSET

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen.
Als u de functies van SQL Server 2019 (15.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE. Als u de functies van SQL Server 2022 (16.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE.

Transact-SQL syntaxis-conventies

Syntaxis voor SQL Server 2016

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Ondersteunde locaties per product/service Authenticatie
Cloudera CDH of Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) naar SQL Server 2019 (15.x) Anonieme of basisverificatie
Azure Storage-account (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Vanaf SQL Server 2016 (13.x)
Hiërarchische naamruimte wordt niet ondersteund
Azure Storage account sleutel

Locatiepad:

  • <Namenode> = de computernaam, de naamservice-URI of het IP-adres van het Namenode in het Hadoop-cluster. PolyBase moet dns-namen omzetten die worden gebruikt door het Hadoop-cluster.
  • port = De poort waarop de externe gegevensbron luistert. In Hadoop vindt u de poort met behulp van de fs.defaultFS configuratieparameter. De standaardwaarde is 8020.
  • <container> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.
  • <server_name> = de hostnaam.
  • <instance_name> = de naam van het benoemde SQL Server-exemplaar. Wordt gebruikt als sql Server Browser Service wordt uitgevoerd op het doelexemplaren.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De SQL Server Database Engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • Gebruik dezelfde externe gegevensbron voor alle tabellen bij het uitvoeren van een query op Hadoop om consistente semantiek voor query's te garanderen.
  • wasbs is optioneel, maar wordt aanbevolen in SQL Server 2016 (13.x) voor toegang tot Azure Storage-accounts, omdat gegevens worden verzonden met behulp van een beveiligde TLS/SSL-verbinding.
  • Als u wilt zorgen voor geslaagde PolyBase-query's tijdens een Hadoop-failover Namenode , kunt u overwegen een virtueel IP-adres te gebruiken voor het Namenode Hadoop-cluster. Als u dit niet doet, voert u ALTER EXTERNAL DATA SOURCE uit om naar de nieuwe locatie te verwijzen.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

TYPE = * [ HADOOP ] *

Hiermee geeft u het type van de externe gegevensbron die wordt geconfigureerd. In SQL Server 2016 is deze parameter altijd vereist en mag deze alleen worden opgegeven als HADOOP. Ondersteunt verbindingen met Cloudera CDH, Hortonworks HDP of een Azure Storage-account. Het gedrag van deze parameter verschilt in latere versies van SQL Server.

Zie TYPE voor een voorbeeld van het gebruik = HADOOP van gegevens uit een Azure Storage-account

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Configureer deze optionele waarde wanneer u alleen verbinding maakt met Cloudera CDH, Hortonworks HDP of een Azure Storage-account. Zie PolyBase-connectiviteitsconfiguratie voor een volledige lijst met ondersteunde Hadoop-versies.

Wanneer de RESOURCE_MANAGER_LOCATION queryoptimalisatie is gedefinieerd, neemt de queryoptimalisatie een kostengebaseerde beslissing om de prestaties te verbeteren. Een MapReduce-taak kan worden gebruikt om de berekening naar Hadoop te pushen. Het opgeven van de RESOURCE_MANAGER_LOCATION gegevens kan het volume van gegevens dat wordt overgedragen tussen Hadoop en SQL Server aanzienlijk verminderen, wat kan leiden tot verbeterde queryprestaties.

Als Resource Manager niet is opgegeven, is het pushen van rekenkracht naar Hadoop uitgeschakeld voor PolyBase-query's. Een externe gegevensbron maken om te verwijzen naar Hadoop waarvoor push-down is ingeschakeld , biedt een concreet voorbeeld en verdere richtlijnen.

De RESOURCE_MANAGER_LOCATION waarde wordt niet gevalideerd wanneer u de externe gegevensbron maakt. Als u een onjuiste waarde invoert, kan het uitvoeren van queryfouten optreden wanneer er wordt geprobeerd om een push-down uit te voeren, omdat de opgegeven waarde niet kan worden omgezet.

Om PolyBase correct te laten functioneren met een externe Hadoop-gegevensbron, moeten de poorten voor de volgende Hadoop-clusteronderdelen open zijn:

  • HDFS-poorten
    • Namenode
    • Datanode
  • Resource Manager
    • Taak indienen
  • Taakgeschiedenis

Als de poort niet is opgegeven, wordt de standaardwaarde gekozen met behulp van de huidige instelling voor de configuratie van hadoop-connectiviteit.

Hadoop-connectiviteit Standaardpoort van Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

In de volgende tabel ziet u de standaardpoorten voor deze onderdelen. Er is een Hadoop-versieafhankelijkheid en de mogelijkheid van aangepaste configuratie die niet gebruikmaakt van de standaardpoorttoewijzing.

Hadoop-clusteronderdeel Standaardpoort
NameNode 8020
DataNode (Gegevensoverdracht, IPC-poort zonder bevoegdheden) 50010
DataNode (gegevensoverdracht, IPC-poort voor bevoegdheden) 1019
Resource Manager-taakverzending (Hortonworks 1.3) 50300
Resource Manager-taak indienen (Cloudera 4.3) 8021
Resource Manager-taakverzending (Hortonworks 2.0 in Windows, Cloudera 5.x op Linux) 8032
Resource Manager-taakverzending (Hortonworks 2.x, 3.0 op Linux, Hortonworks 2.1-3 op Windows) 8050
Resource Manager-taakgeschiedenis 10020

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in SQL Server.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Voorbeelden

Belangrijk

Zie PolyBase installeren in Windows voor meer informatie over het installeren en inschakelen van PolyBase

Eén. Externe gegevensbron maken om te verwijzen naar Hadoop

Als u een externe gegevensbron wilt maken om te verwijzen naar uw Hortonworks HDP- of Cloudera CDH Hadoop-cluster, geeft u de computernaam of het IP-adres van de Hadoop Namenode - en poort op.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Externe gegevensbron maken om te verwijzen naar Hadoop met push-down ingeschakeld

Geef de RESOURCE_MANAGER_LOCATION optie op om push-downberekeningen in te schakelen naar Hadoop voor PolyBase-query's. Als PolyBase eenmaal is ingeschakeld, wordt er een kostengebaseerde beslissing genomen om te bepalen of de queryberekening naar Hadoop moet worden gepusht.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Een externe gegevensbron maken om te verwijzen naar Met Kerberos beveiligde Hadoop

Als u wilt controleren of het Hadoop-cluster Kerberos-beveiligd is, controleert u de waarde van hadoop.security.authentication de eigenschap in Hadoop core-site.xml. Als u wilt verwijzen naar een Met Kerberos beveiligd Hadoop-cluster, moet u een databasereferentie opgeven die uw Kerberos-gebruikersnaam en -wachtwoord bevat. De hoofdsleutel van de database wordt gebruikt om het referentiegeheim met databasebereik te versleutelen.

-- 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. Een externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de wasb://-interface

In dit voorbeeld is de externe gegevensbron een Azure V2 Storage-account met de naam logs. De opslagcontainer wordt aangeroepen daily. De externe Azure Storage-gegevensbron is alleen bedoeld voor gegevensoverdracht. Het biedt geen ondersteuning voor predicaatpush. Hiërarchische naamruimten worden niet ondersteund bij het openen van gegevens via de wasb:// interface.

In dit voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie bij een Azure V2 Storage-account. Geef de Azure Storage-accountsleutel op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage. Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).

In SQL Server 2016 (13.x) TYPE moet worden ingesteld op HADOOP zelfs bij toegang tot Azure Storage.

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

Overzicht: SQL Server 2017

Van toepassing op: SQL Server 2017 (14.x)

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

  • Gegevensvirtualisatie en gegevensbelasting met PolyBase in SQL Server
  • Bewerkingen voor bulksgewijs laden met behulp van BULK INSERT of OPENROWSET

Opmerking

Deze syntaxis verschilt in verschillende versies van SQL Server op Linux. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen.
Als u de functies van SQL Server 2019 (15.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE. Als u de functies van SQL Server 2022 (16.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE.

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen.
Als u de functies van SQL Server 2019 (15.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE. Als u de functies van SQL Server 2022 (16.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE.

Transact-SQL syntaxis-conventies

Syntaxis voor SQL Server 2017

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Ondersteunde locaties per product/service Authenticatie
Cloudera CDH of Hortonworks HDP hdfs <Namenode>[:port] ALLEEN SQL Server 2016 (13.x) naar SQL Server 2019 (15.x) Anonieme of basisverificatie
Azure Storage-account (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Vanaf SQL Server 2016 (13.x)
Hiërarchische naamruimte wordt niet ondersteund
Azure Storage account sleutel
Bulkbewerkingen https <storage_account>.blob.core.windows.net/<container> Vanaf SQL Server 2017 (14.x) Gedeelde toegangshandtekening (SAS)

Locatiepad:

  • <Namenode> = de computernaam, de naamservice-URI of het IP-adres van het Namenode in het Hadoop-cluster. PolyBase moet dns-namen omzetten die worden gebruikt door het Hadoop-cluster.
  • port = De poort waarop de externe gegevensbron luistert. In Hadoop vindt u de poort met behulp van de fs.defaultFS configuratieparameter. De standaardwaarde is 8020.
  • <container> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.
  • <server_name> = de hostnaam.
  • <instance_name> = de naam van het benoemde SQL Server-exemplaar. Wordt gebruikt als sql Server Browser Service wordt uitgevoerd op het doelexemplaren.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De SQL Server Database Engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • Gebruik dezelfde externe gegevensbron voor alle tabellen bij het uitvoeren van een query op Hadoop om consistente semantiek voor query's te garanderen.
  • Geef de Driver={<Name of Driver>} verbinding op wanneer u verbinding maakt via ODBC.
  • wasbs is optioneel, maar wordt aanbevolen in SQL Server 2017 (14.x) voor toegang tot Azure Storage-accounts, omdat gegevens worden verzonden via een beveiligde TLS/SSL-verbinding.
  • Als u wilt zorgen voor geslaagde PolyBase-query's tijdens een Hadoop-failover Namenode , kunt u overwegen een virtueel IP-adres te gebruiken voor het Namenode Hadoop-cluster. Als u dit niet doet, voert u ALTER EXTERNAL DATA SOURCE uit om naar de nieuwe locatie te verwijzen.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.
  • Wanneer de TYPE = BLOB_STORAGEreferentie moet worden gemaakt met behulp van SHARED ACCESS SIGNATURE de identiteit.
  • TYPE = BLOB_STORAGE is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron met TYPE = BLOB_STORAGE.
  • Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).
  • Wanneer TYPE = HADOOP de referentie moet worden gemaakt met behulp van de sleutel van het opslagaccount als de SECRET.

Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • U kunt een SAS-token maken door te navigeren naar Azure Portal -><Your_Storage_Account> -> Shared Access Signature -> Machtigingen configureren -> SAS en verbindingsreeks genereren. Zie Een handtekening voor gedeelde toegang genereren voor meer informatie.

  • U kunt een SAS maken en configureren met Azure Storage Explorer.

  • U kunt programmatisch een SAS-token maken via PowerShell, Azure CLI, .NET en REST API. Zie Beperkte toegang verlenen tot Azure Storage-resources met sas (Shared Access Signatures) voor meer informatie.

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als het GEHEIM.
    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).
  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven

Zie CREDENTIAL voor een voorbeeld van het gebruik van een SHARED ACCESS SIGNATURE met TYPE en = BLOB_STORAGE.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

TYPE = * [ HADOOP | BLOB_STORAGE ] *

Hiermee geeft u het type van de externe gegevensbron die wordt geconfigureerd. Deze parameter is niet altijd vereist en moet alleen worden opgegeven wanneer u verbinding maakt met Cloudera CDH, Hortonworks HDP, een Azure Storage-account of een Azure Data Lake Storage Gen2.

  • Gebruik HADOOP deze functie wanneer de externe gegevensbron Cloudera CDH, Hortonworks HDP, een Azure Storage-account of een Azure Data Lake Storage Gen2 is.
  • Gebruik BLOB_STORAGE deze optie bij het uitvoeren van bulkbewerkingen vanuit een Azure Storage-account met BULK INSERT of OPENROWSET. Geïntroduceerd met SQL Server 2017 (14.x). Gebruik HADOOP deze functie wanneer u van plan bent om azure Storage te CREATE EXTERNAL TABLE gebruiken.

Opmerking

TYPE moet worden ingesteld op HADOOP zelfs bij toegang tot Azure Storage.

Zie TYPE voor een voorbeeld van het gebruik = HADOOP van gegevens uit een Azure Storage-account

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Configureer deze optionele waarde wanneer u alleen verbinding maakt met Cloudera CDH, Hortonworks HDP of een Azure Storage-account. Zie PolyBase-connectiviteitsconfiguratie (Transact-SQL) voor een volledige lijst met ondersteunde Hadoop-versies.

Wanneer de RESOURCE_MANAGER_LOCATION queryoptimalisatie is gedefinieerd, neemt de queryoptimalisatie een beslissing op basis van kosten om de prestaties te verbeteren. Een MapReduce-taak kan worden gebruikt om de berekening naar Hadoop te pushen. Het opgeven van de RESOURCE_MANAGER_LOCATION gegevens kan het volume van gegevens dat wordt overgedragen tussen Hadoop en SQL Server aanzienlijk verminderen, wat kan leiden tot verbeterde queryprestaties.

Als Resource Manager niet is opgegeven, is het pushen van rekenkracht naar Hadoop uitgeschakeld voor PolyBase-query's. Een externe gegevensbron maken om te verwijzen naar Hadoop waarvoor push-down is ingeschakeld , biedt een concreet voorbeeld en verdere richtlijnen.

De RESOURCE_MANAGER_LOCATION waarde wordt niet gevalideerd wanneer u de externe gegevensbron maakt. Als u een onjuiste waarde invoert, kan het uitvoeren van queryfouten optreden wanneer er wordt geprobeerd om een push-down uit te voeren, omdat de opgegeven waarde niet kan worden omgezet.

Om PolyBase correct te laten functioneren met een externe Hadoop-gegevensbron, moeten de poorten voor de volgende Hadoop-clusteronderdelen open zijn:

  • HDFS-poorten
    • Namenode
    • Datanode
  • Resource Manager
    • Taak indienen
  • Taakgeschiedenis

Als de poort niet is opgegeven, wordt de standaardwaarde gekozen met behulp van de huidige instelling voor de configuratie van hadoop-connectiviteit.

Hadoop-connectiviteit Standaardpoort van Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

In de volgende tabel ziet u de standaardpoorten voor deze onderdelen. Er is een Hadoop-versieafhankelijkheid en de mogelijkheid van aangepaste configuratie die niet gebruikmaakt van de standaardpoorttoewijzing.

Hadoop-clusteronderdeel Standaardpoort
NameNode 8020
DataNode (Gegevensoverdracht, IPC-poort zonder bevoegdheden) 50010
DataNode (gegevensoverdracht, IPC-poort voor bevoegdheden) 1019
Resource Manager-taakverzending (Hortonworks 1.3) 50300
Resource Manager-taak indienen (Cloudera 4.3) 8021
Resource Manager-taakverzending (Hortonworks 2.0 in Windows, Cloudera 5.x op Linux) 8032
Resource Manager-taakverzending (Hortonworks 2.x, 3.0 op Linux, Hortonworks 2.1-3 op Windows) 8050
Resource Manager-taakgeschiedenis 10020

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in SQL Server.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Een SAS-token met type HADOOP wordt niet ondersteund. Dit wordt alleen ondersteund met type = BLOB_STORAGE wanneer in plaats daarvan een toegangssleutel voor een opslagaccount wordt gebruikt. Als u probeert een externe gegevensbron te maken met het type HADOOP en een SAS-referentie mislukt met de volgende fout:

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

Voorbeelden

Belangrijk

Zie PolyBase installeren in Windows voor meer informatie over het installeren en inschakelen van PolyBase

Eén. Externe gegevensbron maken om te verwijzen naar Hadoop

Als u een externe gegevensbron wilt maken om te verwijzen naar uw Hortonworks HDP- of Cloudera CDH Hadoop-cluster, geeft u de computernaam of het IP-adres van de Hadoop Namenode - en poort op.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Externe gegevensbron maken om te verwijzen naar Hadoop met push-down ingeschakeld

Geef de RESOURCE_MANAGER_LOCATION optie op om push-downberekeningen in te schakelen naar Hadoop voor PolyBase-query's. Als PolyBase eenmaal is ingeschakeld, wordt er een kostengebaseerde beslissing genomen om te bepalen of de queryberekening naar Hadoop moet worden gepusht.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Een externe gegevensbron maken om te verwijzen naar Met Kerberos beveiligde Hadoop

Als u wilt controleren of het Hadoop-cluster Kerberos-beveiligd is, controleert u de waarde van hadoop.security.authentication de eigenschap in Hadoop core-site.xml. Als u wilt verwijzen naar een Met Kerberos beveiligd Hadoop-cluster, moet u een databasereferentie opgeven die uw Kerberos-gebruikersnaam en -wachtwoord bevat. De hoofdsleutel van de database wordt gebruikt om het referentiegeheim met databasebereik te versleutelen.

-- 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. Een externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de wasb://-interface

In dit voorbeeld is de externe gegevensbron een Azure V2 Storage-account met de naam logs. De opslagcontainer wordt aangeroepen daily. De externe Azure Storage-gegevensbron is alleen bedoeld voor gegevensoverdracht. Het biedt geen ondersteuning voor predicaatpush. Hiërarchische naamruimten worden niet ondersteund bij het openen van gegevens via de wasb:// interface. Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).

In dit voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie bij een Azure V2 Storage-account. Geef de Azure Storage-accountsleutel op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage.

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

Voorbeelden: Bulkbewerkingen

Belangrijk

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of shared access signature toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

E. Een externe gegevensbron maken voor bulkbewerkingen die gegevens ophalen uit Azure Storage

Van toepassing op: SQL Server 2017 (14.x) en latere versies.

Gebruik de volgende gegevensbron voor bulkbewerkingen met BULK INSERT of OPENROWSET. De referentie moet zijn ingesteld SHARED ACCESS SIGNATURE als de identiteit, mag niet het voorlooppunt ? in het SAS-token hebben, moet ten minste leesmachtigingen hebben voor het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r) en de verloopperiode moet geldig zijn (alle datums zijn in UTC-tijd). Zie Shared Access Signatures (SAS) gebruiken voor meer informatie over handtekeningen voor gedeelde toegang.

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

Zie BULK INSERT als u dit voorbeeld in gebruik wilt zien.

Overzicht: SQL Server 2019

van toepassing op: SQL Server 2019 (15.x)

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

  • Gegevensvirtualisatie en gegevensbelasting met PolyBase in SQL Server
  • Bewerkingen voor bulksgewijs laden met behulp van BULK INSERT of OPENROWSET

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen.
Als u de functies van SQL Server 2022 (16.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE.

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen.
Als u de functies van SQL Server 2022 (16.x) wilt weergeven, gaat u naar CREATE EXTERNAL DATA SOURCE.

Transact-SQL syntaxis-conventies

Syntaxis voor SQL Server 2019

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
    [ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' ] 
  ) 
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Ondersteunde locaties per product/service Authenticatie
Cloudera CDH of Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) naar SQL Server 2019 (15.x) Anonieme of basisverificatie
Azure Storage-account (V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Vanaf SQL Server 2016 (13.x)
Hiërarchische naamruimte wordt niet ondersteund
Azure Storage account sleutel
SQL Server sqlserver <server_name>[\<instance_name>][:port] Vanaf SQL Server 2019 (15.x) Alleen SQL-verificatie
Orakel oracle <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Teradata teradata <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
MongoDB- of Cosmos DB-API voor MongoDB mongodb <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Algemene ODBC odbc <server_name>[:port] Vanaf SQL Server 2019 (15.x) - alleen Windows Alleen basisverificatie
Bulkbewerkingen https <storage_account>.blob.core.windows.net/<container> Vanaf SQL Server 2017 (14.x) Gedeelde toegangshandtekening (SAS)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net Vanaf SQL Server 2019 (15.x) CU11+. Toegangssleutel voor opslag
Sql Server Big Data Clusters-gegevensgroep sqldatapool sqldatapool://controller-svc/default Alleen ondersteund in BIG Data-clusters van SQL Server 2019 Alleen basisverificatie
Opslaggroep voor Big Data-clusters in SQL Server sqlhdfs sqlhdfs://controller-svc/default Alleen ondersteund in BIG Data-clusters van SQL Server 2019 Alleen basisverificatie

Locatiepad:

  • <Namenode> = de computernaam, de naamservice-URI of het IP-adres van het Namenode in het Hadoop-cluster. PolyBase moet dns-namen omzetten die worden gebruikt door het Hadoop-cluster.
  • port = De poort waarop de externe gegevensbron luistert. In Hadoop vindt u de poort met behulp van de fs.defaultFS configuratieparameter. De standaardwaarde is 8020.
  • <container> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.
  • <server_name> = de hostnaam.
  • <instance_name> = de naam van het benoemde SQL Server-exemplaar. Wordt gebruikt als sql Server Browser Service wordt uitgevoerd op het doelexemplaren.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De SQL Server Database Engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • Gebruik dezelfde externe gegevensbron voor alle tabellen bij het uitvoeren van een query op Hadoop om consistente semantiek voor query's te garanderen.
  • U kunt de sqlserver connector gebruiken om SQL Server 2019 (15.x) te verbinden met een andere SQL Server of met Azure SQL Database.
  • Geef de Driver={<Name of Driver>} verbinding op wanneer u verbinding maakt via ODBC.
  • Het gebruik wasbs of abfss is optioneel, maar wordt aanbevolen in SQL Server 2019 (15.x) voor toegang tot Azure Storage-accounts als gegevens worden verzonden met behulp van een beveiligde TLS/SSL-verbinding.
  • De abfs of abfss API's worden ondersteund bij toegang tot Azure Storage-accounts vanaf SQL Server 2019 (15.x) CU11. Zie het Azure Blob Filesystem-stuurprogramma (ABFS) voor meer informatie.
  • De optie Hiërarchische naamruimte voor Azure Storage-accounts (V2) die worden gebruikt abfs[s] , wordt ondersteund via Azure Data Lake Storage Gen2 vanaf SQL Server 2019 (15.x) CU11+. De optie Hiërarchische naamruimte wordt anders niet ondersteund en deze optie moet uitgeschakeld blijven.
  • Als u wilt zorgen voor geslaagde PolyBase-query's tijdens een Hadoop-failover Namenode , kunt u overwegen een virtueel IP-adres te gebruiken voor het Namenode Hadoop-cluster. Als u dit niet doet, voert u ALTER EXTERNAL DATA SOURCE uit om naar de nieuwe locatie te verwijzen.
  • De sqlhdfs typen worden sqldatapool ondersteund voor het maken van verbinding tussen het hoofdexemplaren en de opslaggroep van een big data-cluster. Gebruik voor Cloudera CDH of Hortonworks HDP hdfs. Zie sqlhdfs voor meer informatie over het gebruik van query's voor opslaggroepen voor BIG Data-clusters in SQL Server 2019.
  • SQL Server-ondersteuning voor EXTERNE GEGEVENSbronnen van HDFS Cloudera (CDP) en Hortonworks (HDP) is buiten gebruik gesteld en is niet opgenomen in SQL Server 2022 (16.x) en latere versies. Zie Opties voor big data op het Microsoft SQL Server-platformvoor meer informatie.

CONNECTION_OPTIONS = key_value_pair

Opgegeven voor SQL Server 2019 (15.x) en latere versies. Hiermee geeft u extra opties op wanneer u verbinding maakt met ODBC een externe gegevensbron. Als u meerdere verbindingsopties wilt gebruiken, scheidt u deze door een puntkomma.

Van toepassing op algemene ODBC verbindingen, evenals ingebouwde ODBC connectors voor SQL Server, Oracle, Teradata, MongoDB en Azure Cosmos DB API voor MongoDB.

Het key_value_pair is het trefwoord en de waarde voor een specifieke verbindingsoptie. De beschikbare trefwoorden en waarden zijn afhankelijk van het externe gegevensbrontype. De naam van het stuurprogramma is minimaal vereist, maar er zijn andere opties, zoals APP='<your_application_name>' of ApplicationIntent= ReadOnly|ReadWrite die ook handig zijn om in te stellen en kan helpen bij het oplossen van problemen.

Mogelijke sleutelwaardeparen zijn specifiek voor de provider voor de externe gegevensbronleverancier. Zie CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS voor meer informatie voor elke provider.

Vanaf SQL Server 2019 (15.x) Cumulatieve update 19 zijn extra trefwoorden geïntroduceerd ter ondersteuning van Oracle TNS-bestanden:

  • Het trefwoord TNSNamesFile geeft het bestandspad op aan het tnsnames.ora bestand dat zich op de Oracle-server bevindt.
  • Het trefwoord ServerName geeft de alias op die wordt gebruikt tnsnames.ora om de hostnaam en de poort te vervangen.

Pushdown = AAN | AF

Alleen opgegeven voor SQL Server 2019 (15.x). Geeft aan of de berekening naar de externe gegevensbron kan worden gepusht. Deze is standaard INGESCHAKELD .

PUSHDOWN wordt ondersteund bij het maken van verbinding met SQL Server, Oracle, Teradata, MongoDB, de Azure Cosmos DB-API voor MongoDB of ODBC op het niveau van de externe gegevensbron.

Het in- of uitschakelen van push-down op queryniveau wordt bereikt via de HINT EXTERNALPUSHDOWN.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.
  • Wanneer de TYPE = BLOB_STORAGEreferentie moet worden gemaakt met behulp van SHARED ACCESS SIGNATURE de identiteit.
  • TYPE = BLOB_STORAGE is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron met TYPE = BLOB_STORAGE.

Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • U kunt een SAS-token maken door te navigeren naar Azure Portal -><Your_Storage_Account> -> Shared Access Signature -> Machtigingen configureren -> SAS en verbindingsreeks genereren. Zie Een handtekening voor gedeelde toegang genereren voor meer informatie.

  • U kunt een SAS maken en configureren met Azure Storage Explorer.

  • U kunt programmatisch een SAS-token maken via PowerShell, Azure CLI, .NET en REST API. Zie Beperkte toegang verlenen tot Azure Storage-resources met sas (Shared Access Signatures) voor meer informatie.

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als het GEHEIM.
    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).
  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven

Zie CREDENTIAL voor een voorbeeld van het gebruik van een SHARED ACCESS SIGNATURE met TYPE en = BLOB_STORAGE.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

TYPE = * [ HADOOP | BLOB_STORAGE ] *

Hiermee geeft u het type van de externe gegevensbron die wordt geconfigureerd. Deze parameter is niet altijd vereist en moet alleen worden opgegeven wanneer u verbinding maakt met Cloudera CDH, Hortonworks HDP, een Azure Storage-account of een Azure Data Lake Storage Gen2.

  • Geef in SQL Server 2019 (15.x) geen TYPE op, tenzij u verbinding maakt met Cloudera CDH, Hortonworks HDP, een Azure Storage-account.
  • Gebruik HADOOP deze functie wanneer de externe gegevensbron Cloudera CDH, Hortonworks HDP, een Azure Storage-account of een Azure Data Lake Storage Gen2 is.
  • Gebruiken BLOB_STORAGE bij het uitvoeren van bulkbewerkingen vanuit een Azure Storage-account met BULK INSERT of OPENROWSET met SQL Server 2017 (14.x). Gebruik HADOOP deze functie bij het maken van EEN EXTERNE TABEL voor Azure Storage.
  • SQL Server-ondersteuning voor EXTERNE GEGEVENSbronnen van HDFS Cloudera (CDP) en Hortonworks (HDP) is buiten gebruik gesteld en is niet opgenomen in SQL Server 2022 (16.x) en latere versies. Zie Opties voor big data op het Microsoft SQL Server-platformvoor meer informatie.

Zie TYPE voor een voorbeeld van het gebruik = HADOOP van gegevens uit een Azure Storage-account.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Geef in SQL Server 2019 (15.x) geen RESOURCE_MANAGER_LOCATION op, tenzij u verbinding maakt met Cloudera CDH, Hortonworks HDP, een Azure Storage-account.

Configureer deze optionele waarde wanneer u alleen verbinding maakt met Cloudera CDH, Hortonworks HDP of een Azure Storage-account. Zie PolyBase-connectiviteitsconfiguratie voor een volledige lijst met ondersteunde Hadoop-versies.

Wanneer de RESOURCE_MANAGER_LOCATION queryoptimalisatie is gedefinieerd, neemt de queryoptimalisatie een kostengebaseerde beslissing om de prestaties te verbeteren. Een MapReduce-taak kan worden gebruikt om de berekening naar Hadoop te pushen. Het opgeven van de RESOURCE_MANAGER_LOCATION gegevens kan het volume van gegevens dat wordt overgedragen tussen Hadoop en SQL Server aanzienlijk verminderen, wat kan leiden tot verbeterde queryprestaties.

Als Resource Manager niet is opgegeven, is het pushen van rekenkracht naar Hadoop uitgeschakeld voor PolyBase-query's. Een externe gegevensbron maken om te verwijzen naar Hadoop waarvoor push-down is ingeschakeld , biedt een concreet voorbeeld en verdere richtlijnen.

De RESOURCE_MANAGER_LOCATION waarde wordt niet gevalideerd wanneer u de externe gegevensbron maakt. Als u een onjuiste waarde invoert, kan het uitvoeren van queryfouten optreden wanneer er wordt geprobeerd om een push-down uit te voeren, omdat de opgegeven waarde niet kan worden omgezet.

Om PolyBase correct te laten functioneren met een externe Hadoop-gegevensbron, moeten de poorten voor de volgende Hadoop-clusteronderdelen open zijn:

  • HDFS-poorten
    • Namenode
    • Datanode
  • Resource Manager
    • Taak indienen
  • Taakgeschiedenis

Als de poort niet is opgegeven, wordt de standaardwaarde gekozen met behulp van de huidige instelling voor de configuratie van hadoop-connectiviteit.

Hadoop-connectiviteit Standaardpoort van Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

In de volgende tabel ziet u de standaardpoorten voor deze onderdelen. Er is een Hadoop-versieafhankelijkheid en de mogelijkheid van aangepaste configuratie die niet gebruikmaakt van de standaardpoorttoewijzing.

Hadoop-clusteronderdeel Standaardpoort
NameNode 8020
DataNode (Gegevensoverdracht, IPC-poort zonder bevoegdheden) 50010
DataNode (gegevensoverdracht, IPC-poort voor bevoegdheden) 1019
Resource Manager-taakverzending (Hortonworks 1.3) 50300
Resource Manager-taak indienen (Cloudera 4.3) 8021
Resource Manager-taakverzending (Hortonworks 2.0 in Windows, Cloudera 5.x op Linux) 8032
Resource Manager-taakverzending (Hortonworks 2.x, 3.0 op Linux, Hortonworks 2.1-3 op Windows) 8050
Resource Manager-taakgeschiedenis 10020

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in SQL Server.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Wanneer u verbinding maakt met de opslag of gegevensgroep in SQL Server 2019 Big Data Cluster, worden de referenties van de gebruiker doorgegeven aan het back-endsysteem. Maak aanmeldingen in de gegevensgroep zelf om pass through-verificatie in te schakelen.

Een SAS-token met type HADOOP wordt niet ondersteund. Dit wordt alleen ondersteund met type = BLOB_STORAGE wanneer in plaats daarvan een toegangssleutel voor een opslagaccount wordt gebruikt. Als u probeert een externe gegevensbron te maken met het type HADOOP en een SAS-referentie mislukt met de volgende fout:

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

Voorbeelden

Belangrijk

Zie PolyBase installeren in Windows voor meer informatie over het installeren en inschakelen van PolyBase

Eén. Externe gegevensbron maken in SQL Server 2019 om te verwijzen naar Oracle

Als u een externe gegevensbron wilt maken die verwijst naar Oracle, moet u een referentie voor databasebereik hebben. U kunt eventueel ook push-down van berekeningen in- of uitschakelen voor deze gegevensbron.

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

Optioneel kan de externe gegevensbron voor Oracle proxyverificatie gebruiken om gedetailleerd toegangsbeheer te bieden. Een proxygebruiker kan worden geconfigureerd om beperkte toegang te hebben in vergelijking met de gebruiker die wordt geïmiteerd.

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

U kunt ook TNS-verificatie gebruiken.

Vanaf SQL Server 2019 (15.x) Cumulatieve update 19 biedt CREATE EXTERNAL DATA SOURCE nu ondersteuning voor het gebruik van TNS-bestanden bij het maken van verbinding met Oracle.

De CONNECTION_OPTIONS parameter is uitgebreid en gebruikt TNSNamesFile nu en ServerName als variabelen om door het tnsnames.ora bestand te bladeren en verbinding te maken met de server.

In het onderstaande voorbeeld zoekt SQL Server tijdens runtime naar de tnsnames.ora bestandslocatie die is opgegeven door TNSNamesFile en zoekt u naar de host- en netwerkpoort die is opgegeven door ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

Zie PolyBase configureren voor toegang tot externe gegevens in MongoDB voor aanvullende voorbeelden van andere gegevensbronnen, zoals MongoDB.

B. Externe gegevensbron maken om te verwijzen naar Hadoop

Als u een externe gegevensbron wilt maken om te verwijzen naar uw Hortonworks HDP- of Cloudera CDH Hadoop-cluster, geeft u de computernaam of het IP-adres van de Hadoop Namenode - en poort op.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

C. Externe gegevensbron maken om te verwijzen naar Hadoop met push-down ingeschakeld

Geef de RESOURCE_MANAGER_LOCATION optie op om push-downberekeningen in te schakelen naar Hadoop voor PolyBase-query's. Als PolyBase eenmaal is ingeschakeld, wordt er een kostengebaseerde beslissing genomen om te bepalen of de queryberekening naar Hadoop moet worden gepusht.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

D. Een externe gegevensbron maken om te verwijzen naar Met Kerberos beveiligde Hadoop

Als u wilt controleren of het Hadoop-cluster Kerberos-beveiligd is, controleert u de waarde van hadoop.security.authentication de eigenschap in Hadoop core-site.xml. Als u wilt verwijzen naar een Met Kerberos beveiligd Hadoop-cluster, moet u een databasereferentie opgeven die uw Kerberos-gebruikersnaam en -wachtwoord bevat. De hoofdsleutel van de database wordt gebruikt om het referentiegeheim met databasebereik te versleutelen.

-- 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. Een externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de wasb://-interface

In dit voorbeeld is de externe gegevensbron een Azure V2 Storage-account met de naam logs. De opslagcontainer wordt aangeroepen daily. De externe Azure Storage-gegevensbron is alleen bedoeld voor gegevensoverdracht. Het biedt geen ondersteuning voor predicaatpush. Hiërarchische naamruimten worden niet ondersteund bij het openen van gegevens via de wasb:// interface. Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).

In dit voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie bij een Azure V2 Storage-account. Geef de Azure Storage-accountsleutel op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage.

-- 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. Een externe gegevensbron maken om te verwijzen naar een sql Server-benoemd exemplaar via PolyBase-connectiviteit

van toepassing op: SQL Server 2019 (15.x) en hoger

Als u een externe gegevensbron wilt maken die verwijst naar een benoemd exemplaar van SQL Server, gebruikt CONNECTION_OPTIONS u om de naam van het exemplaar op te geven.

In het volgende voorbeeld WINSQL2019 is dit de hostnaam en SQL2019 de naam van het exemplaar. 'Server=%s\SQL2019' is het sleutel-waardepaar.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019',
    CONNECTION_OPTIONS = 'Server=%s\SQL2019',
    CREDENTIAL = SQLServerCredentials
);

U kunt ook een poort gebruiken om verbinding te maken met een standaard sql Server-exemplaar.

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

G. Externe gegevensbron maken om te verwijzen naar een leesbare secundaire replica van AlwaysOn-beschikbaarheidsgroep

van toepassing op: SQL Server 2019 (15.x) en hoger

Als u een externe gegevensbron wilt maken die verwijst naar een leesbare secundaire replica van SQL Server, gebruikt CONNECTION_OPTIONS u om de ApplicationIntent=ReadOnly. Daarnaast moet u de beschikbaarheidsdatabase instellen zoals Database={dbname} in CONNECTION_OPTIONS, of de beschikbaarheidsdatabase instellen als de standaarddatabase van de aanmelding die wordt gebruikt voor de referentie voor het databasebereik. U moet dit doen op alle beschikbaarheidsreplica's van de beschikbaarheidsgroep.

Maak eerst de referenties voor het databasebereik, met de referenties voor een geverifieerde SQL-aanmelding. De SQL ODBC-connector voor PolyBase ondersteunt alleen basisverificatie. Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEYvoor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt, uw eigen aanmelding en wachtwoord opgegeven.

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

Maak vervolgens de nieuwe externe gegevensbron.

Of u nu in de Database=dbname beschikbaarheidsdatabase hebt opgenomen CONNECTION_OPTIONS of als de standaarddatabase voor de aanmelding bij de referentie voor databasebereik hebt opgegeven, u moet de databasenaam nog steeds opgeven via een driedelige naam in de instructie CREATE EXTERNAL TABLE, binnen de parameter LOCATION. Zie CREATE EXTERNAL TABLE voor een voorbeeld.

In het volgende voorbeeld WINSQL2019AGL is de listenernaam van de beschikbaarheidsgroep en dbname de naam van de database die het doel is van de instructie CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

U kunt het omleidingsgedrag van de beschikbaarheidsgroep demonstreren door een externe tabel op te geven ApplicationIntent en te maken in de systeemweergave sys.servers. In het volgende voorbeeldscript worden twee externe gegevensbronnen gemaakt en er wordt voor elke tabel één externe tabel gemaakt. Gebruik de weergaven om te testen welke server reageert op de verbinding. Vergelijkbare resultaten kunnen ook worden bereikt via de functie alleen-lezenroutering. Zie Alleen-lezenroutering configureren voor een AlwaysOn-beschikbaarheidsgroep voor meer informatie.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Maak in de database in de beschikbaarheidsgroep een weergave die moet worden geretourneerd sys.servers en de naam van het lokale exemplaar, waarmee u kunt bepalen welke replica reageert op de query. Zie sys.servers voor meer informatie.

CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO

Maak vervolgens een externe tabel op het bronexemplaren:

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

Voorbeelden: Bulkbewerkingen

Belangrijk

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of shared access signature toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

H. Een externe gegevensbron maken voor bulkbewerkingen die gegevens ophalen uit Azure Storage

Van toepassing op: SQL Server 2017 (14.x) en SQL Server 2019 (15.x)

Gebruik de volgende gegevensbron voor bulkbewerkingen met BULK INSERT of OPENROWSET. De referentie moet zijn ingesteld SHARED ACCESS SIGNATURE als de identiteit, mag niet het voorlooppunt ? in het SAS-token hebben, moet ten minste leesmachtigingen hebben voor het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r) en de verloopperiode moet geldig zijn (alle datums zijn in UTC-tijd). Zie Shared Access Signatures (SAS) gebruiken voor meer informatie over handtekeningen voor gedeelde toegang.

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

Zie BULK INSERT als u dit voorbeeld in gebruik wilt zien.

Ik. Externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de abfs://-interface

Van toepassing op: SQL Server 2019 (15.x) CU11 en hoger

In dit voorbeeld is de externe gegevensbron een Azure Data Lake Storage Gen2-account logsmet behulp van het Azure Blob Filesystem-stuurprogramma (ABFS). De opslagcontainer wordt aangeroepen daily. De externe Azure Data Lake Storage Gen2-gegevensbron is alleen bedoeld voor gegevensoverdracht, omdat push-down van predicaat niet wordt ondersteund.

In dit voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie voor een Azure Data Lake Storage Gen2-account. Geef de Azure Storage-accountsleutel op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage.

-- 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. Externe gegevensbron maken met behulp van algemene ODBC naar PostgreSQL

Net als in de vorige voorbeelden maakt u eerst een databasehoofdsleutel en referenties met databasebereik. De referentie voor het databasebereik wordt gebruikt voor de externe gegevensbron. In dit voorbeeld wordt ook ervan uitgegaan dat een algemene ODBC-gegevensprovider voor PostgreSQL op de server is geïnstalleerd.

In dit voorbeeld wordt de algemene ODBC-gegevensprovider gebruikt om verbinding te maken met een PostgreSQL-databaseserver in hetzelfde netwerk, waarbij de volledig gekwalificeerde domeinnaam van de PostgreSQL-server is POSTGRES1, met behulp van de standaardpoort van TCP 5432.

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

Overzicht: SQL Server 2022

Van toepassing op: SQL Server 2022 (16.x) en latere versies

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

  • Gegevensvirtualisatie en gegevensbelasting met PolyBase in SQL Server
  • Bewerkingen voor bulksgewijs laden met behulp van BULK INSERT of OPENROWSET

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen. Deze inhoud is van toepassing op SQL Server 2022 (16.x) en latere versies.

Syntaxis voor SQL Server 2022

Syntaxis voor SQL Server 2022 en latere versies

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Ondersteunde locaties per product/service Authenticatie
Azure Storage-account (V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
of
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Vanaf SQL Server 2022 (16.x)
Hiërarchische naamruimte wordt ondersteund.
Gedeelde toegangshandtekening (SAS)
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
of
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Vanaf SQL Server 2022 (16.x) Gedeelde toegangshandtekening (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] Vanaf SQL Server 2019 (15.x) Alleen SQL-verificatie
Orakel oracle <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Teradata teradata <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
MongoDB- of Cosmos DB-API voor MongoDB mongodb <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Algemene ODBC odbc <server_name>[:port] Vanaf SQL Server 2019 (15.x) - alleen Windows Alleen basisverificatie
Bulkbewerkingen https <storage_account>.blob.core.windows.net/<container> Vanaf SQL Server 2017 (14.x) Gedeelde toegangshandtekening (SAS)
S3-compatibele objectopslag s3 - S3-compatibel: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
of s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Vanaf SQL Server 2022 (16.x) Basic of passthrough (STS) *

* Moet een databasereferentie zijn waarvoor de IDENTITEIT in code is vastgelegd IDENTITY = 'S3 Access Key' en het argument SECRET de indeling = '<AccessKeyID>:<SecretKeyID>' heeft of passthrough-autorisatie (STS) gebruikt. Zie PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag voor meer informatie.

Locatiepad:

  • port = De poort waarop de externe gegevensbron luistert. Optioneel in veel gevallen, afhankelijk van de netwerkconfiguratie.
  • <container_name> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.
  • <server_name> = de hostnaam.
  • <instance_name> = de naam van het benoemde SQL Server-exemplaar. Wordt gebruikt als sql Server Browser Service wordt uitgevoerd op het doelexemplaren.
  • <ip_address>:<port> = Alleen voor S3-compatibele objectopslag (te beginnen met SQL Server 2022 (16.x)), het eindpunt en de poort die wordt gebruikt om verbinding te maken met de S3-compatibele opslag.
  • <bucket_name> = Alleen voor S3-compatibele objectopslag (vanaf SQL Server 2022 (16.x)), specifiek voor het opslagplatform.
  • <region> = Alleen voor S3-compatibele objectopslag (vanaf SQL Server 2022 (16.x)), specifiek voor het opslagplatform.
  • <folder> = Deel van het opslagpad binnen de opslag-URL.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De SQL Server Database Engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • U kunt de sqlserver connector gebruiken om SQL Server 2019 (15.x) te verbinden met een andere SQL Server of met Azure SQL Database.
  • Geef de Driver={<Name of Driver>} verbinding op wanneer u verbinding maakt via ODBC.
  • De optie Hiërarchische naamruimte voor Azure Storage-accounts (V2) met behulp van het voorvoegsel adls wordt ondersteund via Azure Data Lake Storage Gen2 in SQL Server 2022 (16.x).
  • SQL Server-ondersteuning voor EXTERNE GEGEVENSbronnen van HDFS Cloudera (CDP) en Hortonworks (HDP) worden buiten gebruik gesteld en zijn niet opgenomen in SQL Server 2022 (16.x). U hoeft het argument TYPE niet te gebruiken in SQL Server 2022 (16.x).
  • Zie PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag en PolyBase vanaf SQL Server 2022 (16.x) voor meer informatie over S3-compatibele objectopslag. Zie Parquet-bestand in een S3-compatibele objectopslag virtualiseren in een S3-compatibele objectopslag met PolyBase voor een voorbeeld van een query op een Parquet-bestand dat compatibel is met S3.
  • Anders dan in eerdere versies, in SQL Server 2022 (16.x), is het voorvoegsel dat wordt gebruikt voor het Azure Storage-account (v2) gewijzigd van wasb[s] in abs.
  • Anders dan in eerdere versies, in SQL Server 2022 (16.x), is het voorvoegsel dat wordt gebruikt voor Azure Data Lake Storage Gen2 gewijzigd van abfs[s] in adls.
  • Zie CSV-bestand virtualiseren met PolyBase voor een voorbeeld van PolyBase om een CSV-bestand in Azure Storage te virtualiseren.
  • Zie Delta-tabel virtualiseren met PolyBase voor een voorbeeld van polybase om een deltatabel in ADLS Gen2 te virtualiseren.
  • SQL Server 2022 (16.x) ondersteunt volledig twee URL-indelingen voor zowel Azure Storage-account v2 () alsabs Azure Data Lake Gen2 (adls).
    • Het PAD LOCATION kan de notaties gebruiken: <container>@<storage_account_name>.. (aanbevolen) of <storage_account_name>../<container>. Bijvoorbeeld:
      • Azure Storage-account v2: abs://<container>@<storage_account_name>.blob.core.windows.net (aanbevolen) of abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake Gen2 ondersteunt: adls://<container>@<storage_account_name>.blob.core.windows.net (aanbevolen) of adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

Opgegeven voor SQL Server 2019 (15.x) en latere versies. Hiermee geeft u extra opties op wanneer u verbinding maakt met ODBC een externe gegevensbron. Als u meerdere verbindingsopties wilt gebruiken, scheidt u deze door een puntkomma.

Van toepassing op algemene ODBC verbindingen, evenals ingebouwde ODBC connectors voor SQL Server, Oracle, Teradata, MongoDB en Azure Cosmos DB API voor MongoDB.

Het key_value_pair is het trefwoord en de waarde voor een specifieke verbindingsoptie. De beschikbare trefwoorden en waarden zijn afhankelijk van het externe gegevensbrontype. De naam van het stuurprogramma is minimaal vereist, maar er zijn andere opties, zoals APP='<your_application_name>' of ApplicationIntent= ReadOnly|ReadWrite die ook handig zijn om in te stellen en kan helpen bij het oplossen van problemen.

Mogelijke sleutel-waardeparen zijn specifiek voor het stuurprogramma. Zie CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS voor meer informatie voor elke provider.

Vanaf SQL Server 2022 (16.x) Cumulatieve update 2 zijn extra trefwoorden geïntroduceerd ter ondersteuning van Oracle TNS-bestanden:

  • Het trefwoord TNSNamesFile geeft het bestandspad op aan het tnsnames.ora bestand dat zich op de Oracle-server bevindt.
  • Het trefwoord ServerName geeft de alias op die wordt gebruikt tnsnames.ora om de hostnaam en de poort te vervangen.

PUSHDOWN = AAN | AF

Van toepassing op: SQL Server 2019 (15.x) en latere versies. Geeft aan of de berekening naar de externe gegevensbron kan worden gepusht. Deze is standaard ingeschakeld.

PUSHDOWN wordt ondersteund bij het maken van verbinding met SQL Server, Oracle, Teradata, MongoDB, de Azure Cosmos DB-API voor MongoDB of ODBC op het niveau van de externe gegevensbron.

Het in- of uitschakelen van push-down op queryniveau wordt bereikt via de HINT EXTERNALPUSHDOWN.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • U kunt een SAS-token maken door te navigeren naar Azure Portal -><Your_Storage_Account> -> Shared Access Signature -> Machtigingen configureren -> SAS en verbindingsreeks genereren. Zie Een handtekening voor gedeelde toegang genereren voor meer informatie.

  • U kunt een SAS maken en configureren met Azure Storage Explorer.

  • U kunt programmatisch een SAS-token maken via PowerShell, Azure CLI, .NET en REST API. Zie Beperkte toegang verlenen tot Azure Storage-resources met sas (Shared Access Signatures) voor meer informatie.

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als het GEHEIM.
    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).
  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
    Create External Table as Select (CETAS) gebruiken Lezen, maken, weergeven en schrijven
  • Voor Azure Blob Storage en Azure Data Lake Gen 2:

    • Toegestane services: Blob moet zijn geselecteerd om het SAS-token te genereren
  • Toegestane resourcetypen: Container en Object moeten worden geselecteerd om het SAS-token te genereren

Zie CREDENTIAL voorbeeld van het gebruik van een met S3 compatibele objectopslag.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in SQL Server.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Upgrade uitvoeren naar SQL Server 2022

Vanaf SQL Server 2022 (16.x) worden externe Hadoop-gegevensbronnen niet meer ondersteund. Het is vereist om handmatig externe gegevensbronnen te maken die eerder zijn gemaakt met TYPE = HADOOPen elke externe tabel die gebruikmaakt van deze externe gegevensbron.

Gebruikers moeten ook hun externe gegevensbronnen configureren om nieuwe connectors te gebruiken wanneer ze verbinding maken met Azure Storage.

Externe gegevensbron Van Tot
Azure Blob Storage (opslagdienst van Azure) wasb[s] abs
ADLS Gen2 abfs[s] adls

Voorbeelden

Belangrijk

Zie PolyBase installeren in Windows voor meer informatie over het installeren en inschakelen van PolyBase

Eén. Een externe gegevensbron maken in SQL Server om te verwijzen naar Oracle

Als u een externe gegevensbron wilt maken die verwijst naar Oracle, moet u een referentie voor databasebereik hebben. U kunt eventueel ook push-down van berekeningen in- of uitschakelen voor deze gegevensbron.

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

Optioneel kan de externe gegevensbron naar Oracle proxyverificatie gebruiken om gedetailleerd toegangsbeheer te bieden. Een proxygebruiker kan worden geconfigureerd om beperkte toegang te hebben in vergelijking met de gebruiker die wordt geïmiteerd.

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

U kunt ook verifiëren met behulp van TNS.

Vanaf SQL Server 2022 (16.x) Cumulatieve update 2, CREATE EXTERNAL DATA SOURCE ondersteunt nu het gebruik van TNS-bestanden bij het maken van verbinding met Oracle.

De CONNECTION_OPTIONS parameter is uitgebreid en gebruikt TNSNamesFile nu en ServerName als variabelen om door het tnsnames.ora bestand te bladeren en verbinding te maken met de server.

In het onderstaande voorbeeld zoekt SQL Server tijdens runtime naar de tnsnames.ora bestandslocatie die is opgegeven door TNSNamesFile en zoekt u naar de host- en netwerkpoort die is opgegeven door ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

B. Een externe gegevensbron maken om te verwijzen naar een sql Server-benoemd exemplaar via PolyBase-connectiviteit

van toepassing op: SQL Server 2019 (15.x) en hoger

Als u een externe gegevensbron wilt maken die verwijst naar een benoemd exemplaar van SQL Server, gebruikt CONNECTION_OPTIONS u om de naam van het exemplaar op te geven.

Maak eerst de referenties voor het databasebereik, met de referenties voor een geverifieerde SQL-aanmelding. De SQL ODBC-connector voor PolyBase ondersteunt alleen basisverificatie. Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEY (Transact-SQL)voor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt, uw eigen aanmelding en wachtwoord opgegeven.

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

In het volgende voorbeeld WINSQL2019 is dit de hostnaam en SQL2019 de naam van het exemplaar. 'Server=%s\SQL2019' is het sleutel-waardepaar.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019',
    CONNECTION_OPTIONS = 'Server=%s\SQL2019',
    CREDENTIAL = SQLServerCredentials
);

U kunt ook een poort gebruiken om verbinding te maken met een standaard sql Server-exemplaar.

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

C. Externe gegevensbron maken om te verwijzen naar een leesbare secundaire replica van AlwaysOn-beschikbaarheidsgroep

van toepassing op: SQL Server 2019 (15.x) en hoger

Als u een externe gegevensbron wilt maken die verwijst naar een leesbare secundaire replica van SQL Server, gebruikt CONNECTION_OPTIONS u om de ApplicationIntent=ReadOnly. Daarnaast moet u de beschikbaarheidsdatabase instellen zoals Database={dbname} in CONNECTION_OPTIONS, of de beschikbaarheidsdatabase instellen als de standaarddatabase van de aanmelding die wordt gebruikt voor de referentie voor het databasebereik. U moet dit doen op alle beschikbaarheidsreplica's van de beschikbaarheidsgroep.

Maak eerst de referenties voor het databasebereik, met de referenties voor een geverifieerde SQL-aanmelding. De SQL ODBC-connector voor PolyBase ondersteunt alleen basisverificatie. Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEY (Transact-SQL)voor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt, uw eigen aanmelding en wachtwoord opgegeven.

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

Maak vervolgens de nieuwe externe gegevensbron.

Of u nu in de Database=dbname beschikbaarheidsdatabase hebt opgenomen CONNECTION_OPTIONS of als de standaarddatabase voor de aanmelding bij de referentie voor databasebereik hebt opgegeven, u moet de databasenaam nog steeds opgeven via een driedelige naam in de instructie CREATE EXTERNAL TABLE, binnen de parameter LOCATION. Zie CREATE EXTERNAL TABLE voor een voorbeeld.

In het volgende voorbeeld WINSQL2019AGL is de listenernaam van de beschikbaarheidsgroep en dbname de naam van de database die het doel is van de instructie CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

U kunt het omleidingsgedrag van de beschikbaarheidsgroep demonstreren door een externe tabel op te geven ApplicationIntent en te maken in de systeemweergave sys.servers. In het volgende voorbeeldscript worden twee externe gegevensbronnen gemaakt en er wordt voor elke tabel één externe tabel gemaakt. Gebruik de weergaven om te testen welke server reageert op de verbinding. Vergelijkbare resultaten kunnen ook worden bereikt via de functie alleen-lezenroutering. Zie Alleen-lezenroutering configureren voor een AlwaysOn-beschikbaarheidsgroep voor meer informatie.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Maak in de database in de beschikbaarheidsgroep een weergave die moet worden geretourneerd sys.servers en de naam van het lokale exemplaar, waarmee u kunt bepalen welke replica reageert op de query. Zie sys.servers voor meer informatie.

CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO

Maak vervolgens een externe tabel op het bronexemplaren:

CREATE EXTERNAL TABLE vw_sys_servers_ro (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw (name SYSNAME NOT NULL)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;--should return primary replica instance
GO

D. Een externe gegevensbron maken om een query uit te voeren op een Parquet-bestand in S3-compatibele objectopslag via PolyBase

Van toepassing op: SQL Server 2022 (16.x) en hoger

Met het volgende voorbeeldscript maakt u een externe gegevensbron s3_ds in de brongebruikersdatabase in SQL Server. De externe gegevensbron verwijst naar de gegevensreferentie van het s3_dc databasebereik.

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

Controleer de nieuwe externe gegevensbron met sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

Vervolgens ziet u in het volgende voorbeeld hoe u T-SQL gebruikt om een query uit te voeren op een Parquet-bestand dat is opgeslagen in S3-compatibele objectopslag via openROWSET-query. Zie Parquet-bestand virtualiseren in een S3-compatibele objectopslag met PolyBase voor meer informatie.

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

E. Externe gegevensbron maken met behulp van algemene ODBC naar PostgreSQL

Net als in de vorige voorbeelden maakt u eerst een databasehoofdsleutel en referenties met databasebereik. De referentie voor het databasebereik wordt gebruikt voor de externe gegevensbron. In dit voorbeeld wordt ook ervan uitgegaan dat een algemene ODBC-gegevensprovider voor PostgreSQL op de server is geïnstalleerd.

In dit voorbeeld wordt de algemene ODBC-gegevensprovider gebruikt om verbinding te maken met een PostgreSQL-databaseserver in hetzelfde netwerk, waarbij de volledig gekwalificeerde domeinnaam van de PostgreSQL-server is POSTGRES1, met behulp van de standaardpoort van TCP 5432.

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

Azure-opslag

Een handtekening voor gedeelde toegang maken

Voor zowel Azure Blob Storage als Azure Data Lake Storage (ADLS) Gen2 is de ondersteunde verificatiemethode Shared Access Signature (SAS). Een eenvoudige manier om een shared access Signature-token te genereren, volgt u de stappen die volgen. Zie CREDENTIAL voor meer informatie.

  1. Navigeer naar Azure Portal en het gewenste opslagaccount.

  2. Navigeer naar de gewenste container onder het menu Gegevensopslag .

  3. Selecteer Gedeelde toegangstokens.

  4. Kies de juiste machtiging op basis van de gewenste actie:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
    Create External Table as Select (CETAS) gebruiken Lezen, maken en schrijven
  5. Kies de vervaldatum van het token.

  6. SAS-token en URL genereren.

  7. Kopieer het SAS-token.

F. Externe gegevensbron maken voor toegang tot gegevens in Azure Blob Storage met behulp van de abs://-interface

Van toepassing op: SQL Server 2022 (16.x) en hoger

Gebruik vanaf SQL Server 2022 (16.x) een nieuw voorvoegsel abs voor Azure Storage-account v2. Het abs voorvoegsel ondersteunt verificatie met behulp van SHARED ACCESS SIGNATURE. Het abs voorvoegsel vervangt wasb, gebruikt in eerdere versies. HADOOP wordt niet meer ondersteund, u hoeft deze niet meer te gebruiken TYPE = BLOB_STORAGE.

De Sleutel van het Azure-opslagaccount is niet meer nodig, in plaats daarvan met behulp van sas-token, zoals we in het volgende voorbeeld kunnen zien:

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
    SECRET = '<Blob_SAS_Token>';
GO

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredentialv2
);

Zie CSV-bestand virtualiseren met PolyBase voor een gedetailleerd voorbeeld van het openen van CSV-bestanden die zijn opgeslagen in Azure Blob Storage.

G. Externe gegevensbron maken voor toegang tot gegevens in Azure Data Lake Gen2

Van toepassing op: SQL Server 2022 (16.x) en latere versies

Gebruik vanaf SQL Server 2022 (16.x) een nieuw voorvoegsel adls voor Azure Data Lake Gen2, waarbij u deze in eerdere versies vervangt abfs . Het adls voorvoegsel biedt ook ondersteuning voor SAS-token als verificatiemethode, zoals wordt weergegeven in dit voorbeeld:

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<DataLakeGen2_SAS_Token>';
GO

CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = datalakegen2
);

Zie Delta-tabel virtualiseren met PolyBase voor een gedetailleerd voorbeeld van het openen van deltabestanden die zijn opgeslagen in Azure Data Lake Gen2.

Voorbeelden: Bulkbewerkingen

Belangrijk

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of shared access signature toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

H. Een externe gegevensbron maken voor bulkbewerkingen die gegevens ophalen uit Azure Storage

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Gebruik de volgende gegevensbron voor bulkbewerkingen met BULK INSERT (Transact-SQL) of OPENROWSET (Transact-SQL). De referentie moet zijn ingesteld SHARED ACCESS SIGNATURE als de identiteit, mag niet het voorlooppunt ? in het SAS-token hebben, moet ten minste leesmachtigingen hebben voor het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r) en de verloopperiode moet geldig zijn (alle datums zijn in UTC-tijd). Zie Shared Access Signatures (SAS) gebruiken voor meer informatie over handtekeningen voor gedeelde toegang.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

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

Overzicht: SQL Server 2025

Van toepassing op: SQL Server 2025 (17.x) Preview en latere versies.

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

Opmerking

Deze syntaxis varieert in verschillende versies van SQL Server. Gebruik de vervolgkeuzelijst versiekiezer om de juiste versie te kiezen. Deze inhoud is van toepassing op SQL Server 2025 (17.x) Preview en latere versies.

Syntaxis voor SQL Server 2025 en latere versies

Zie Transact-SQL syntaxisconventiesvoor meer informatie over de syntaxisconventies.

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] PUSHDOWN = { ON | OFF } ]
  )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Server.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Ondersteunde locaties per product/service Authenticatie
Azure Storage-account (V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
of
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Vanaf SQL Server 2022 (16.x)
Hiërarchische naamruimte wordt ondersteund.
Gedeelde toegangshandtekening (SAS)
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
of
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Vanaf SQL Server 2022 (16.x) Gedeelde toegangshandtekening (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] Vanaf SQL Server 2019 (15.x) Alleen SQL-verificatie
Orakel oracle <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Teradata teradata <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
MongoDB- of Cosmos DB-API voor MongoDB mongodb <server_name>[:port] Vanaf SQL Server 2019 (15.x) Alleen basisverificatie
Algemene ODBC odbc <server_name>[:port] Vanaf SQL Server 2019 (15.x) - alleen Windows Alleen basisverificatie
Bulkbewerkingen https <storage_account>.blob.core.windows.net/<container> Vanaf SQL Server 2017 (14.x) Gedeelde toegangshandtekening (SAS)
S3-compatibele objectopslag s3 - S3-compatibel: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
of s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Vanaf SQL Server 2022 (16.x) Basic of passthrough (STS) 1

1 Moet een databasereferentie binnen het bereik zijn, waarbij de IDENTITY code is vastgelegd IDENTITY = 'S3 Access Key' en het SECRET argument de indeling = '<AccessKeyID>:<SecretKeyID>' heeft of passthrough-autorisatie (STS) gebruikt. Zie PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag voor meer informatie.

Locatiepad:

Locatiepad Beschrijving
port De poort waarop de externe gegevensbron luistert. Optioneel in veel gevallen, afhankelijk van de netwerkconfiguratie.
<container_name> De container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
<storage_account> De naam van het opslagaccount van de Azure-resource.
<server_name> De hostnaam.
<instance_name> De naam van het benoemde SQL Server-exemplaar. Wordt gebruikt als sql Server Browser Service wordt uitgevoerd op het doelexemplaren.
<ip_address>:<port> 1 Alleen voor S3-compatibele objectopslag, het eindpunt en de poort die wordt gebruikt om verbinding te maken met de S3-compatibele opslag.
<bucket_name> 1 Alleen voor S3-compatibele objectopslag, specifiek voor het opslagplatform.
<region> 1 Alleen voor S3-compatibele objectopslag, specifiek voor het opslagplatform.
<folder> Een deel van het opslagpad binnen de opslag-URL.

1 SQL Server 2022 (16.x) en latere versies.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

In SQL Server 2022 (16.x) en latere versies:

  • het voorvoegsel dat wordt gebruikt voor het Azure Storage-account (v2) is gewijzigd van wasb[s] in abs

  • het voorvoegsel dat wordt gebruikt voor Azure Data Lake Storage Gen2 is gewijzigd van abfs[s] in adls

  • Zie CSV-bestand virtualiseren met PolyBase voor een voorbeeld van PolyBase om een CSV-bestand in Azure Storage te virtualiseren.

  • Zie Delta-tabel virtualiseren met PolyBase voor een voorbeeld van polybase om een deltatabel in ADLS Gen2 te virtualiseren.

  • SQL Server 2022 (16.x) en latere versies ondersteunen volledig twee URL-indelingen voor zowel Azure Storage-account v2 () alsabs Azure Data Lake Gen2 (adls).

    • Het LOCATION pad kan de indelingen gebruiken: <container>@<storage_account_name>.. (aanbevolen) of <storage_account_name>../<container>. Voorbeeld:

      • Azure Storage-account v2: abs://<container>@<storage_account_name>.blob.core.windows.net (aanbevolen) of abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Azure Data Lake Gen2 ondersteunt: adls://<container>@<storage_account_name>.blob.core.windows.net (aanbevolen) of adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

van toepassing op: SQL Server 2019 (15.x) en latere versies.

Hiermee geeft u extra opties op wanneer u verbinding maakt met ODBC een externe gegevensbron. Als u meerdere verbindingsopties wilt gebruiken, scheidt u deze door een puntkomma.

Van toepassing op algemene ODBC verbindingen, evenals ingebouwde ODBC connectors voor SQL Server, Oracle, Teradata, MongoDB en Azure Cosmos DB API voor MongoDB.

Het key_value_pair is het trefwoord en de waarde voor een specifieke verbindingsoptie. De beschikbare trefwoorden en waarden zijn afhankelijk van het externe gegevensbrontype. De naam van het stuurprogramma is minimaal vereist, maar er zijn andere opties, zoals APP='<your_application_name>' of ApplicationIntent= ReadOnly|ReadWrite die ook handig zijn om in te stellen en kan helpen bij het oplossen van problemen.

Mogelijke sleutel-waardeparen zijn specifiek voor het stuurprogramma. Zie CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS voor meer informatie voor elke provider.

Vanaf SQL Server 2022 (16.x) Cumulatieve update 2 zijn extra trefwoorden geïntroduceerd ter ondersteuning van Oracle TNS-bestanden:

  • Het trefwoord TNSNamesFile geeft het bestandspad op aan het tnsnames.ora bestand dat zich op de Oracle-server bevindt.
  • Het trefwoord ServerName geeft de alias op die wordt gebruikt tnsnames.ora om de hostnaam en de poort te vervangen.

Versleutelingsopties in SQL Server 2025 (17.x) Preview

Vanaf SQL Server 2025 (17.x) Preview sqlserver is het Microsoft ODBC-stuurprogramma versie 18 voor SQL Server als gegevensbron het standaardstuurprogramma. De Encryption optie is vereist (Yes, Noof Strict) en TrustServerCertificate is beschikbaar (Yes of No). Als Encryption dit niet is opgegeven, is het standaardgedrag en Encrypt=Yes;TrustServerCertificate=No;is een servercertificaat vereist.

Als u verbinding wilt maken met het TDS 8.0-protocol, is de strikte modus (Encrypt=Strict) toegevoegd. In deze modus moet een vertrouwd servercertificaat worden geïnstalleerd en wordt altijd geverifieerd (TrustServerCertificate wordt genegeerd). Een nieuw trefwoord, HostnameInCertificatekan worden gebruikt om de verwachte hostnaam in het certificaat op te geven als deze verschilt van de opgegeven server. HostnameInCertificate kan worden gebruikt in alle versleutelingsmodi en is ook van toepassing als de optie Versleuteling aan de serverzijde is ingeschakeld, waardoor het stuurprogramma het certificaat in optionele of verplichte modi controleert, tenzij uitgeschakeld met behulp van TrustServerCertificate.

Zie Encryption meer informatie over TrustServerCertificate opties, servercertificaten en functies van het Microsoft ODBC-stuurprogramma voor SQL Server in Windows.

U moet altijd het meest recente stuurprogramma gebruiken. SQL Server 2025 (17.x) Preview biedt echter ook ondersteuning voor Microsoft ODBC-stuurprogrammaversie 17 voor SQL Server voor compatibiliteit met eerdere versies. Zie Hoe u de versie van het SQL Server-stuurprogramma voor PolyBase wijzigt voor PolyBase voor meer informatie over het wijzigen van de stuurprogrammaversie die wordt gebruikt door PolyBase.

PUSHDOWN = AAN | AF

van toepassing op: SQL Server 2019 (15.x) en latere versies.

Geeft aan of de berekening naar de externe gegevensbron kan worden gepusht. Standaard ingeschakeld.

PUSHDOWN wordt ondersteund bij het maken van verbinding met SQL Server, Oracle, Teradata, MongoDB, de Azure Cosmos DB-API voor MongoDB of ODBC op het niveau van de externe gegevensbron.

Het in- of uitschakelen van push-down op queryniveau wordt bereikt via een hint.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • U kunt een SAS-token maken door te navigeren naar Azure Portal><Your_Storage_Account>>Shared Access Signature>Configure permissions>Generate SAS and connection string. Zie Een handtekening voor gedeelde toegang genereren voor meer informatie.

  • U kunt een SAS maken en configureren met Azure Storage Explorer.

  • U kunt programmatisch een SAS-token maken via PowerShell, Azure CLI, .NET en REST API. Zie Beperkte toegang verlenen tot Azure Storage-resources met sas (Shared Access Signatures) voor meer informatie.

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als de SECRET.

    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).

  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
    Create External Table as Select (CETAS) gebruiken Lezen, maken, weergeven en schrijven
  • Voor Azure Blob Storage en Azure Data Lake Gen 2:

    • Toegestane services: Blob moet zijn geselecteerd om het SAS-token te genereren
  • Toegestane resourcetypen: Container en Object moeten worden geselecteerd om het SAS-token te genereren

Zie CREDENTIAL voorbeeld van het gebruik van een met S3 compatibele objectopslag.

Zie CREATE DATABASE SCOPED CREDENTIAL voor informatie over het maken van een databasebereikreferentie.

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in SQL Server.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Upgrade uitvoeren naar SQL Server 2025

In SQL Server 2022 (16.x) en latere versies worden externe Hadoop-gegevensbronnen niet ondersteund. Het is vereist om handmatig externe gegevensbronnen te maken die eerder zijn gemaakt met TYPE = HADOOP, en elke externe tabel die gebruikmaakt van deze externe gegevensbron.

Gebruikers moeten ook hun externe gegevensbronnen configureren om nieuwe connectors te gebruiken wanneer ze verbinding maken met Azure Storage.

Externe gegevensbron Van Tot
Azure Blob Storage (opslagdienst van Azure) wasb[s] ABS
ADLS Gen2 abfs[s] adls

Voorbeelden

Belangrijk

Zie PolyBase installeren in Windows voor meer informatie over het installeren en inschakelen van PolyBase.

Eén. Een externe gegevensbron maken in SQL Server om te verwijzen naar Oracle

Als u een externe gegevensbron wilt maken die verwijst naar Oracle, moet u een referentie voor databasebereik hebben. U kunt eventueel ook push-down van berekeningen in- of uitschakelen voor deze gegevensbron.

-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';

-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
    WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';

CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
    LOCATION = 'oracle://145.145.145.145:1521',
    PUSHDOWN = ON,
    CREDENTIAL = OracleProxyAccount
);

Optioneel kan de externe gegevensbron naar Oracle proxyverificatie gebruiken om gedetailleerd toegangsbeheer te bieden. Een proxygebruiker kan worden geconfigureerd om beperkte toegang te hebben in vergelijking met de gebruiker die wordt geïmiteerd.

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

U kunt ook verifiëren met behulp van TNS.

Vanaf SQL Server 2022 (16.x) Cumulatieve update 2, CREATE EXTERNAL DATA SOURCE ondersteunt nu het gebruik van TNS-bestanden bij het maken van verbinding met Oracle.

De CONNECTION_OPTIONS parameter is uitgebreid en gebruikt TNSNamesFile nu en ServerName als variabelen om door het tnsnames.ora bestand te bladeren en verbinding te maken met de server.

In het onderstaande voorbeeld zoekt SQL Server tijdens runtime naar de tnsnames.ora bestandslocatie die is opgegeven door TNSNamesFile en zoekt u naar de host- en netwerkpoort die is opgegeven door ServerName.

CREATE EXTERNAL DATA SOURCE [external_data_source_name]
WITH (
    LOCATION = N'oracle://XE',
    CREDENTIAL = [OracleCredentialTest],
    CONNECTION_OPTIONS = N'TNSNamesFile=C:\Temp\tnsnames.ora;ServerName=XE'
);

B. Een externe gegevensbron maken om te verwijzen naar een sql Server-benoemd exemplaar via PolyBase-connectiviteit

Van toepassing op: SQL Server 2019 (15.x) en latere versies.

Als u een externe gegevensbron wilt maken die verwijst naar een benoemd exemplaar van SQL Server, gebruikt CONNECTION_OPTIONS u om de naam van het exemplaar op te geven.

Maak eerst de referenties voor het databasebereik, met de referenties voor een geverifieerde SQL-aanmelding. De SQL ODBC-connector voor PolyBase ondersteunt alleen basisverificatie. Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEYvoor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt, uw eigen aanmelding en wachtwoord opgegeven.

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

In het volgende voorbeeld WINSQL2019 is dit de hostnaam en SQL2019 de naam van het exemplaar. 'Server=%s\SQL2019' is het sleutel-waardepaar.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019',
    CONNECTION_OPTIONS = 'Server=%s\SQL2019',
    CREDENTIAL = SQLServerCredentials
);

U kunt ook een poort gebruiken om verbinding te maken met een standaard sql Server-exemplaar.

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

C. Externe gegevensbron maken om te verwijzen naar een leesbare secundaire replica van AlwaysOn-beschikbaarheidsgroep

Van toepassing op: SQL Server 2019 (15.x) en latere versies.

Als u een externe gegevensbron wilt maken die verwijst naar een leesbare secundaire replica van SQL Server, gebruikt CONNECTION_OPTIONS u om de ApplicationIntent=ReadOnly. Daarnaast moet u de beschikbaarheidsdatabase instellen zoals Database={dbname} in CONNECTION_OPTIONS, of de beschikbaarheidsdatabase instellen als de standaarddatabase van de aanmelding die wordt gebruikt voor de referentie voor het databasebereik. U moet dit doen op alle beschikbaarheidsreplica's van de beschikbaarheidsgroep.

Maak eerst de referenties voor het databasebereik, met de referenties voor een geverifieerde SQL-aanmelding. De SQL ODBC-connector voor PolyBase ondersteunt alleen basisverificatie. Voordat u een databasereferentie met een bereik maakt, moet de database een hoofdsleutel hebben om de referentie te beveiligen. Zie CREATE MASTER KEYvoor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt, uw eigen aanmelding en wachtwoord opgegeven.

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

Maak vervolgens de nieuwe externe gegevensbron.

Of u nu in de Database=dbname beschikbaarheidsdatabase hebt opgenomen CONNECTION_OPTIONS of als de standaarddatabase voor de aanmelding bij de referentie voor databasebereik hebt opgegeven, u moet de databasenaam nog steeds opgeven via een driedelige naam in de instructie CREATE EXTERNAL TABLE, binnen de parameter LOCATION. Zie CREATE EXTERNAL TABLE voor een voorbeeld.

In het volgende voorbeeld WINSQL2019AGL is de listenernaam van de beschikbaarheidsgroep en dbname de naam van de database die het doel is van de instructie CREATE EXTERNAL TABLE.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = SQLServerCredentials
);

U kunt het omleidingsgedrag van de beschikbaarheidsgroep demonstreren door een externe tabel op te geven ApplicationIntent en te maken in de systeemweergave sys.servers. In het volgende voorbeeldscript worden twee externe gegevensbronnen gemaakt en er wordt voor elke tabel één externe tabel gemaakt. Gebruik de weergaven om te testen welke server reageert op de verbinding. Vergelijkbare resultaten kunnen ook worden bereikt via de functie alleen-lezenroutering. Zie Alleen-lezenroutering configureren voor een AlwaysOn-beschikbaarheidsgroep voor meer informatie.

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadOnlyIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
    CREDENTIAL = [SQLServerCredentials]
);
GO

CREATE EXTERNAL DATA SOURCE [DataSource_SQLInstanceListener_ReadWriteIntent]
WITH (
    LOCATION = 'sqlserver://WINSQL2019AGL',
    CONNECTION_OPTIONS = 'ApplicationIntent=ReadWrite',
    CREDENTIAL = [SQLServerCredentials]
);
GO

Maak in de database in de beschikbaarheidsgroep een weergave die moet worden geretourneerd sys.servers en de naam van het lokale exemplaar, waarmee u kunt bepalen welke replica reageert op de query. Zie sys.servers voor meer informatie.

CREATE VIEW vw_sys_servers AS
    SELECT [name]
    FROM sys.servers
    WHERE server_id = 0;
GO

Maak vervolgens een externe tabel op het bronexemplaren:

CREATE EXTERNAL TABLE vw_sys_servers_ro
(
    name SYSNAME NOT NULL
)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadOnlyIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

CREATE EXTERNAL TABLE vw_sys_servers_rw
(
    name SYSNAME NOT NULL
)
WITH (
    DATA_SOURCE = [DataSource_SQLInstanceListener_ReadWriteIntent],
    LOCATION = N'dbname.dbo.vw_sys_servers'
);
GO

SELECT [name]
FROM dbo.vw_sys_servers_ro;
--should return secondary replica instance

SELECT [name]
FROM dbo.vw_sys_servers_rw;
--should return primary replica instance
GO

D. Een externe gegevensbron maken om een query uit te voeren op een Parquet-bestand in S3-compatibele objectopslag via PolyBase

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Met het volgende voorbeeldscript maakt u een externe gegevensbron s3_ds in de brongebruikersdatabase in SQL Server. De externe gegevensbron verwijst naar de gegevensreferentie van het s3_dc databasebereik.

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

Controleer de nieuwe externe gegevensbron met sys.external_data_sources.

SELECT *
FROM sys.external_data_sources;

Vervolgens ziet u in het volgende voorbeeld hoe u T-SQL gebruikt om een query uit te voeren op een Parquet-bestand dat is opgeslagen in S3-compatibele objectopslag via openROWSET-query. Zie Parquet-bestand virtualiseren in een S3-compatibele objectopslag met PolyBase voor meer informatie.

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

E. Externe gegevensbron maken met behulp van algemene ODBC naar PostgreSQL

Net als in de vorige voorbeelden maakt u eerst een databasehoofdsleutel en referenties met databasebereik. De referentie voor het databasebereik wordt gebruikt voor de externe gegevensbron. In dit voorbeeld wordt ook ervan uitgegaan dat een algemene ODBC-gegevensprovider voor PostgreSQL op de server is geïnstalleerd.

In dit voorbeeld wordt de algemene ODBC-gegevensprovider gebruikt om verbinding te maken met een PostgreSQL-databaseserver in hetzelfde netwerk, waarbij de volledig gekwalificeerde domeinnaam van de PostgreSQL-server is POSTGRES1, met behulp van de standaardpoort van TCP 5432.

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

Azure-opslag

Een handtekening voor gedeelde toegang maken

Voor zowel Azure Blob Storage als Azure Data Lake Gen2 is de ondersteunde verificatiemethode Shared Access Signature (SAS). Een eenvoudige manier om een shared access Signature-token te genereren, volgt u de stappen die volgen. Zie CREDENTIAL voor meer informatie.

  1. Navigeer naar Azure Portal en het gewenste opslagaccount.
  2. Navigeer naar de gewenste container onder het menu Gegevensopslag .
  3. Selecteer Gedeelde toegangstokens.
  4. Kies de juiste machtiging op basis van de gewenste actie, voor referentiegebruik de tabel hieronder:
Handeling Toestemming
Gegevens uit een bestand lezen Lezen
Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
Create External Table as Select (CETAS) gebruiken Lezen, maken en schrijven
  1. Kies de vervaldatum van het token.
  2. SAS-token en URL genereren.
  3. Kopieer het SAS-token.

F. Externe gegevensbron maken voor toegang tot gegevens in Azure Blob Storage met behulp van de abs://-interface

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Gebruik een nieuw voorvoegsel abs voor Azure Storage-account v2. Het abs voorvoegsel ondersteunt verificatie met behulp van SHARED ACCESS SIGNATURE. Het abs voorvoegsel vervangt wasb, gebruikt in eerdere versies. HADOOP wordt niet meer ondersteund, u hoeft deze niet meer te gebruiken TYPE = BLOB_STORAGE.

De Sleutel van het Azure-opslagaccount is niet meer nodig, in plaats daarvan met behulp van sas-token, zoals we in het volgende voorbeeld kunnen zien:

-- Create a database master key if one does not already exist, using your own password.

-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredentialv2
WITH
    IDENTITY = 'SHARED ACCESS SIGNATURE', -- to use SAS the identity must be fixed as-is
    SECRET = '<Blob_SAS_Token>';
GO

-- Create an external data source with CREDENTIAL option.
CREATE EXTERNAL DATA SOURCE MyAzureStorage
WITH (
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/',
    CREDENTIAL = AzureStorageCredentialv2
);

Zie CSV-bestand virtualiseren met PolyBase voor een gedetailleerd voorbeeld van het openen van CSV-bestanden die zijn opgeslagen in Azure Blob Storage.

G. Externe gegevensbron maken voor toegang tot gegevens in Azure Data Lake Gen2

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Gebruik een nieuw voorvoegsel adls voor Azure Data Lake Gen2 en vervang abfs dit in eerdere versies. Het adls voorvoegsel biedt ook ondersteuning voor SAS-token als verificatiemethode, zoals wordt weergegeven in dit voorbeeld:

--Create a database scoped credential using SAS Token
CREATE DATABASE SCOPED CREDENTIAL datalakegen2
    WITH
    IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<DataLakeGen2_SAS_Token>';
GO

CREATE EXTERNAL DATA SOURCE data_lake_gen2_dfs
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = datalakegen2
);

Zie Delta-tabel virtualiseren met PolyBase voor een gedetailleerd voorbeeld van het openen van deltabestanden die zijn opgeslagen in Azure Data Lake Gen2.

Voorbeelden: Bulkbewerkingen

Belangrijk

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of Shared Access Signature-parameter toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

H. Een externe gegevensbron maken voor bulkbewerkingen die gegevens ophalen uit Azure Storage

Van toepassing op: SQL Server 2022 (16.x) en latere versies.

Gebruik de volgende gegevensbron voor bulkbewerkingen met BULK INSERT of OPENROWSET. De referentie moet zijn ingesteld SHARED ACCESS SIGNATURE als de identiteit, mag niet het voorlooppunt ? in het SAS-token hebben, moet ten minste leesmachtigingen hebben voor het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r) en de verloopperiode moet geldig zijn (alle datums zijn in UTC-tijd). Zie Shared Access Signatures (SAS) gebruiken voor meer informatie over handtekeningen voor gedeelde toegang.

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>';

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

Ik. Externe gegevensbron maken met behulp van TDS 8.0 om verbinding te maken met een andere SQL Server

Van toepassing op: SQL Server 2025 (17.x) Preview en latere versies.

Wanneer u het nieuwste Microsoft ODBC-stuurprogramma 18 voor SQL Server gebruikt, moet u de Encryption optie onder CONNECTION_OPTIONSTrustServerCertificate en wordt ook ondersteund. Als Encryption dit niet is opgegeven, is Encrypt=Yes;TrustServerCertificate=No;het standaardgedrag en hebt u een servercertificaat nodig.

In dit voorbeeld wordt SQL-verificatie gebruikt. Als u de referentie wilt beveiligen, hebt u een databasehoofdsleutel (DMK) nodig. Zie CREATE MASTER KEYvoor meer informatie. In het volgende voorbeeld wordt een databasereferentie gemaakt met een aangepaste aanmelding en een aangepast wachtwoord.

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

De naam van de doelserver is WINSQL2022, poort 58137en het is een standaardexemplaren. Door op te Encryption=Strictgeven, maakt de verbinding gebruik van TDS 8.0 en wordt het servercertificaat altijd geverifieerd. in dit voorbeeld is HostnameinCertificatede WINSQL2022 gebruikte:

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=Strict;HostnameInCertificate=WINSQL2022;'
    CREDENTIAL = SQLServerCredentials
);

J. Externe gegevensbron maken met behulp van de optie Versleuteling en TrustServerCertificate

Na het vorige voorbeeld zijn hier twee codevoorbeelden. Het eerste codefragment heeft Encryption en TrustServerCertificate ingesteld.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
    CREDENTIAL = SQLServerCredentials
);

Het volgende codefragment is niet Encryption ingeschakeld.

CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
    LOCATION = 'sqlserver://WINSQL2022:58137',
    CONNECTION_OPTIONS = 'Encryption=no;'
    CREDENTIAL = SQLServerCredentials
);

* SQL Database *  

 

Overzicht: Azure SQL Database

van toepassing op: Azure SQL Database

Hiermee maakt u een externe gegevensbron voor elastische query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en deze primaire use cases te ondersteunen:

Transact-SQL syntaxis-conventies

Syntaxis

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

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database in SQL Database.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad Beschikbaarheid
Bulkbewerkingen https <storage_account>.blob.core.windows.net/<container>
Elastische query (shard) Niet vereist <shard_map_server_name>.database.windows.net
Elastische query (extern) Niet vereist <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// Alleen beschikbaar in Azure SQL Edge. EdgeHub is altijd lokaal voor het exemplaar van Azure SQL Edge. Als zodanig hoeft u geen pad of poortwaarde op te geven.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Alleen beschikbaar in Azure SQL Edge.
Azure Storage-account (v2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/

of

abs://<storage_account_name>.blob.core.windows.net/ <container_name>
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/

of

adls://<storage_account_name>.dfs.core.windows.net/<container_name>

Locatiepad:

  • <shard_map_server_name> = De naam van de logische server in Azure die als host fungeert voor shard-toewijzingsbeheer. Het DATABASE_NAME argument bevat de database die wordt gebruikt voor het hosten van de shard-toewijzing en SHARD_MAP_NAME wordt gebruikt voor de shard-toewijzing zelf.
  • <remote_server_name> = De naam van de logische doelserver voor de elastische query. De databasenaam wordt opgegeven met behulp van het DATABASE_NAME argument.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De database-engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • Als u gegevens uit Azure Storage wilt laden in Azure SQL Database, gebruikt u een SAS-token (Shared Access Signature).
  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.
  • Wanneer de TYPE = BLOB_STORAGEreferentie moet worden gemaakt met behulp van SHARED ACCESS SIGNATURE de identiteit.
  • Wanneer u verbinding maakt met Azure Storage via de WASB[s]-connector, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).
  • Wanneer TYPE = HADOOP de referentie moet worden gemaakt met behulp van de sleutel van het opslagaccount als de SECRET.
  • TYPE = BLOB_STORAGE is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron met TYPE = BLOB_STORAGE.

Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • U kunt een SAS-token maken door te navigeren naar Azure Portal -><Your_Storage_Account> -> Shared Access Signature -> Machtigingen configureren -> SAS en verbindingsreeks genereren. Zie Een handtekening voor gedeelde toegang genereren voor meer informatie.

  • U kunt een SAS maken en configureren met Azure Storage Explorer.

  • U kunt programmatisch een SAS-token maken via PowerShell, Azure CLI, .NET en REST API. Zie Beperkte toegang verlenen tot Azure Storage-resources met sas (Shared Access Signatures) voor meer informatie.

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als het GEHEIM.
    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).
  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
    Create External Table as Select (CETAS) gebruiken Lezen, maken en schrijven

Zie CREDENTIAL voor een voorbeeld van het gebruik van een SHARED ACCESS SIGNATURE met TYPE en = BLOB_STORAGE.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

TYPE = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *

Hiermee geeft u het type van de externe gegevensbron die wordt geconfigureerd. Deze parameter is niet altijd vereist en mag alleen worden opgegeven voor bepaalde externe gegevensbronnen.

  • Gebruik RDBMS deze functie voor query's tussen databases met behulp van elastische query's uit SQL Database.
  • Gebruik SHARD_MAP_MANAGER deze functie bij het maken van een externe gegevensbron bij het maken van verbinding met een sharded SQL Database.
  • Gebruik BLOB_STORAGE is alleen voor gebruik met het https voorvoegsel. Geef abd geen adlsvoor- en TYPE voorvoegsels op.

Belangrijk

Niet instellen TYPE als u een andere externe gegevensbron gebruikt.

DATABASE_NAME = database_name

Configureer dit argument wanneer het TYPE is ingesteld op RDBMS of SHARD_MAP_MANAGER.

TYP Waarde van DATABASE_NAME
RDBMS De naam van de externe database op de opgegeven server LOCATION
SHARD_MAP_MANAGER Naam van de database die als shard-toewijzingsbeheer werkt

Voor een voorbeeld waarin wordt getoond hoe u een externe gegevensbron maakt, TYPE = RDBMSraadpleegt u Een externe RDBMS-gegevensbron maken.

SHARD_MAP_NAME = shard_map_name

Wordt gebruikt wanneer het TYPE argument is ingesteld op SHARD_MAP_MANAGER alleen de naam van de shard-toewijzing.

Voor een voorbeeld waarin wordt getoond hoe u een externe gegevensbron maakt, waarin TYPE = SHARD_MAP_MANAGER wordt verwezen naar een externe shard-toewijzingsbeheerbron maken

Machtigingen

Hiervoor is een machtiging vereist CONTROL voor de database in Azure SQL Database.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Voorbeelden

Eén. Een externe gegevensbron voor shard-toewijzingsbeheer maken

Als u een externe gegevensbron wilt maken waarnaar moet worden verwezen SHARD_MAP_MANAGER, geeft u de sql Database-servernaam op die als host fungeert voor het shard-toewijzingsbeheer in SQL Database of een SQL Server-database op een virtuele machine.

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'
);

Zie Aan de slag met elastische query's voor sharding (horizontale partitionering) voor een stapsgewijze zelfstudie.

B. Een externe RDBMS-gegevensbron maken

Als u een externe gegevensbron wilt maken om te verwijzen naar een RDBMS, geeft u de sql Database-servernaam van de externe database in SQL Database op.

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

Zie Aan de slag met query's voor meerdere databases (verticale partitionering) voor een stapsgewijze zelfstudie over RDBMS.

Voorbeelden: Bulkbewerkingen

Belangrijk

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of shared access signature toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

C. Een externe gegevensbron maken voor bulkbewerkingen die gegevens ophalen uit Azure Storage

Gebruik de volgende gegevensbron voor bulkbewerkingen met BULK INSERT (Transact-SQL) of OPENROWSET (Transact-SQL). De referentie moet zijn ingesteld SHARED ACCESS SIGNATURE als de identiteit, mag niet het voorlooppunt ? in het SAS-token hebben, moet ten minste leesmachtigingen hebben voor het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r) en de verloopperiode moet geldig zijn (alle datums zijn in UTC-tijd). Zie Shared Access Signatures (SAS) gebruiken voor meer informatie over handtekeningen voor gedeelde toegang.

Maak een externe gegevensbron voor Azure Blob Storage (ABS) met beheerde identiteit:

CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity'

--Create external data source pointing to the file path, and referencing database-scoped credential: 
CREATE EXTERNAL DATA SOURCE PrivateABS 
WITH ( 
    LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/' 
    ,CREDENTIAL = [DSC_MI]);

Maak een externe gegevensbron voor Azure Data Lake Gen2 (ADLS) met behulp van gebruikersidentiteit:

CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity'

--Create external data source pointing to the file path, and referencing database-scoped credential: 
CREATE EXTERNAL DATA SOURCE PrivateADLS 
WITH ( 
    LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/' 
    ,CREDENTIAL = [DSC_ADLS]);

Zie BULK INSERT als u dit voorbeeld in gebruik wilt zien.

Voorbeelden: Azure SQL Edge

Belangrijk

Zie Gegevensstreaming in Azure SQL Edge voor informatie over het configureren van externe gegevens voor Azure SQL Edge.

Eén. Externe gegevensbron maken om te verwijzen naar Kafka

Alleen van toepassing op:Azure SQL Edge

In dit voorbeeld is de externe gegevensbron een Kafka-server met IP-adres xxx.xxx.xxx.xxx en luistert op poort 1900. De externe Kafka-gegevensbron is alleen bedoeld voor gegevensstreaming en biedt geen ondersteuning voor predicaatpush.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
    WITH (LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900');

B. Externe gegevensbron maken om te verwijzen naar EdgeHub

Alleen van toepassing op:Azure SQL Edge

In dit voorbeeld is de externe gegevensbron een EdgeHub die wordt uitgevoerd op hetzelfde edge-apparaat als Azure SQL Edge. De externe edgeHub-gegevensbron is alleen bedoeld voor het streamen van gegevens en biedt geen ondersteuning voor predicaatpush.

-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
    WITH (LOCATION = 'edgehub://');

* Azure Synapse
Analyse *
 

 

Overzicht: Azure Synapse Analytics

van toepassing op: Azure Synapse Analytics

Hiermee maakt u een externe gegevensbron voor gegevensvirtualisatie. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en de primaire use case van gegevensvirtualisatie en het laden van gegevens uit externe gegevensbronnen te ondersteunen. Zie Externe tabellen gebruiken met Synapse SQL voor meer informatie.

Belangrijk

Als u een externe gegevensbron wilt maken om een query uit te voeren op een Azure Synapse Analytics-resource met behulp van Azure SQL Database met elastische query, raadpleegt u CREATE EXTERNAL DATA SOURCE voor Azure SQL Database.

Transact-SQL syntaxis-conventies

Syntaxis

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
  [ [ , ] CREDENTIAL = <credential_name> ]
  [ [ , ] TYPE = HADOOP ]
)
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de Azure SQL Database in Azure Synapse Analytics.

LOCATION = '<prefix>://<path>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad
Data Lake Storage* Gen1 adl <storage_account>.azuredatalake.net
Data Lake Storage Gen2 abfs[s] <container>@<storage_account>.dfs.core.windows.net
Azure Blob Storage (opslagdienst van Azure) wasbs <container>@<storage_account>.blob.core.windows.net
Azure Blob Storage (opslagdienst van Azure) https <storage_account>.blob.core.windows.net/<container>/subfolders
Data Lake Storage Gen1 http[s] <storage_account>.azuredatalakestore.net/webhdfs/v1
Data Lake Storage Gen2 http[s] <storage_account>.dfs.core.windows.net/<container>/subfolders
Data Lake Storage Gen2 wasb[s] <container>@<storage_account>.blob.core.windows.net

* Microsoft Azure Data Lake Storage Gen1 biedt beperkte ondersteuning. Gen2 wordt aanbevolen voor alle nieuwe ontwikkeling.

Externe gegevensbron Connector-locatievoorvoegsel Toegewezen SQL-pools: PolyBase Toegewezen SQL-pools: systeemeigen* Serverloze SQL-pools
Data Lake Storage** Gen1 adl Nee. Nee. Ja
Data Lake Storage Gen2 abfs[s] Ja Ja Ja
Azure Blob Storage (opslagdienst van Azure) wasbs Ja Ja*** Ja
Azure Blob Storage (opslagdienst van Azure) https Nee. Ja Ja
Data Lake Storage Gen1 http[s] Nee. Nee. Ja
Data Lake Storage Gen2 http[s] Ja Ja Ja
Data Lake Storage Gen2 wasb[s] Ja Ja Ja

* Serverloze en toegewezen SQL-pools in Azure Synapse Analytics gebruiken verschillende codebasissen voor gegevensvirtualisatie. Serverloze SQL-pools ondersteunen een systeemeigen technologie voor gegevensvirtualisatie. Toegewezen SQL-pools ondersteunen zowel systeemeigen als PolyBase-gegevensvirtualisatie. PolyBase-gegevensvirtualisatie wordt gebruikt wanneer de EXTERNE GEGEVENSBRON wordt gemaakt met TYPE=HADOOP.

** Microsoft Azure Data Lake Storage Gen1 biedt beperkte ondersteuning. Gen2 wordt aanbevolen voor alle nieuwe ontwikkeling.

De veiligere wasbs connector wordt aanbevolen.wasb Alleen systeemeigen gegevensvirtualisatie in toegewezen SQL-pools (waarbij TYPE niet gelijk is aan HADOOP)-ondersteuning wasb.

Locatiepad:

  • <container> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De standaardoptie is om te gebruiken enable secure SSL connections bij het inrichten van Azure Data Lake Storage Gen2. Wanneer dit is ingeschakeld, moet u gebruiken abfss wanneer een beveiligde TLS/SSL-verbinding is geselecteerd, hoewel abfss dit ook werkt voor onbeveiligde TLS-verbindingen. Zie het Azure Blob Filesystem-stuurprogramma (ABFS) voor meer informatie.
  • Azure Synapse controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • Gebruik dezelfde externe gegevensbron voor alle tabellen bij het uitvoeren van een query op Hadoop om consistente semantiek voor query's te garanderen.
  • https: met voorvoegsel kunt u de submap in het pad gebruiken. https is niet beschikbaar voor alle methoden voor gegevenstoegang.
  • wasbs wordt aanbevolen omdat gegevens worden verzonden met behulp van een beveiligde TLS-verbinding.
  • Hiërarchische naamruimten worden niet ondersteund met Azure V2-opslagaccounts bij het openen van gegevens met behulp van de verouderde wasb:// interface, maar het gebruik van wasbs:// ondersteuning voor hiërarchische naamruimten.

CREDENTIAL = credential_name

Facultatief. Hiermee geeft u een databasereferentie op voor verificatie bij de externe gegevensbron. Externe gegevensbron zonder referentie heeft toegang tot het openbare opslagaccount of gebruikt de Microsoft Entra-identiteit van de beller om toegang te krijgen tot bestanden in Azure Storage.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • Als u gegevens wilt laden uit Azure Storage of Azure Data Lake Store (ADLS) Gen2 in Azure Synapse Analytics, gebruikt u een Azure Storage-sleutel.
  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.

Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

  • In een serverloze SQL-pool kunnen referenties binnen het databasebereik beheerde identiteit, naam van service-principal of SAS-token (Shared Access Signature) opgeven. Toegang via een gebruikersidentiteit, ook wel bekend als Microsoft Entra passthrough, is ook mogelijk in de referenties binnen het databasebereik, zoals anonieme toegang tot openbaar beschikbare opslag. Zie Ondersteunde typen opslagautorisatie voor meer informatie.

  • In een toegewezen SQL-pool kunnen databasereferenties een SAS-token (Shared Access Signature) opgeven, toegangssleutel voor opslag, service-principal, beheerde identiteit voor werkruimte of Microsoft Entra-passthrough.

TYPE = HADOOP

Optioneel, niet aanbevolen.

U kunt alleen TYPE opgeven met toegewezen SQL-pools. HADOOP is de enige toegestane waarde wanneer deze is opgegeven. Externe gegevensbronnen met TYPE=HADOOP zijn alleen beschikbaar in toegewezen SQL-pools.

Gebruik HADOOP voor verouderde implementaties, anders is het raadzaam om de nieuwere systeemeigen gegevenstoegang te gebruiken. Geef het argument TYPE niet op voor het gebruik van de nieuwere systeemeigen gegevenstoegang.

Zie TYPE = HADOOP voorbeeld van het gebruik van gegevens uit Azure Storage.

Serverloze en toegewezen SQL-pools in Azure Synapse Analytics gebruiken verschillende codedatabases voor gegevensvirtualisatie. Serverloze SQL-pools ondersteunen een systeemeigen technologie voor gegevensvirtualisatie. Toegewezen SQL-pools ondersteunen zowel systeemeigen als PolyBase-gegevensvirtualisatie. PolyBase-gegevensvirtualisatie wordt gebruikt wanneer de EXTERNE GEGEVENSBRON wordt gemaakt met TYPE=HADOOP.

Machtigingen

Vereist CONTROL machtiging voor de database.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

De meeste externe gegevensbronnen ondersteunen verificatie op basis van proxy's, met behulp van een referentie binnen het databasebereik om het proxyaccount te maken.

Sas-sleutels (Shared Access Signature) worden ondersteund voor verificatie bij Azure Data Lake Store Gen 2-opslagaccounts. Klanten die willen verifiëren met behulp van een Shared Access Signature, moeten een databasereferentie maken waar IDENTITY = "Shared Access Signature" en een SAS-token als geheim invoeren.

Als u een databasereferentie maakt waarbij IDENTITY = "Shared Access Signature" en een waarde voor een opslagsleutel als geheim wordt gebruikt, krijgt u het volgende foutbericht:

'HdfsBridge::isDirExist - Unexpected error encountered checking whether directory exists or not: AbfsRestOperationException: Operation failed: "Server failed to authenticate the request. Please refer to the information in the www-authenticate header.", 401, HEAD, [Storage path URL]'

Voorbeelden

Eén. Een externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de wasb://-interface

In dit voorbeeld is de externe gegevensbron een Azure Storage-account V2 met de naam logs. De opslagcontainer wordt aangeroepen daily. De externe Azure Storage-gegevensbron is alleen bedoeld voor gegevensoverdracht. Het biedt geen ondersteuning voor predicaatpush. Hiërarchische naamruimten worden niet ondersteund bij het openen van gegevens via de wasb:// interface. Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).

In dit voorbeeld wordt de verouderde op HADOOP Java gebaseerde toegangsmethode gebruikt. In het volgende voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie bij Azure Storage. Geef de Azure Storage-accountsleutel op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage.

-- 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. Een externe gegevensbron maken om te verwijzen naar Azure Data Lake Store Gen 1 of 2 met behulp van een service-principal

Azure Data Lake Store-connectiviteit kan zijn gebaseerd op uw ADLS-URI en de service-principal van uw Microsoft Entra-toepassing. Documentatie voor het maken van deze toepassing vindt u bij Data lake Store-verificatie met behulp van Microsoft Entra-id.

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

-- These values come from your Microsoft Entra application used to authenticate to ADLS
CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
    -- IDENTITY = '<clientID>@<OAuth2.0TokenEndPoint>' ,
    IDENTITY = '536540b4-4239-45fe-b9a3-629f97591c0c@https://login.microsoftonline.com/42f988bf-85f1-41af-91ab-2d2cd011da47/oauth2/token',
    -- SECRET = '<KEY>'
    SECRET = 'BjdIlmtKp4Fpyh9hIvr8HJlUida/seM5kQ3EpLAmeDI=';

-- For Gen 1 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen 1 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    LOCATION = 'adl://newyorktaxidataset.azuredatalakestore.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

-- For Gen2 - Create an external data source
-- TYPE: HADOOP - PolyBase uses Hadoop APIs to access data in Azure Data Lake Storage.
-- LOCATION: Provide Data Lake Storage Gen2 account name and URI
-- CREDENTIAL: Provide the credential created in the previous step
CREATE EXTERNAL DATA SOURCE AzureDataLakeStore
WITH (
    -- Note the abfss endpoint when your account has secure transfer enabled
    LOCATION = 'abfss://data@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

C. Een externe gegevensbron maken om te verwijzen naar Azure Data Lake Store Gen2 met behulp van de sleutel van het opslagaccount

-- If you do not have a Master Key on your DW you will need to create one.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';

CREATE DATABASE SCOPED CREDENTIAL ADLS_credential
WITH
    -- IDENTITY = '<storage_account_name>' ,
    IDENTITY = 'newyorktaxidata',
    -- SECRET = '<storage_account_key>'
    SECRET = 'yz5N4+bxSb89McdiysJAzo+9hgEHcJRJuXbF/uC3mhbezES/oe00vXnZEl14U0lN3vxrFKsphKov16C0w6aiTQ==';

-- Note this example uses a Gen2 secured endpoint (abfss)
CREATE EXTERNAL DATA SOURCE < data_source_name >
WITH (
    LOCATION = 'abfss://2013@newyorktaxidataset.dfs.core.windows.net',
    CREDENTIAL = ADLS_credential,
    TYPE = HADOOP
);

D. Een externe gegevensbron maken in Azure Data Lake Store Gen2 met behulp van abfs://

U hoeft SECRET niet op te geven wanneer u verbinding maakt met een Azure Data Lake Store Gen2-account met een mechanisme voor beheerde identiteit .

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

* Analyse
PlatformSysteem (PDW) *
 

 

Overzicht: Analytics Platform System

Van toepassing op: Analytics Platform System (PDW)

Hiermee maakt u een externe gegevensbron voor PolyBase-query's. Externe gegevensbronnen worden gebruikt om connectiviteit tot stand te brengen en de volgende use case te ondersteunen: Gegevensvirtualisatie en gegevensbelasting met behulp van gegevensvirtualisatie met PolyBase in SQL Server.

Transact-SQL syntaxis-conventies

Syntaxis

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
    [ [ , ] TYPE = HADOOP ]
    [ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de server in Analytics Platform System (PDW).

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Connector-locatievoorvoegsel Locatiepad
Cloudera CDH of Hortonworks HDP hdfs <Namenode>[:port]
Azure opslagaccount wasb[s] <container>@<storage_account>.blob.core.windows.net

Locatiepad:

  • <Namenode> = de computernaam, de naamservice-URI of het IP-adres van het Namenode in het Hadoop-cluster. PolyBase moet dns-namen omzetten die worden gebruikt door het Hadoop-cluster.
  • port = De poort waarop de externe gegevensbron luistert. In Hadoop vindt u de poort met behulp van de fs.defaultFS configuratieparameter. De standaardwaarde is 8020.
  • <container> = de container van het opslagaccount met de gegevens. Hoofdcontainers zijn alleen-lezen, gegevens kunnen niet worden teruggeschreven naar de container.
  • <storage_account> = de naam van het opslagaccount van de Azure-resource.

Aanvullende notities en richtlijnen bij het instellen van de locatie:

  • De PDW-engine controleert niet of de externe gegevensbron bestaat wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.
  • Gebruik dezelfde externe gegevensbron voor alle tabellen bij het uitvoeren van een query op Hadoop om consistente semantiek voor query's te garanderen.
  • wasbs wordt aanbevolen omdat gegevens worden verzonden met behulp van een beveiligde TLS-verbinding.
  • Hiërarchische naamruimten worden niet ondersteund bij gebruik met Azure Storage-accounts via wasb://.
  • Als u wilt zorgen voor geslaagde PolyBase-query's tijdens een Hadoop-failover Namenode , kunt u overwegen een virtueel IP-adres te gebruiken voor het Namenode Hadoop-cluster. Als u dit niet doet, voert u ALTER EXTERNAL DATA SOURCE uit om naar de nieuwe locatie te verwijzen.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • Als u gegevens uit Azure Storage wilt laden in Azure Synapse of PDW, gebruikt u een Azure Storage-sleutel.
  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.

TYPE = * [ HADOOP ] *

Hiermee geeft u het type van de externe gegevensbron die wordt geconfigureerd. Deze parameter is niet altijd vereist.

  • Gebruik HADOOP wanneer de externe gegevensbron Cloudera CDH, Hortonworks HDP of Azure Storage is.

Zie TYPE een voorbeeld van het gebruik van het laden = HADOOP van gegevens uit Azure Storage.

RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]'

Geef in SQL Server 2019 (15.x) geen RESOURCE_MANAGER_LOCATION op, tenzij u verbinding maakt met Cloudera CDH, Hortonworks HDP, een Azure Storage-account.

Configureer deze optionele waarde wanneer u alleen verbinding maakt met Cloudera CDH, Hortonworks HDP of een Azure Storage-account. Zie PolyBase-connectiviteitsconfiguratie (Transact-SQL) voor een volledige lijst met ondersteunde Hadoop-versies.

Wanneer de RESOURCE_MANAGER_LOCATION queryoptimalisatie is gedefinieerd, neemt de queryoptimalisatie een kostengebaseerde beslissing om de prestaties te verbeteren. Een MapReduce-taak kan worden gebruikt om de berekening naar Hadoop te pushen. Het opgeven van de RESOURCE_MANAGER_LOCATION gegevens kan het aantal gegevens dat wordt overgedragen tussen Hadoop en SQL aanzienlijk verminderen, wat kan leiden tot verbeterde queryprestaties.

Als Resource Manager niet is opgegeven, is het pushen van rekenkracht naar Hadoop uitgeschakeld voor PolyBase-query's. Een externe gegevensbron maken om te verwijzen naar Hadoop waarvoor push-down is ingeschakeld , biedt een concreet voorbeeld en verdere richtlijnen.

De RESOURCE_MANAGER_LOCATION waarde wordt niet gevalideerd wanneer u de externe gegevensbron maakt. Als u een onjuiste waarde invoert, kan het uitvoeren van queryfouten optreden wanneer er wordt geprobeerd om een push-down uit te voeren, omdat de opgegeven waarde niet kan worden omgezet.

Om PolyBase correct te laten functioneren met een externe Hadoop-gegevensbron, moeten de poorten voor de volgende Hadoop-clusteronderdelen open zijn:

  • HDFS-poorten
    • Namenode
    • Datanode
  • Resource Manager
    • Taak indienen
  • Taakgeschiedenis

Als de poort niet is opgegeven, wordt de standaardwaarde gekozen met behulp van de huidige instelling voor de configuratie van hadoop-connectiviteit.

Hadoop-connectiviteit Standaardpoort van Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

In de volgende tabel ziet u de standaardpoorten voor deze onderdelen. Er is een Hadoop-versieafhankelijkheid en de mogelijkheid van aangepaste configuratie die niet gebruikmaakt van de standaardpoorttoewijzing.

Hadoop-clusteronderdeel Standaardpoort
NameNode 8020
DataNode (Gegevensoverdracht, IPC-poort zonder bevoegdheden) 50010
DataNode (gegevensoverdracht, IPC-poort voor bevoegdheden) 1019
Resource Manager-taakverzending (Hortonworks 1.3) 50300
Resource Manager-taak indienen (Cloudera 4.3) 8021
Resource Manager-taakverzending (Hortonworks 2.0 in Windows, Cloudera 5.x op Linux) 8032
Resource Manager-taakverzending (Hortonworks 2.x, 3.0 op Linux, Hortonworks 2.1-3 op Windows) 8050
Resource Manager-taakgeschiedenis 10020

Machtigingen

Hiervoor is toestemming vereist CONTROL voor de database in Analytics Platform System (PDW).

Opmerking

Maak in eerdere versies van PDW de vereiste ALTER ANY EXTERNAL DATA SOURCE machtigingen voor de externe gegevensbron.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Veiligheid

PolyBase ondersteunt verificatie op basis van proxy's voor de meeste externe gegevensbronnen. Maak een databasereferentie in het bereik om het proxyaccount te maken.

Een SAS-token met type HADOOP wordt niet ondersteund. Dit wordt alleen ondersteund met type = BLOB_STORAGE wanneer in plaats daarvan een toegangssleutel voor een opslagaccount wordt gebruikt. Als u probeert een externe gegevensbron te maken met het type HADOOP en een SAS-referentie mislukt met de volgende fout:

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

Voorbeelden

Eén. Externe gegevensbron maken om te verwijzen naar Hadoop

Als u een externe gegevensbron wilt maken om te verwijzen naar uw Hortonworks HDP of Cloudera CDH, geeft u de computernaam of het IP-adres van de Hadoop Namenode en poort op.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8050',
    TYPE = HADOOP
);

B. Externe gegevensbron maken om te verwijzen naar Hadoop met push-down ingeschakeld

Geef de RESOURCE_MANAGER_LOCATION optie op om push-downberekeningen in te schakelen naar Hadoop voor PolyBase-query's. Als PolyBase eenmaal is ingeschakeld, wordt er een kostengebaseerde beslissing genomen om te bepalen of de queryberekening naar Hadoop moet worden gepusht.

CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
    LOCATION = 'hdfs://10.10.10.10:8020',
    TYPE = HADOOP,
    RESOURCE_MANAGER_LOCATION = '10.10.10.10:8050'
);

C. Een externe gegevensbron maken om te verwijzen naar Met Kerberos beveiligde Hadoop

Als u wilt controleren of het Hadoop-cluster Kerberos-beveiligd is, controleert u de waarde van hadoop.security.authentication de eigenschap in Hadoop core-site.xml. Als u wilt verwijzen naar een Met Kerberos beveiligd Hadoop-cluster, moet u een databasereferentie opgeven die uw Kerberos-gebruikersnaam en -wachtwoord bevat. De hoofdsleutel van de database wordt gebruikt om het referentiegeheim met databasebereik te versleutelen.

-- 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. Een externe gegevensbron maken voor toegang tot gegevens in Azure Storage met behulp van de wasb://-interface

In dit voorbeeld is de externe gegevensbron een Azure V2 Storage-account met de naam logs. De opslagcontainer wordt aangeroepen daily. De externe Azure Storage-gegevensbron is alleen bedoeld voor gegevensoverdracht. Het biedt geen ondersteuning voor predicaatpush. Hiërarchische naamruimten worden niet ondersteund bij het openen van gegevens via de wasb:// interface. Wanneer u verbinding maakt met Azure Storage via wasb of wasbs, moet verificatie worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (SAS).

In dit voorbeeld ziet u hoe u de referentie voor databasebereik maakt voor verificatie bij Azure Storage. Geef de Sleutel van het Azure-opslagaccount op in het databasereferentiegeheim. U kunt elke tekenreeks opgeven in de referentie-id met databasebereik, omdat deze niet wordt gebruikt tijdens verificatie bij Azure Storage.

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

* SQL Managed Instance *  

Overzicht: Azure SQL Managed Instance

Van toepassing op: Azure SQL Managed Instance

Hiermee maakt u een externe gegevensbron in Azure SQL Managed Instance. Zie Gegevensvirtualisatie met Azure SQL Managed Instancevoor volledige informatie.

Gegevensvirtualisatie in Azure SQL Managed Instance biedt toegang tot externe gegevens in verschillende bestandsindelingen via OPENROWSET of CREATE EXTERNAL TABLE.

Transact-SQL syntaxis-conventies

Syntaxis

CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
  ( [ LOCATION = '<prefix>://<path>[:<port>]' ]
    [ [ , ] CREDENTIAL = <credential_name> ]
  )
[ ; ]

Argumenten

data_source_name

Hiermee geeft u de door de gebruiker gedefinieerde naam voor de gegevensbron op. De naam moet uniek zijn binnen de database.

LOCATION = '<prefix>://<path[:p ort]>'

Biedt het connectiviteitsprotocol en het pad naar de externe gegevensbron.

Externe gegevensbron Locatievoorvoegsel Locatiepad
Azure Blob Storage (opslagdienst van Azure) abs abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>
Azure Data Lake Service Gen2 adls adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>

De database-engine controleert het bestaan van de externe gegevensbron niet wanneer het object wordt gemaakt. Als u wilt valideren, maakt u een externe tabel met behulp van de externe gegevensbron.

Voeg aan het einde van de URL geen parameters voor een volg- /, bestandsnaam- of shared access signature toe bij het LOCATION configureren van een externe gegevensbron voor bulkbewerkingen.

CREDENTIAL = credential_name

Hiermee geeft u een referentie voor databasebereik op voor verificatie bij de externe gegevensbron.

Aanvullende notities en richtlijnen bij het maken van een referentie:

  • Gebruik een Shared Access Signature (SAS-token) om gegevens uit Azure Storage te laden in Azure SQL Managed Instance.
  • CREDENTIAL is alleen vereist als de gegevens zijn beveiligd. CREDENTIAL is niet vereist voor gegevenssets die anonieme toegang toestaan.
  • Als een referentie vereist is, moet de referentie worden gemaakt met Managed Identity of SHARED ACCESS SIGNATURE als de IDENTITEIT. Zie CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) om een databasereferentie te maken.

De beheerde service-identiteit gebruiken voor de databasereferentie:

  • Specificeren WITH IDENTITY = 'Managed Identity'

  • Gebruik de door het systeem toegewezen beheerde service-identiteit van azure SQL Managed Instance. Deze moet worden ingeschakeld als deze voor dit doel moet worden gebruikt.

Een SAS (Shared Access Signature) maken voor de referentie voor het databasebereik:

  • Specificeren WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...

  • Er zijn meerdere manieren om een handtekening voor gedeelde toegang te maken:

  • Het SAS-token moet als volgt worden geconfigureerd:

    • Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop ? uit wanneer deze is geconfigureerd als het GEHEIM.
    • Gebruik een geldige verloopperiode (alle datums zijn in UTC-tijd).
  • Geef ten minste leesmachtigingen op het bestand dat moet worden geladen (bijvoorbeeld srt=o&sp=r). Er kunnen meerdere handtekeningen voor gedeelde toegang worden gemaakt voor verschillende gebruiksvoorbeelden. Machtigingen moeten als volgt worden verleend:

    Handeling Toestemming
    Gegevens uit een bestand lezen Lezen
    Gegevens uit meerdere bestanden en submappen lezen Lezen en weergeven
    Create External Table as Select (CETAS) gebruiken Lezen, maken en schrijven

Machtigingen

Hiervoor is machtiging vereist CONTROL voor de database in Azure SQL Managed Instance.

Vergrendeling

Neemt een gedeelde vergrendeling op het EXTERNAL DATA SOURCE object.

Voorbeelden

Zie Gegevensvirtualisatie met Azure SQL Managed Instance voor meer voorbeelden.

Eén. Query's uitvoeren op externe gegevens uit Azure SQL Managed Instance met OPENROWSET of een externe tabel

Zie CREATE EXTERNAL DATA SOURCE (Transact-SQL) voor meer voorbeelden of zie Gegevensvirtualisatie met Azure SQL Managed Instance.

  1. Maak de hoofdsleutel van de database als deze niet bestaat.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. Maak de databasereferentie met behulp van een SAS-token. U kunt ook een beheerde identiteit gebruiken.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Maak de externe gegevensbron met behulp van de referentie.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest',
        CREDENTIAL = [MyCredential]
    );
    
  4. Query uitvoeren op Parquet-gegevensbestand in de externe gegevensbron met behulp van de OPENROWSET T-SQL-syntaxis, waarbij u afhankelijk bent van schemadeductie om snel gegevens te verkennen zonder het schema te kennen.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.parquet',
        DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'parquet'
    ) AS filerows;
    
  5. U kunt ook query's uitvoeren op gegevens met behulp van de WITH-component OPENROWSET, in plaats van te vertrouwen op schemadeductie, wat de uitvoeringskosten kan opvragen. In een CSV wordt schemadeductie niet ondersteund.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id,
        updated,
        confirmed,
        confirmed_change
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'CSV',
        FIRSTROW = 2
    ) WITH (
        id INT,
        updated DATE,
        confirmed INT,
        confirmed_change INT
    ) AS filerows;
    
  6. Of maak een EXTERNAL FILE FORMAT en een EXTERNAL TABLE om de gegevens op te vragen als een lokale tabel.

    -- Or, create an EXTERNAL FILE FORMAT and an EXTERNAL TABLE
    --Create external file format
    CREATE EXTERNAL FILE FORMAT DemoFileFormat
        WITH (FORMAT_TYPE = PARQUET)
    GO
    
    --Create external table:
    CREATE EXTERNAL TABLE tbl_TaxiRides (
        vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
        tpepPickupDateTime DATETIME2,
        tpepDropoffDateTime DATETIME2,
        passengerCount INT,
        tripDistance FLOAT,
        puLocationId VARCHAR(8000),
        doLocationId VARCHAR(8000),
        startLon FLOAT,
        startLat FLOAT,
        endLon FLOAT,
        endLat FLOAT,
        rateCodeId SMALLINT,
        storeAndFwdFlag VARCHAR(8000),
        paymentType VARCHAR(8000),
        fareAmount FLOAT,
        extra FLOAT,
        mtaTax FLOAT,
        improvementSurcharge VARCHAR(8000),
        tipAmount FLOAT,
        tollsAmount FLOAT,
        totalAmount FLOAT
    )
    WITH (
        LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = NYCTaxiExternalDataSource,
        FILE_FORMAT = MyFileFormat\.\./\.\./\.\./azure-sql/
    );
    GO
    
    --Then, query the data via an external table with T-SQL:
    SELECT TOP 10 *
    FROM tbl_TaxiRides;
    GO