Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op: SQL Server 2016 (13.x) en hoger
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics 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
ofOPENROWSET
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 hetNamenode
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 defs.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 hetNamenode
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
);
Verwante inhoud
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
ofOPENROWSET
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 hetNamenode
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 defs.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 viaODBC
. -
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 hetNamenode
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_STORAGE
referentie moet worden gemaakt met behulp vanSHARED ACCESS SIGNATURE
de identiteit. -
TYPE
=BLOB_STORAGE
is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron metTYPE
=BLOB_STORAGE
. - Wanneer u verbinding maakt met Azure Storage via
wasb
ofwasbs
, 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 deSECRET
.
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).
- Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop
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). GebruikHADOOP
deze functie wanneer u van plan bent om azure Storage teCREATE 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.
Verwante inhoud
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Shared Access Signatures (SAS) gebruiken
- PolyBase-connectiviteitsconfiguratie (Transact-SQL)
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
ofOPENROWSET
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 hetNamenode
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 defs.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 viaODBC
. - Het gebruik
wasbs
ofabfss
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
ofabfss
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 hetNamenode
Hadoop-cluster. Als u dit niet doet, voert u ALTER EXTERNAL DATA SOURCE uit om naar de nieuwe locatie te verwijzen. - De
sqlhdfs
typen wordensqldatapool
ondersteund voor het maken van verbinding tussen het hoofdexemplaren en de opslaggroep van een big data-cluster. Gebruik voor Cloudera CDH of Hortonworks HDPhdfs
. Ziesqlhdfs
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 hettnsnames.ora
bestand dat zich op de Oracle-server bevindt. - Het trefwoord
ServerName
geeft de alias op die wordt gebruikttnsnames.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_STORAGE
referentie moet worden gemaakt met behulp vanSHARED ACCESS SIGNATURE
de identiteit. -
TYPE
=BLOB_STORAGE
is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron metTYPE
=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).
- Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop
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). GebruikHADOOP
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 logs
met 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
);
Verwante inhoud
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Shared Access Signatures (SAS) gebruiken
- PolyBase-connectiviteitsconfiguratie (Transact-SQL)
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
ofOPENROWSET
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 viaODBC
. - 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]
inabs
. - 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]
inadls
. - 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 () als
abs
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) ofabs://<storage_account_name>.blob.core.windows.net/<container>
.
- Azure Storage-account v2:
- Het PAD LOCATION kan de notaties gebruiken:
- Azure Data Lake Gen2 ondersteunt:
adls://<container>@<storage_account_name>.blob.core.windows.net
(aanbevolen) ofadls://<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 hettnsnames.ora
bestand dat zich op de Oracle-server bevindt. - Het trefwoord
ServerName
geeft de alias op die wordt gebruikttnsnames.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:
-
CREDENTIAL
is alleen vereist als de gegevens zijn beveiligd.CREDENTIAL
is niet vereist voor gegevenssets die anonieme toegang toestaan. - Wanneer u toegang krijgt tot het Azure Storage-account (V2) of Azure Data Lake Storage Gen2, moet dit
IDENTITY
zijnSHARED ACCESS SIGNATURE
. - Zie Een externe gegevensbron maken voor het uitvoeren van bulkbewerkingen en het ophalen van gegevens uit Azure Storage in SQL Database.
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).
- Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop
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 services:
Toegestane resourcetypen:
Container
enObject
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 = 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',
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.
Navigeer naar Azure Portal en het gewenste opslagaccount.
Navigeer naar de gewenste container onder het menu Gegevensopslag .
Selecteer Gedeelde toegangstokens.
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 Kies de vervaldatum van het token.
SAS-token en URL genereren.
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,
);
Verwante inhoud
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Shared Access Signatures (SAS) gebruiken
- PolyBase-connectiviteitsconfiguratie (Transact-SQL)
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:
- Gegevensvirtualisatie en gegevensbelasting met behulp van gegevensvirtualisatie met PolyBase in SQL Server
- Bewerkingen voor bulksgewijs laden met behulp van
BULK INSERT
ofOPENROWSET
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:
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 viaODBC
.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) en latere versies.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) en latere versies. U hoeft het
TYPE
argument niet te gebruiken in SQL Server 2025 (17.x) Preview.Zie PolyBase configureren voor toegang tot externe gegevens in S3-compatibele objectopslag en PolyBase in SQL Server 2022 (16.x) en latere versies 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.
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]
inabs
het voorvoegsel dat wordt gebruikt voor Azure Data Lake Storage Gen2 is gewijzigd van
abfs[s]
inadls
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 () als
abs
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) ofabs://<storage_account_name>.blob.core.windows.net/<container>
.
- Azure Storage-account v2:
Azure Data Lake Gen2 ondersteunt:
adls://<container>@<storage_account_name>.blob.core.windows.net
(aanbevolen) ofadls://<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 hettnsnames.ora
bestand dat zich op de Oracle-server bevindt. - Het trefwoord
ServerName
geeft de alias op die wordt gebruikttnsnames.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
, No
of 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, HostnameInCertificate
kan 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:
CREDENTIAL
is alleen vereist als de gegevens zijn beveiligd.CREDENTIAL
is niet vereist voor gegevenssets die anonieme toegang toestaan.Wanneer u toegang krijgt tot het Azure Storage-account (V2) of Azure Data Lake Storage Gen2, moet dit
IDENTITY
zijnSHARED ACCESS SIGNATURE
.
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 deSECRET
.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 services:
Toegestane resourcetypen:
Container
enObject
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.
- Navigeer naar Azure Portal en het gewenste opslagaccount.
- Navigeer naar de gewenste container onder het menu Gegevensopslag .
- Selecteer Gedeelde toegangstokens.
- 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 |
- Kies de vervaldatum van het token.
- SAS-token en URL genereren.
- 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_OPTIONS
TrustServerCertificate
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 58137
en het is een standaardexemplaren. Door op te Encryption=Strict
geven, maakt de verbinding gebruik van TDS 8.0 en wordt het servercertificaat altijd geverifieerd. in dit voorbeeld is HostnameinCertificate
de 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
);
Verwante inhoud
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Shared Access Signatures (SAS) gebruiken
- PolyBase-connectiviteitsconfiguratie (Transact-SQL)
* 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:
- Gegevensvirtualisatie (preview)
- Bewerkingen voor bulksgewijs laden met behulp van
BULK INSERT
ofOPENROWSET
- Query's uitvoeren op externe SQL Database- of Azure Synapse-exemplaren met behulp van SQL Database met elastische query
- Een query uitvoeren op een sharded SQL Database met behulp van een elastische query
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. HetDATABASE_NAME
argument bevat de database die wordt gebruikt voor het hosten van de shard-toewijzing enSHARD_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 hetDATABASE_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_STORAGE
referentie moet worden gemaakt met behulp vanSHARED 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 deSECRET
. -
TYPE
=BLOB_STORAGE
is alleen toegestaan voor bulkbewerkingen; u kunt geen externe tabellen maken voor een externe gegevensbron metTYPE
=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).
- Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop
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 hethttps
voorvoegsel. Geefabd
geenadls
voor- enTYPE
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 = RDBMS
raadpleegt 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://');
Verwante inhoud
* 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 gebruikenabfss
wanneer een beveiligde TLS/SSL-verbinding is geselecteerd, hoewelabfss
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 vanwasbs://
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
);
Verwante inhoud
- nl-NL: CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- CREËER EXTERNE TABEL (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Shared Access Signatures (SAS) gebruiken
* 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 hetNamenode
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 defs.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 hetNamenode
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
);
Verwante inhoud
* 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
ofSHARED 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.
- Verwijs de Azure RBAC-rol lezer aan de door het systeem toegewezen beheerde service-identiteit van azure SQL Managed Instance aan de benodigde Azure Blob Storage-containers. Zie Bijvoorbeeld Via Azure Portal Azure-rollen toewijzen met behulp van De Azure-portal.
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:
- U kunt een SAS-token ophalen 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).
- Wanneer een SAS-token wordt gegenereerd, bevat het een vraagteken ('?') aan het begin van het token. Sluit de voorloop
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.
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
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
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] );
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;
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;
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