Dela via


SKAPA EXTERN DATAKÄLLA (Transact-SQL)

Skapar en extern datakälla för att fråga med SQL Server, Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) eller Azure SQL Edge.

Den här artikeln innehåller syntax, argument, kommentarer, behörigheter och exempel för vilken SQL-produkt du väljer.

Välj en produkt

På följande rad väljer du det produktnamn som du är intresserad av och endast den produktinformationen visas.

* SQL Server *  

 

Översikt: SQL Server 2016

gäller för: SQL Server 2016 (13.x) och senare versioner

Skapar en extern datakälla för PolyBase-frågor. Externa datakällor används för att upprätta anslutningar och stöder dessa primära användningsfall:

  • Datavirtualisering och datainläsning med hjälp av PolyBase
  • Massinläsningsåtgärder med eller BULK INSERTOPENROWSET

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server. Använd listrutan versionsväljare för att välja lämplig version.
Om du vill visa funktionerna i SQL Server 2019 (15.x) går du till SKAPA EXTERN DATAKÄLLA. Om du vill visa funktionerna i SQL Server 2022 (16.x) går du till SKAPA EXTERN DATAKÄLLA.

Syntax för SQL Server 2016

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen i SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg Platser som stöds efter produkt/tjänst Autentisering
Cloudera CDH eller Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) till SQL Server 2019 (15.x) Anonym eller grundläggande autentisering
Azure Storage-konto(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Börjar med SQL Server 2016 (13.x)
Hierarkiskt namnområde stöds inte
Azure Storage-kontonyckel

Platssökväg:

  • <Namenode> = datornamn, namn på tjänst-URI eller IP-adress för Namenode i Hadoop-klustret. PolyBase måste matcha alla DNS-namn som används av Hadoop-klustret.
  • port = Porten som den externa datakällan lyssnar på. I Hadoop finns porten med hjälp av konfigurationsparametern fs.defaultFS . Standardvärdet är 8020.
  • <container> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.
  • <server_name> = värdnamnet.
  • <instance_name> = namnet på den SQL Server-namngivna instansen. Används om SQL Server Browser Service körs på målinstansen.

Ytterligare kommentarer och vägledning när du anger platsen:

  • SQL Server Database Engine verifierar inte förekomsten av den externa datakällan när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Använd samma externa datakälla för alla tabeller när du frågar Hadoop för att säkerställa konsekvent frågesemantik.
  • wasbs är valfritt men rekommenderas i SQL Server 2016 (13.x) för åtkomst till Azure Storage-konton eftersom data skickas med en säker TLS/SSL-anslutning.
  • Om du vill säkerställa lyckade PolyBase-frågor under en Hadoop-redundansväxling Namenode bör du överväga att använda en virtuell IP-adress för Namenode Hadoop-klustret. Om du inte gör det kör du kommandot ALTER EXTERNAL DATA SOURCE för att peka på den nya platsen.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP ]

Anger vilken typ av extern datakälla som konfigureras. I SQL Server 2016 krävs alltid den här parametern och bör endast anges som HADOOP. Stöder anslutningar till Cloudera CDH, Hortonworks HDP eller ett Azure Storage-konto. Beteendet för den här parametern skiljer sig i senare versioner av SQL Server.

Ett exempel på hur du använder TYPE = HADOOP för att läsa in data från ett Azure Storage-konto finns i Skapa extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

RESOURCE_MANAGER_LOCATION = "ResourceManager_URI[:p ort]"

Konfigurera det här valfria värdet när du ansluter till Cloudera CDH, Hortonworks HDP eller endast ett Azure Storage-konto. En fullständig lista över Hadoop-versioner som stöds finns i PolyBase Connectivity Configuration (Transact-SQL).

När har RESOURCE_MANAGER_LOCATION definierats fattar frågeoptimeraren ett kostnadsbaserat beslut för att förbättra prestandan. Ett MapReduce-jobb kan användas för att push-överföra beräkningen till Hadoop. Att RESOURCE_MANAGER_LOCATION ange kan avsevärt minska mängden data som överförs mellan Hadoop och SQL Server, vilket kan leda till bättre frågeprestanda.

Om Resource Manager inte har angetts inaktiveras push-överföring av beräkning till Hadoop för PolyBase-frågor. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat ger ett konkret exempel och ytterligare vägledning.

Värdet RESOURCE_MANAGER_LOCATION verifieras inte när du skapar den externa datakällan. Om du anger ett felaktigt värde kan det orsaka frågefel vid körningen när push-down görs eftersom det angivna värdet inte skulle kunna matchas.

För att PolyBase ska fungera korrekt med en extern Hadoop-datakälla måste portarna för följande Hadoop-klusterkomponenter vara öppna:

  • HDFS-portar
    • Namnnod
    • Datanod
  • Resource Manager
    • Lämna in arbete
    • Jobbhistorik

Om porten inte har angetts väljs standardvärdet med den aktuella inställningen för konfiguration av hadoop-anslutning.

Hadoop-anslutning Standardport för Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

I följande tabell visas standardportarna för dessa komponenter. Det finns ett beroende av Hadoop-versionen samt möjligheten till anpassad konfiguration som inte använder standardporttilldelningen.

Hadoop-klusterkomponent Standardport
Namnnod 8020
DataNode (dataöverföring, icke-privilegierad IPC-port) 50010
DataNode (dataöverföring, privilegierad IPC-port) 1019
Resource Manager-jobböverföring (Hortonworks 1.3) 50300
Resource Manager-jobböverföring (Cloudera 4.3) 8021
Resource Manager-jobböverföring (Hortonworks 2.0 i Windows, Cloudera 5.x på Linux) 8032
Resource Manager-jobböverföring (Hortonworks 2.x, 3.0 på Linux, Hortonworks 2.1-3 i Windows) 8050
Resource Manager-jobbhistorik 10020

Behörigheter

Kräver CONTROL behörighet för databasen i SQL Server.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

PolyBase stöder proxybaserad autentisering för de flesta externa datakällor. Skapa en databasomfattande autentiseringsuppgift för att skapa proxykontot.

Exempel

Viktigt!

Information om hur du installerar och aktiverar PolyBase finns i Installera PolyBase i Windows

A. Skapa en extern datakälla för att referera till Hadoop

Om du vill skapa en extern datakälla som refererar till ditt Hortonworks HDP- eller Cloudera CDH Hadoop-kluster anger du datornamnet eller IP-adressen för Hadoop Namenode och porten.

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

B. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat

Ange alternativet RESOURCE_MANAGER_LOCATION för att aktivera push-down-beräkning till Hadoop för PolyBase-frågor. När det är aktiverat fattar PolyBase ett kostnadsbaserat beslut för att avgöra om frågeberäkningen ska skickas till Hadoop.

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

C. Skapa en extern datakälla för att referera till Kerberos-skyddad Hadoop

Kontrollera om Hadoop-klustret är Kerberos-skyddat genom att kontrollera värdet hadoop.security.authentication för egenskapen i Hadoop core-site.xml. Om du vill referera till ett Kerberos-skyddat Hadoop-kluster måste du ange en databasomfattande autentiseringsuppgift som innehåller ditt Kerberos-användarnamn och lösenord. Databashuvudnyckeln används för att kryptera databasens omfångsbegränsade hemlighet för autentiseringsuppgifter.

-- 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. Skapa en extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

I det här exemplet är den externa datakällan ett Azure V2 Storage-konto med namnet logs. Lagringscontainern heter daily. Den externa Datakällan i Azure Storage är endast avsedd för dataöverföring. Det stöder inte predikat-push-down. Hierarkiska namnområden stöds inte vid åtkomst till data via wasb:// gränssnittet.

Det här exemplet visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till ett Azure V2 Storage-konto. Ange Azure Storage-kontonyckeln i databasens hemlighet för autentiseringsuppgifter. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används vid autentisering till Azure Storage. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).

I SQL Server 2016 (13.x) TYPE bör anges till även vid åtkomst till HADOOP 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
);

Nästa steg

Översikt: SQL Server 2017

Gäller för: ENDAST SQL Server 2017 (14.x)

Skapar en extern datakälla för PolyBase-frågor. Externa datakällor används för att upprätta anslutningar och stöder dessa primära användningsfall:

  • Datavirtualisering och datainläsning med hjälp av PolyBase
  • Massinläsningsåtgärder med eller BULK INSERTOPENROWSET

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server i Linux. Använd listrutan versionsväljare för att välja lämplig version.
Om du vill visa funktionerna i SQL Server 2019 (15.x) går du till SKAPA EXTERN DATAKÄLLA. Om du vill visa funktionerna i SQL Server 2022 (16.x) går du till SKAPA EXTERN DATAKÄLLA.

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server. Använd listrutan versionsväljare för att välja lämplig version.
Om du vill visa funktionerna i SQL Server 2019 (15.x) går du till SKAPA EXTERN DATAKÄLLA. Om du vill visa funktionerna i SQL Server 2022 (16.x) går du till SKAPA EXTERN DATAKÄLLA.

Syntax för SQL Server 2017

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen i SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg Platser som stöds efter produkt/tjänst Autentisering
Cloudera CDH eller Hortonworks HDP hdfs <Namenode>[:port] ENDAST SQL Server 2016 (13.x) till SQL Server 2019 (15.x) Anonym eller grundläggande autentisering
Azure Storage-konto(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Börjar med SQL Server 2016 (13.x)
Hierarkiskt namnområde stöds inte
Azure Storage-kontonyckel
Massåtgärder https <storage_account>.blob.core.windows.net/<container> Börjar med SQL Server 2017 (14.x) Signatur för delad åtkomst (SAS)

Platssökväg:

  • <Namenode> = datornamnet, namntjänstens URI eller IP-adressen för Namenode i Hadoop-klustret. PolyBase måste matcha alla DNS-namn som används av Hadoop-klustret.
  • port = Porten som den externa datakällan lyssnar på. I Hadoop finns porten med hjälp av konfigurationsparametern fs.defaultFS . Standardvärdet är 8020.
  • <container> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.
  • <server_name> = värdnamnet.
  • <instance_name> = namnet på den SQL Server-namngivna instansen. Används om SQL Server Browser Service körs på målinstansen.

Ytterligare kommentarer och vägledning när du anger platsen:

  • SQL Server Database Engine verifierar inte förekomsten av den externa datakällan när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Använd samma externa datakälla för alla tabeller när du frågar Hadoop för att säkerställa konsekvent frågesemantik.
  • Driver={<Name of Driver>} Ange när du ansluter via ODBC.
  • wasbs är valfritt men rekommenderas i SQL Server 2017 (14.x) för åtkomst till Azure Storage-konton eftersom data skickas med en säker TLS/SSL-anslutning.
  • Om du vill säkerställa lyckade PolyBase-frågor under en Hadoop-redundansväxling Namenode bör du överväga att använda en virtuell IP-adress för Namenode Hadoop-klustret. Om du inte gör det kör du kommandot ALTER EXTERNAL DATA SOURCE för att peka på den nya platsen.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.
  • TYPE = BLOB_STORAGENär måste autentiseringsuppgifterna skapas med som SHARED ACCESS SIGNATURE identitet.
  • TYPE = BLOB_STORAGE tillåts endast för massåtgärder. du kan inte skapa externa tabeller för en extern datakälla med TYPE = BLOB_STORAGE.
  • Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).
  • När TYPE = HADOOP autentiseringsuppgifterna måste skapas med lagringskontonyckeln SECRETsom .

Det finns flera sätt att skapa en signatur för delad åtkomst:

  • Du kan skapa en SAS-token genom att navigera till Azure Portal -><Your_Storage_Account> –> Signatur för delad åtkomst –> Konfigurera behörigheter –> Generera SAS och anslutningssträng. Mer information finns i Generera en signatur för delad åtkomst.

  • Du kan skapa och konfigurera en SAS med Azure Storage Explorer.

  • Du kan skapa en SAS-token programmatiskt via PowerShell, Azure CLI, .NET och REST API. Mer information finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

  • SAS-token ska konfigureras på följande sätt:

    • När en SAS-token genereras innehåller den ett frågetecken (?) i början av token. Exkludera inledande ? när det konfigureras som HEMLIGHET.
    • Använd en giltig förfalloperiod (alla datum är i UTC-tid).
    • Bevilja minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r). Flera signaturer för delad åtkomst kan skapas för olika användningsfall. Behörigheter bör beviljas på följande sätt:
    Åtgärd Tillåtelse
    Läsa data från en fil Läs
    Läsa data från flera filer och undermappar Läsa och lista upp

Ett exempel på hur du använder med CREDENTIALSHARED ACCESS SIGNATURE och TYPE = BLOB_STORAGEfinns i Skapa en extern datakälla för att köra massåtgärder och hämta data från Azure Storage till SQL Database

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Anger vilken typ av extern datakälla som konfigureras. Den här parametern krävs inte alltid och bör endast anges när du ansluter till Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto eller en Azure Data Lake Storage Gen2.

  • Använd HADOOP när den externa datakällan är Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto eller en Azure Data Lake Storage Gen2.
  • Använd BLOB_STORAGE när du kör massåtgärder från Azure Storage-kontot med BULK INSERT eller OPENROWSET. Introducerades med SQL Server 2017 (14.x). Använd HADOOP när du planerar att SKAPA EXTERN TABELL mot Azure Storage.

Anmärkning

TYPE ska anges till HADOOP även vid åtkomst till Azure Storage.

Ett exempel på hur du använder TYPE = HADOOP för att läsa in data från ett Azure Storage-konto finns i Skapa extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

RESOURCE_MANAGER_LOCATION = "ResourceManager_URI[:p ort]"

Konfigurera det här valfria värdet när du ansluter till Cloudera CDH, Hortonworks HDP eller endast ett Azure Storage-konto. En fullständig lista över Hadoop-versioner som stöds finns i PolyBase Connectivity Configuration (Transact-SQL).

När är RESOURCE_MANAGER_LOCATION definierad kommer frågeoptimeraren att fatta ett kostnadsbaserat beslut för att förbättra prestandan. Ett MapReduce-jobb kan användas för att push-överföra beräkningen till Hadoop. Att RESOURCE_MANAGER_LOCATION ange kan avsevärt minska mängden data som överförs mellan Hadoop och SQL Server, vilket kan leda till bättre frågeprestanda.

Om Resource Manager inte har angetts inaktiveras push-överföring av beräkning till Hadoop för PolyBase-frågor. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat ger ett konkret exempel och ytterligare vägledning.

Värdet RESOURCE_MANAGER_LOCATION verifieras inte när du skapar den externa datakällan. Om du anger ett felaktigt värde kan det orsaka frågefel vid körningen när push-down görs eftersom det angivna värdet inte skulle kunna matchas.

För att PolyBase ska fungera korrekt med en extern Hadoop-datakälla måste portarna för följande Hadoop-klusterkomponenter vara öppna:

  • HDFS-portar
    • Namnnod
    • Datanod
  • Resource Manager
    • Lämna in arbete
    • Jobbhistorik

Om porten inte har angetts väljs standardvärdet med den aktuella inställningen för konfiguration av hadoop-anslutning.

Hadoop-anslutning Standardport för Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

I följande tabell visas standardportarna för dessa komponenter. Observera att det finns ett beroende av Hadoop-versionen samt möjligheten till anpassad konfiguration som inte använder standardporttilldelningen.

Hadoop-klusterkomponent Standardport
Namnnod 8020
DataNode (dataöverföring, icke-privilegierad IPC-port) 50010
DataNode (dataöverföring, privilegierad IPC-port) 1019
Resource Manager-jobböverföring (Hortonworks 1.3) 50300
Resource Manager-jobböverföring (Cloudera 4.3) 8021
Resource Manager-jobböverföring (Hortonworks 2.0 i Windows, Cloudera 5.x på Linux) 8032
Resource Manager-jobböverföring (Hortonworks 2.x, 3.0 på Linux, Hortonworks 2.1-3 i Windows) 8050
Resource Manager-jobbhistorik 10020

Behörigheter

Kräver CONTROL behörighet för databasen i SQL Server.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

PolyBase stöder proxybaserad autentisering för de flesta externa datakällor. Skapa en databasomfattande autentiseringsuppgift för att skapa proxykontot.

En SAS-token med typ HADOOP stöds inte. Det stöds bara med typen = BLOB_STORAGE när en åtkomstnyckel för lagringskonto används i stället. Försök att skapa en extern datakälla med typen HADOOP och en SAS-autentiseringsuppgift misslyckas med följande fel:

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

Exempel

Viktigt!

Information om hur du installerar och aktiverar PolyBase finns i Installera PolyBase i Windows

A. Skapa en extern datakälla för att referera till Hadoop

Om du vill skapa en extern datakälla som refererar till ditt Hortonworks HDP- eller Cloudera CDH Hadoop-kluster anger du datornamnet eller IP-adressen för Hadoop Namenode och porten.

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

B. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat

Ange alternativet RESOURCE_MANAGER_LOCATION för att aktivera push-down-beräkning till Hadoop för PolyBase-frågor. När det är aktiverat fattar PolyBase ett kostnadsbaserat beslut för att avgöra om frågeberäkningen ska skickas till Hadoop.

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

C. Skapa en extern datakälla för att referera till Kerberos-skyddad Hadoop

Kontrollera om Hadoop-klustret är Kerberos-skyddat genom att kontrollera värdet hadoop.security.authentication för egenskapen i Hadoop core-site.xml. Om du vill referera till ett Kerberos-skyddat Hadoop-kluster måste du ange en databasomfattande autentiseringsuppgift som innehåller ditt Kerberos-användarnamn och lösenord. Databashuvudnyckeln används för att kryptera databasens omfångsbegränsade hemlighet för autentiseringsuppgifter.

-- 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. Skapa en extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

I det här exemplet är den externa datakällan ett Azure V2 Storage-konto med namnet logs. Lagringscontainern heter daily. Den externa Datakällan i Azure Storage är endast avsedd för dataöverföring. Det stöder inte predikat-push-down. Hierarkiska namnområden stöds inte vid åtkomst till data via wasb:// gränssnittet. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).

Det här exemplet visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till ett Azure V2 Storage-konto. Ange Azure Storage-kontonyckeln i databasens hemlighet för autentiseringsuppgifter. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används vid autentisering till 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
);

Exempel: Massåtgärder

Viktigt!

Lägg inte till parametrarna /avslutande , filnamn eller signatur för delad åtkomst i slutet av LOCATION URL:en när du konfigurerar en extern datakälla för massåtgärder.

E. Skapa en extern datakälla för massåtgärder som hämtar data från Azure Storage

Gäller för: SQL Server 2017 (14.x) och senare.

Använd följande datakälla för massåtgärder med BULK INSERT eller OPENROWSET. Autentiseringsuppgifterna måste anges SHARED ACCESS SIGNATURE som identitet, får inte ha inledande ? i SAS-token, måste ha minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r) och förfalloperioden ska vara giltig (alla datum är i UTC-tid). Mer information om signaturer för delad åtkomst finns i Använda signaturer för delad åtkomst (SAS).

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

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Om du vill se det här exemplet som används kan du läsa EXEMPLET BULK INSERT .

Nästa steg

Översikt: SQL Server 2019

Gäller för: SQL Server 2019 (15.x) och senare

Skapar en extern datakälla för PolyBase-frågor. Externa datakällor används för att upprätta anslutningar och stöder dessa primära användningsfall:

  • Datavirtualisering och datainläsning med hjälp av PolyBase
  • Massinläsningsåtgärder med eller BULK INSERTOPENROWSET

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server. Använd listrutan versionsväljare för att välja lämplig version.
Om du vill visa funktionerna i SQL Server 2022 (16.x) går du till SKAPA EXTERN DATAKÄLLA.

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server. Använd listrutan versionsväljare för att välja lämplig version.
Om du vill visa funktionerna i SQL Server 2022 (16.x) går du till SKAPA EXTERN DATAKÄLLA.

Syntax för SQL Server 2019

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen i SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg Platser som stöds efter produkt/tjänst Autentisering
Cloudera CDH eller Hortonworks HDP hdfs <Namenode>[:port] SQL Server 2016 (13.x) till SQL Server 2019 (15.x) Anonym eller grundläggande autentisering
Azure Storage-konto(V2) wasb[s] <container>@<storage_account>.blob.core.windows.net Börjar med SQL Server 2016 (13.x)
Hierarkiskt namnområde stöds inte
Azure Storage-kontonyckel
SQL Server sqlserver <server_name>[\<instance_name>][:port] Börjar med SQL Server 2019 (15.x) Endast SQL-autentisering
Orakel oracle <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
Teradata teradata <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
MongoDB- eller Cosmos DB API för MongoDB mongodb <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
ODBC (allmän) odbc <server_name>[:port] Från och med SQL Server 2019 (15.x) – Endast Windows Endast grundläggande autentisering
Massåtgärder https <storage_account>.blob.core.windows.net/<container> Börjar med SQL Server 2017 (14.x) Signatur för delad åtkomst (SAS)
Azure Data Lake Storage Gen2 abfs[s] abfss://<container>@<storage _account>.dfs.core.windows.net Börjar med SQL Server 2019 (15.x) CU11+. Åtkomstnyckel för lagring
SQL Server-datapool för stordatakluster sqldatapool sqldatapool://controller-svc/default Stöds endast i SQL Server 2019 Big Data Clusters Endast grundläggande autentisering
Lagringspool för SQL Server-stordatakluster sqlhdfs sqlhdfs://controller-svc/default Stöds endast i SQL Server 2019 Big Data Clusters Endast grundläggande autentisering

Platssökväg:

  • <Namenode> = datornamn, namn på tjänst-URI eller IP-adress för Namenode i Hadoop-klustret. PolyBase måste matcha alla DNS-namn som används av Hadoop-klustret.
  • port = Porten som den externa datakällan lyssnar på. I Hadoop finns porten med hjälp av konfigurationsparametern fs.defaultFS . Standardvärdet är 8020.
  • <container> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.
  • <server_name> = värdnamnet.
  • <instance_name> = namnet på den SQL Server-namngivna instansen. Används om SQL Server Browser Service körs på målinstansen.

Ytterligare kommentarer och vägledning när du anger platsen:

  • SQL Server Database Engine verifierar inte förekomsten av den externa datakällan när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Använd samma externa datakälla för alla tabeller när du frågar Hadoop för att säkerställa konsekvent frågesemantik.
  • Du kan använda anslutningsappen sqlserver för att ansluta SQL Server 2019 (15.x) till en annan SQL Server eller till Azure SQL Database.
  • Driver={<Name of Driver>} Ange när du ansluter via ODBC.
  • Användning wasbs eller abfss är valfritt men rekommenderas i SQL Server 2019 (15.x) för åtkomst till Azure Storage-konton eftersom data skickas med en säker TLS/SSL-anslutning.
  • abfs API:erna eller abfss stöds vid åtkomst till Azure Storage-konton från och med SQL Server 2019 (15.x) CU11. Mer information finns i Drivrutinen för Azure Blob Filesystem (ABFS).
  • Alternativet Hierarkisk namnrymd för Azure Storage-konton (V2) med abfs[s] stöds via Azure Data Lake Storage Gen2 från och med SQL Server 2019 (15.x) CU11+. Alternativet Hierarkisk namnrymd stöds annars inte och det här alternativet bör förbli inaktiverat.
  • Om du vill säkerställa lyckade PolyBase-frågor under en Hadoop-redundansväxling Namenode bör du överväga att använda en virtuell IP-adress för Namenode Hadoop-klustret. Om du inte gör det kör du kommandot ALTER EXTERNAL DATA SOURCE för att peka på den nya platsen.
  • Typerna sqlhdfs och sqldatapool stöds för att ansluta mellan huvudinstansen och lagringspoolen för ett stordatakluster. För Cloudera CDH eller Hortonworks HDP använder du hdfs. Mer information om hur du kör frågor mot sqlhdfs SQL Server Big Data Clusters-lagringspooler finns i Fråga HDFS i SQL Server 2019 Big Data Cluster.
  • SQL Server-stöd för externa datakällor för HDFS Cloudera (CDP) och Hortonworks (HDP) har dragits tillbaka och ingår inte i SQL Server 2022 (16.x) och senare versioner. Mer information finns i Alternativ för stordata på Microsoft SQL Server-plattformen.

CONNECTION_OPTIONS = key_value_pair

Anges för SQL Server 2019 (15.x) och senare. Anger ytterligare alternativ när du ansluter till ODBC en extern datakälla. Om du vill använda flera anslutningsalternativ separerar du dem med ett semikolon.

Gäller för allmänna ODBC anslutningar, samt inbyggda ODBC anslutningsappar för SQL Server, Oracle, Teradata, MongoDB och Azure Cosmos DB API för MongoDB.

key_value_pair är nyckelordet och värdet för ett specifikt anslutningsalternativ. Vilka nyckelord och värden som är tillgängliga beror på den externa datakällans typ. Namnet på drivrutinen krävs som ett minimum, men det finns andra alternativ som APP='<your_application_name>' eller ApplicationIntent= ReadOnly|ReadWrite som också är användbara att ange och kan hjälpa till med felsökning.

Möjliga nyckelvärdepar är specifika för providern för den externa datakällans leverantör. Mer information om varje provider finns i SKAPA EXTERN DATAKÄLLA (Transact-SQL) CONNECTION_OPTIONS.

Från och med SQL Server 2019 (15.x) kumulativ uppdatering 19 introducerades ytterligare nyckelord för att stödja Oracle TNS-filer:

  • Nyckelordet TNSNamesFile anger filsökvägen till tnsnames.ora filen som finns på Oracle-servern.
  • ServerName Nyckelordet anger det alias som används i tnsnames.ora som ska användas för att ersätta värdnamnet och porten.

Pushdown = ON | BORT

Anges endast för SQL Server 2019 (15.x). Anger om beräkningen kan push-överföras till den externa datakällan. Den är som standard.

PUSHDOWN stöds vid anslutning till SQL Server, Oracle, Teradata, MongoDB, Azure Cosmos DB API för MongoDB eller ODBC på extern datakällsnivå.

Aktivering eller inaktivering av push-down på frågenivå uppnås genom ett tips.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.
  • TYPE = BLOB_STORAGENär måste autentiseringsuppgifterna skapas med som SHARED ACCESS SIGNATURE identitet.
    • TYPE = BLOB_STORAGE tillåts endast för massåtgärder. du kan inte skapa externa tabeller för en extern datakälla med TYPE = BLOB_STORAGE.

Det finns flera sätt att skapa en signatur för delad åtkomst:

  • Du kan skapa en SAS-token genom att navigera till Azure Portal -><Your_Storage_Account> –> Signatur för delad åtkomst –> Konfigurera behörigheter –> Generera SAS och anslutningssträng. Mer information finns i Generera en signatur för delad åtkomst.

  • Du kan skapa och konfigurera en SAS med Azure Storage Explorer.

  • Du kan skapa en SAS-token programmatiskt via PowerShell, Azure CLI, .NET och REST API. Mer information finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

  • SAS-token ska konfigureras på följande sätt:

    • När en SAS-token genereras innehåller den ett frågetecken (?) i början av token. Exkludera inledande ? när det konfigureras som HEMLIGHET.
    • Använd en giltig förfalloperiod (alla datum är i UTC-tid).
    • Bevilja minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r). Flera signaturer för delad åtkomst kan skapas för olika användningsfall. Behörigheter bör beviljas på följande sätt:
    Åtgärd Tillåtelse
    Läsa data från en fil Läs
    Läsa data från flera filer och undermappar Läsa och lista upp

Ett exempel på hur du använder med CREDENTIALSHARED ACCESS SIGNATURE och TYPE = BLOB_STORAGEfinns i Skapa en extern datakälla för att köra massåtgärder och hämta data från Azure Storage till SQL Database

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ HADOOP | BLOB_STORAGE ]

Anger vilken typ av extern datakälla som konfigureras. Den här parametern krävs inte alltid och bör endast anges när du ansluter till Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto eller en Azure Data Lake Storage Gen2.

  • I SQL Server 2019 (15.x) anger du inte TYP om du inte ansluter till Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto.
  • Använd HADOOP när den externa datakällan är Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto eller en Azure Data Lake Storage Gen2.
  • Använd BLOB_STORAGE när du kör massåtgärder från Azure Storage-kontot med BULK INSERT eller OPENROWSET med SQL Server 2017 (14.x). Använd HADOOP när du planerar att SKAPA EXTERN TABELL mot Azure Storage.
  • SQL Server-stöd för externa datakällor för HDFS Cloudera (CDP) och Hortonworks (HDP) har dragits tillbaka och ingår inte i SQL Server 2022 (16.x) och senare versioner. Mer information finns i Alternativ för stordata på Microsoft SQL Server-plattformen.

Ett exempel på hur du använder TYPE = HADOOP för att läsa in data från ett Azure Storage-konto finns i Skapa extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

RESOURCE_MANAGER_LOCATION = "ResourceManager_URI[:p ort]"

I SQL Server 2019 (15.x) anger du inte RESOURCE_MANAGER_LOCATION om du inte ansluter till Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto.

Konfigurera det här valfria värdet när du ansluter till Cloudera CDH, Hortonworks HDP eller endast ett Azure Storage-konto. En fullständig lista över Hadoop-versioner som stöds finns i PolyBase Connectivity Configuration (Transact-SQL).

När har RESOURCE_MANAGER_LOCATION definierats fattar frågeoptimeraren ett kostnadsbaserat beslut för att förbättra prestandan. Ett MapReduce-jobb kan användas för att push-överföra beräkningen till Hadoop. Att RESOURCE_MANAGER_LOCATION ange kan avsevärt minska mängden data som överförs mellan Hadoop och SQL Server, vilket kan leda till bättre frågeprestanda.

Om Resource Manager inte har angetts inaktiveras push-överföring av beräkning till Hadoop för PolyBase-frågor. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat ger ett konkret exempel och ytterligare vägledning.

Värdet RESOURCE_MANAGER_LOCATION verifieras inte när du skapar den externa datakällan. Om du anger ett felaktigt värde kan det orsaka frågefel vid körningen när push-down görs eftersom det angivna värdet inte skulle kunna matchas.

För att PolyBase ska fungera korrekt med en extern Hadoop-datakälla måste portarna för följande Hadoop-klusterkomponenter vara öppna:

  • HDFS-portar
    • Namnnod
    • Datanod
  • Resource Manager
    • Lämna in arbete
    • Jobbhistorik

Om porten inte har angetts väljs standardvärdet med den aktuella inställningen för konfiguration av hadoop-anslutning.

Hadoop-anslutning Standardport för Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050
8 8032

I följande tabell visas standardportarna för dessa komponenter. Observera att det finns ett beroende av Hadoop-versionen samt möjligheten till anpassad konfiguration som inte använder standardporttilldelningen.

Hadoop-klusterkomponent Standardport
Namnnod 8020
DataNode (dataöverföring, icke-privilegierad IPC-port) 50010
DataNode (dataöverföring, privilegierad IPC-port) 1019
Resource Manager-jobböverföring (Hortonworks 1.3) 50300
Resource Manager-jobböverföring (Cloudera 4.3) 8021
Resource Manager-jobböverföring (Hortonworks 2.0 i Windows, Cloudera 5.x på Linux) 8032
Resource Manager-jobböverföring (Hortonworks 2.x, 3.0 på Linux, Hortonworks 2.1-3 i Windows) 8050
Resource Manager-jobbhistorik 10020

Behörigheter

Kräver CONTROL behörighet för databasen i SQL Server.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

PolyBase stöder proxybaserad autentisering för de flesta externa datakällor. Skapa en databasomfattande autentiseringsuppgift för att skapa proxykontot.

När du ansluter till lagrings- eller datapoolen i SQL Server 2019 Big Data Cluster skickas användarens autentiseringsuppgifter till serverdelssystemet. Skapa inloggningar i själva datapoolen för att aktivera direktautentisering.

En SAS-token med typ HADOOP stöds inte. Det stöds bara med typen = BLOB_STORAGE när en åtkomstnyckel för lagringskonto används i stället. Försök att skapa en extern datakälla med typen HADOOP och en SAS-autentiseringsuppgift misslyckas med följande fel:

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

Exempel

Viktigt!

Information om hur du installerar och aktiverar PolyBase finns i Installera PolyBase i Windows

A. Skapa en extern datakälla i SQL Server 2019 för att referera till Oracle

Om du vill skapa en extern datakälla som refererar till Oracle kontrollerar du att du har en databasomfattande autentiseringsuppgift. Du kan också aktivera eller inaktivera push-down av beräkningen mot den här datakällan.

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

Alternativt kan den externa datakällan till Oracle använda proxyautentisering för att ge detaljerad åtkomstkontroll. En proxyanvändare kan konfigureras för att ha begränsad åtkomst jämfört med den användare som personifieras.

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

Du kan också använda TNS-autentisering.

Från och med SQL Server 2019 (15.x) Kumulativ uppdatering 19, CREATE EXTERNAL DATA SOURCE stöder nu användning av TNS-filer vid anslutning till Oracle. Parametern CONNECTION_OPTIONS expanderades och använder TNSNamesFile nu och ServerName som variabler för att bläddra i tnsnames.ora filen och upprätta en anslutning till servern.

I exemplet nedan söker SQL Server under körning efter den tnsnames.ora filplats som anges av TNSNamesFile och söker efter den värd- och nätverksport som anges av 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'
);

Ytterligare exempel på andra datakällor, till exempel MongoDB, finns i Konfigurera PolyBase för åtkomst till externa data i MongoDB.

B. Skapa en extern datakälla för att referera till Hadoop

Om du vill skapa en extern datakälla som refererar till ditt Hortonworks HDP- eller Cloudera CDH Hadoop-kluster anger du datornamnet eller IP-adressen för Hadoop Namenode och porten.

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

C. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat

Ange alternativet RESOURCE_MANAGER_LOCATION för att aktivera push-down-beräkning till Hadoop för PolyBase-frågor. När det är aktiverat fattar PolyBase ett kostnadsbaserat beslut för att avgöra om frågeberäkningen ska skickas till Hadoop.

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

D. Skapa en extern datakälla för att referera till Kerberos-skyddad Hadoop

Kontrollera om Hadoop-klustret är Kerberos-skyddat genom att kontrollera värdet hadoop.security.authentication för egenskapen i Hadoop core-site.xml. Om du vill referera till ett Kerberos-skyddat Hadoop-kluster måste du ange en databasomfattande autentiseringsuppgift som innehåller ditt Kerberos-användarnamn och lösenord. Databashuvudnyckeln används för att kryptera databasens omfångsbegränsade hemlighet för autentiseringsuppgifter.

-- 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. Skapa en extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

I det här exemplet är den externa datakällan ett Azure V2 Storage-konto med namnet logs. Lagringscontainern heter daily. Den externa Datakällan i Azure Storage är endast avsedd för dataöverföring. Det stöder inte predikat-push-down. Hierarkiska namnområden stöds inte vid åtkomst till data via wasb:// gränssnittet. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).

Det här exemplet visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till ett Azure V2 Storage-konto. Ange Azure Storage-kontonyckeln i databasens hemlighet för autentiseringsuppgifter. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används vid autentisering till 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. Skapa en extern datakälla för att referera till en SQL Server-namngiven instans via PolyBase-anslutning

gäller för: SQL Server 2019 (15.x) och senare

Om du vill skapa en extern datakälla som refererar till en namngiven instans av SQL Server använder du CONNECTION_OPTIONS för att ange instansnamnet.

I följande exempel WINSQL2019 är värdnamnet och SQL2019 instansnamnet. 'Server=%s\SQL2019' är nyckelvärdeparet.

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

Du kan också använda en port för att ansluta till en SQL Server-standardinstans.

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

G. Skapa en extern datakälla för att referera till en läsbar sekundär replik av AlwaysOn-tillgänglighetsgruppen

gäller för: SQL Server 2019 (15.x) och senare

Om du vill skapa en extern datakälla som refererar till en läsbar sekundär replik av SQL Server använder du CONNECTION_OPTIONS för att ange ApplicationIntent=ReadOnly. Dessutom måste du antingen ange tillgänglighetsdatabasen som Database={dbname} i CONNECTION_OPTIONSeller ange tillgänglighetsdatabasen som standarddatabas för den inloggning som används för databasens begränsade autentiseringsuppgifter. Du måste göra detta på alla tillgänglighetsrepliker i tillgänglighetsgruppen.

Skapa först databasens begränsade autentiseringsuppgifter och lagra autentiseringsuppgifter för en SQL-autentiserad inloggning. SQL ODBC Connector för PolyBase stöder endast grundläggande autentisering. Innan du skapar en databasomfångad autentiseringsuppgift måste databasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY. Följande exempel skapar en databasomfattande autentiseringsuppgift och anger din egen inloggning och ditt eget lösenord.

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

Skapa sedan den nya externa datakällan.

Oavsett om du ingår Database=dbname i CONNECTION_OPTIONS eller anger tillgänglighetsdatabasen som standarddatabas för inloggningen i databasens begränsade autentiseringsuppgifter, måste du fortfarande ange databasnamnet via ett tredelade namn i instruktionen SKAPA EXTERN TABELL i parametern LOCATION. Ett exempel finns i SKAPA EXTERN TABELL.

I följande exempel WINSQL2019AGL är tillgänglighetsgruppens lyssnarnamn och dbname namnet på databasen som ska vara målet för INSTRUKTIONEN SKAPA EXTERN TABELL.

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

Du kan demonstrera omdirigeringsbeteendet för tillgänglighetsgruppen genom att ApplicationIntent ange och skapa en extern tabell i systemvyn sys.servers. I följande exempelskript skapas två externa datakällor och en extern tabell skapas för var och en. Använd vyerna för att testa vilken server som svarar på anslutningen. Liknande resultat kan också uppnås via den skrivskyddade routningsfunktionen. Mer information finns i Konfigurera skrivskyddad routning för en AlwaysOn-tillgänglighetsgrupp.

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

I databasen i tillgänglighetsgruppen skapar du en vy som ska returneras sys.servers och namnet på den lokala instansen, som hjälper dig att identifiera vilken replik som svarar på frågan. Mer information finns i sys.servers.

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

Skapa sedan en extern tabell på källinstansen:

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

Exempel: Massåtgärder

Viktigt!

Lägg inte till parametrarna /avslutande , filnamn eller signatur för delad åtkomst i slutet av LOCATION URL:en när du konfigurerar en extern datakälla för massåtgärder.

H. Skapa en extern datakälla för massåtgärder som hämtar data från Azure Storage

Gäller för: SQL Server 2017 (14.x) och SQL Server 2019 (15.x)

Använd följande datakälla för massåtgärder med BULK INSERT eller OPENROWSET. Autentiseringsuppgifterna måste anges SHARED ACCESS SIGNATURE som identitet, får inte ha inledande ? i SAS-token, måste ha minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r) och förfalloperioden ska vara giltig (alla datum är i UTC-tid). Mer information om signaturer för delad åtkomst finns i Använda signaturer för delad åtkomst (SAS).

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

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Om du vill se det här exemplet som används kan du läsa EXEMPLET BULK INSERT .

Jag. Skapa en extern datakälla för åtkomst till data i Azure Storage med hjälp av abfs://-gränssnittet

Gäller för: SQL Server 2019 (15.x) CU11 och senare

I det här exemplet är den externa datakällan ett Azure Data Lake Storage Gen2-konto logsmed hjälp av Azure Blob Filesystem-drivrutinen (ABFS). Lagringscontainern heter daily. Den externa Data Lake Storage Gen2-datakällan i Azure Data Lake är endast avsedd för dataöverföring, eftersom predikat-push-down inte stöds.

Det här exemplet visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till ett Azure Data Lake Storage Gen2-konto. Ange Azure Storage-kontonyckeln i databasens hemlighet för autentiseringsuppgifter. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används vid autentisering till 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. Skapa en extern datakälla med hjälp av allmän ODBC till PostgreSQL

Precis som i tidigare exempel skapar du först en databashuvudnyckel och databasomfångsbegränsade autentiseringsuppgifter. Databasens begränsade autentiseringsuppgifter används för den externa datakällan. Det här exemplet förutsätter också att en allmän ODBC-dataprovider för PostgreSQL är installerad på servern.

I det här exemplet används den generiska ODBC-dataprovidern för att ansluta till en PostgreSQL-databasserver i samma nätverk, där postgreSQL-serverns fullständigt kvalificerade domännamn är POSTGRES1, med standardporten TCP 5432.

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

Nästa steg

Översikt: SQL Server 2022

Gäller för: SQL Server 2022 (16.x) och senare

Skapar en extern datakälla för PolyBase-frågor. Externa datakällor används för att upprätta anslutningar och stöder dessa primära användningsfall:

  • Datavirtualisering och datainläsning med hjälp av PolyBase
  • Massinläsningsåtgärder med eller BULK INSERTOPENROWSET

Anmärkning

Den här syntaxen varierar i olika versioner av SQL Server. Använd listrutan versionsväljare för att välja lämplig version. Det här innehållet gäller för SQL Server 2022 (16.x) och senare.

Syntax för SQL Server 2022 och senare

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen i SQL Server.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg Platser som stöds efter produkt/tjänst Autentisering
Azure Storage-konto(V2) abs abs://<container_name>@<storage_account_name>.blob.core.windows.net/
eller
abs://<storage_account_name>.blob.core.windows.net/<container_name>
Börjar med SQL Server 2022 (16.x)
Hierarkiskt namnområde stöds.
Signatur för delad åtkomst (SAS)
Azure Data Lake Storage Gen2 adls adls://<container_name>@<storage_account_name>.dfs.core.windows.net/
eller
adls://<storage_account_name>.dfs.core.windows.net/<container_name>
Börjar med SQL Server 2022 (16.x) Signatur för delad åtkomst (SAS)
SQL Server sqlserver <server_name>[\<instance_name>][:port] Börjar med SQL Server 2019 (15.x) Endast SQL-autentisering
Orakel oracle <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
Teradata teradata <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
MongoDB- eller Cosmos DB API för MongoDB mongodb <server_name>[:port] Börjar med SQL Server 2019 (15.x) Endast grundläggande autentisering
ODBC (allmän) odbc <server_name>[:port] Från och med SQL Server 2019 (15.x) – Endast Windows Endast grundläggande autentisering
Massåtgärder https <storage_account>.blob.core.windows.net/<container> Börjar med SQL Server 2017 (14.x) Signatur för delad åtkomst (SAS)
S3-kompatibel objektlagring s3 - S3-kompatibel: s3://<server_name>:<port>/
- AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder>
eller s3://s3.amazonaws.com[:port]/<bucket_name>/<folder>
Börjar med SQL Server 2022 (16.x) Grundläggande eller genomströmning (STS) *

* Måste vara en databasomfattande autentiseringsuppgift, där identiteten är hårdkodad till IDENTITY = 'S3 Access Key' och SECRET-argumentet är i formatet = '<AccessKeyID>:<SecretKeyID>' eller använder sts-auktorisering (genomströmning). Mer information finns i Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring.

Platssökväg:

  • port = Porten som den externa datakällan lyssnar på. Valfritt i många fall, beroende på nätverkskonfiguration.
  • <container_name> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.
  • <server_name> = värdnamnet.
  • <instance_name> = namnet på den SQL Server-namngivna instansen. Används om SQL Server Browser Service körs på målinstansen.
  • <ip_address>:<port> = Endast för S3-kompatibel objektlagring (från och med SQL Server 2022 (16.x)), slutpunkten och porten som används för att ansluta till S3-kompatibel lagring.
  • <bucket_name> = Endast för S3-kompatibel objektlagring (från och med SQL Server 2022 (16.x)), som är specifika för lagringsplattformen.
  • <region> = Endast för S3-kompatibel objektlagring (från och med SQL Server 2022 (16.x)), som är specifika för lagringsplattformen.
  • <folder> = En del av lagringssökvägen i lagrings-URL:en.

Ytterligare kommentarer och vägledning när du anger platsen:

  • SQL Server Database Engine verifierar inte förekomsten av den externa datakällan när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Du kan använda anslutningsappen sqlserver för att ansluta SQL Server 2019 (15.x) till en annan SQL Server eller till Azure SQL Database.
  • Driver={<Name of Driver>} Ange när du ansluter via ODBC.
  • Alternativet Hierarkisk namnrymd för Azure Storage Accounts(V2) med prefixet adls stöds via Azure Data Lake Storage Gen2 i SQL Server 2022 (16.x).
  • SQL Server-stöd för externa datakällor i HDFS Cloudera (CDP) och Hortonworks (HDP) dras tillbaka och ingår inte i SQL Server 2022 (16.x). Du behöver inte använda argumentet TYPE i SQL Server 2022 (16.x).
  • Mer information om S3-kompatibel objektlagring och PolyBase från och med SQL Server 2022 (16.x) finns i Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring. Ett exempel på hur du kör frågor mot en parquet-fil i S3-kompatibel objektlagring finns i Virtualisera parquet-fil i en S3-kompatibel objektlagring med PolyBase.
  • Skiljer sig från tidigare versioner, i SQL Server 2022 (16.x), har prefixet som används för Azure Storage-kontot (v2) ändrats från wasb[s] till abs.
  • Skiljer sig från tidigare versioner, i SQL Server 2022 (16.x), har prefixet som används för Azure Data Lake Storage Gen2 ändrats från abfs[s] till adls.
  • Ett exempel på hur du använder PolyBase för att virtualisera en CSV-fil i Azure Storage finns i Virtualisera CSV-fil med PolyBase.
  • Ett exempel på hur du använder PolyBase för att virtualisera en deltatabell i ADLS Gen2 finns i Virtualisera deltatabell med PolyBase.
  • SQL Server 2022 (16.x) stöder helt två URL-format för både Azure Storage Account v2 (abs) och Azure Data Lake Gen2 (adls).
    • LOCATION-sökvägen kan använda formaten: <container>@<storage_account_name>.. (rekommenderas) eller <storage_account_name>../<container>. Till exempel:
      • Azure Storage-konto v2: abs://<container>@<storage_account_name>.blob.core.windows.net (rekommenderas) eller abs://<storage_account_name>.blob.core.windows.net/<container>.
      • Azure Data Lake Gen2 stöder: adls://<container>@<storage_account_name>.blob.core.windows.net (rekommenderas) eller adls://<storage_account_name>.dfs.core.windows.net/<container>.

CONNECTION_OPTIONS = key_value_pair

Anges för SQL Server 2019 (15.x) och senare. Anger ytterligare alternativ när du ansluter till ODBC en extern datakälla. Om du vill använda flera anslutningsalternativ separerar du dem med ett semikolon.

Gäller för allmänna ODBC anslutningar, samt inbyggda ODBC anslutningsappar för SQL Server, Oracle, Teradata, MongoDB och Azure Cosmos DB API för MongoDB.

key_value_pair är nyckelordet och värdet för ett specifikt anslutningsalternativ. Vilka nyckelord och värden som är tillgängliga beror på den externa datakällans typ. Namnet på drivrutinen krävs som ett minimum, men det finns andra alternativ som APP='<your_application_name>' eller ApplicationIntent= ReadOnly|ReadWrite som också är användbara att ange och kan hjälpa till med felsökning.

Möjliga nyckelvärdepar är specifika för drivrutinen. Mer information om varje provider finns i SKAPA EXTERN DATAKÄLLA (Transact-SQL) CONNECTION_OPTIONS.

Från och med gäller för: Kumulativ uppdatering 2 för SQL Server 2022 (16.x) introducerades ytterligare nyckelord för att stödja Oracle TNS-filer:

  • Nyckelordet TNSNamesFile anger filsökvägen till tnsnames.ora filen som finns på Oracle-servern.
  • ServerName Nyckelordet anger det alias som används i tnsnames.ora som ska användas för att ersätta värdnamnet och porten.

PUSHDOWN = ON | BORT

Gäller för: SQL Server 2019 (15.x) och senare. Anger om beräkningen kan push-överföras till den externa datakällan. Den är aktiverad som standard.

PUSHDOWN stöds vid anslutning till SQL Server, Oracle, Teradata, MongoDB, Azure Cosmos DB API för MongoDB eller ODBC på extern datakällsnivå.

Aktivering eller inaktivering av push-down på frågenivå uppnås genom ett tips.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

Det finns flera sätt att skapa en signatur för delad åtkomst:

  • Du kan skapa en SAS-token genom att navigera till Azure Portal -><Your_Storage_Account> –> Signatur för delad åtkomst –> Konfigurera behörigheter –> Generera SAS och anslutningssträng. Mer information finns i Generera en signatur för delad åtkomst.

  • Du kan skapa och konfigurera en SAS med Azure Storage Explorer.

  • Du kan skapa en SAS-token programmatiskt via PowerShell, Azure CLI, .NET och REST API. Mer information finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

  • SAS-token ska konfigureras på följande sätt:

    • När en SAS-token genereras innehåller den ett frågetecken (?) i början av token. Exkludera inledande ? när det konfigureras som HEMLIGHET.
    • Använd en giltig förfalloperiod (alla datum är i UTC-tid).
    • Bevilja minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r). Flera signaturer för delad åtkomst kan skapas för olika användningsfall. Behörigheter bör beviljas på följande sätt:
    Åtgärd Tillåtelse
    Läsa data från en fil Läs
    Läsa data från flera filer och undermappar Läsa och lista upp
    Använda Skapa extern tabell som Select (CETAS) Läsa, skapa, lista och skriva
  • För Azure Blob Storage och Azure Data Lake Gen 2:

    • Tillåtna tjänster: Blob måste väljas för att generera SAS-token
    • Tillåtna resurstyper: Container och Object måste väljas för att generera SAS-token

Ett exempel på hur du använder en CREDENTIAL med S3-kompatibel objektlagring och PolyBase finns i Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring.

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

Behörigheter

Kräver CONTROL behörighet för databasen i SQL Server.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

PolyBase stöder proxybaserad autentisering för de flesta externa datakällor. Skapa en databasomfattande autentiseringsuppgift för att skapa proxykontot.

Uppgradera till SQL Server 2022

Från och med SQL Server 2022 (16.x) stöds inte längre hadoop-externa datakällor. Det krävs att du återskapar externa datakällor manuellt som tidigare skapats med TYPE = HADOOP, och alla externa tabeller som använder den här externa datakällan.

Användarna måste också konfigurera sina externa datakällor så att de använder nya anslutningsappar när de ansluter till Azure Storage.

Extern datakälla Från Till
Azure Blob Storage-lagringstjänst wasb[s] magmuskler
ADLS Gen2 abfs[s] ADL (Aktiviteter i dagliga livet)

Exempel

Viktigt!

Information om hur du installerar och aktiverar PolyBase finns i Installera PolyBase i Windows

A. Skapa en extern datakälla i SQL Server för att referera till Oracle

Om du vill skapa en extern datakälla som refererar till Oracle kontrollerar du att du har en databasomfattande autentiseringsuppgift. Du kan också aktivera eller inaktivera push-down av beräkningen mot den här datakällan.

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

Alternativt kan den externa datakällan till Oracle använda proxyautentisering för att ge detaljerad åtkomstkontroll. En proxyanvändare kan konfigureras för att ha begränsad åtkomst jämfört med den användare som personifieras.

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

Du kan också autentisera med hjälp av TNS.

Börjar i Gäller för: SQL Server 2022 (16.x) Kumulativ uppdatering 2, CREATE EXTERNAL DATA SOURCE stöder nu användning av TNS-filer när du ansluter till Oracle. Parametern CONNECTION_OPTIONS expanderades och använder TNSNamesFile nu och ServerName som variabler för att bläddra i tnsnames.ora filen och upprätta en anslutning till servern.

I exemplet nedan söker SQL Server under körning efter den tnsnames.ora filplats som anges av TNSNamesFile och söker efter den värd- och nätverksport som anges av 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. Skapa en extern datakälla för att referera till en SQL Server-namngiven instans via PolyBase-anslutning

gäller för: SQL Server 2019 (15.x) och senare

Om du vill skapa en extern datakälla som refererar till en namngiven instans av SQL Server använder du CONNECTION_OPTIONS för att ange instansnamnet.

Skapa först databasens begränsade autentiseringsuppgifter och lagra autentiseringsuppgifter för en SQL-autentiserad inloggning. SQL ODBC Connector för PolyBase stöder endast grundläggande autentisering. Innan du skapar en databasomfångad autentiseringsuppgift måste databasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY. Följande exempel skapar en databasomfattande autentiseringsuppgift och anger din egen inloggning och ditt eget lösenord.

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

I följande exempel WINSQL2019 är värdnamnet och SQL2019 instansnamnet. 'Server=%s\SQL2019' är nyckelvärdeparet.

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

Du kan också använda en port för att ansluta till en SQL Server-standardinstans.

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

C. Skapa en extern datakälla för att referera till en läsbar sekundär replik av AlwaysOn-tillgänglighetsgruppen

gäller för: SQL Server 2019 (15.x) och senare

Om du vill skapa en extern datakälla som refererar till en läsbar sekundär replik av SQL Server använder du CONNECTION_OPTIONS för att ange ApplicationIntent=ReadOnly. Dessutom måste du antingen ange tillgänglighetsdatabasen som Database={dbname} i CONNECTION_OPTIONSeller ange tillgänglighetsdatabasen som standarddatabas för den inloggning som används för databasens begränsade autentiseringsuppgifter. Du måste göra detta på alla tillgänglighetsrepliker i tillgänglighetsgruppen.

Skapa först databasens begränsade autentiseringsuppgifter och lagra autentiseringsuppgifter för en SQL-autentiserad inloggning. SQL ODBC Connector för PolyBase stöder endast grundläggande autentisering. Innan du skapar en databasomfångad autentiseringsuppgift måste databasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY. Följande exempel skapar en databasomfattande autentiseringsuppgift och anger din egen inloggning och ditt eget lösenord.

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

Skapa sedan den nya externa datakällan.

Oavsett om du ingår Database=dbname i CONNECTION_OPTIONS eller anger tillgänglighetsdatabasen som standarddatabas för inloggningen i databasens begränsade autentiseringsuppgifter, måste du fortfarande ange databasnamnet via ett tredelade namn i instruktionen SKAPA EXTERN TABELL i parametern LOCATION. Ett exempel finns i SKAPA EXTERN TABELL.

I följande exempel WINSQL2019AGL är tillgänglighetsgruppens lyssnarnamn och dbname namnet på databasen som ska vara målet för INSTRUKTIONEN SKAPA EXTERN TABELL.

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

Du kan demonstrera omdirigeringsbeteendet för tillgänglighetsgruppen genom att ApplicationIntent ange och skapa en extern tabell i systemvyn sys.servers. I följande exempelskript skapas två externa datakällor och en extern tabell skapas för var och en. Använd vyerna för att testa vilken server som svarar på anslutningen. Liknande resultat kan också uppnås via den skrivskyddade routningsfunktionen. Mer information finns i Konfigurera skrivskyddad routning för en AlwaysOn-tillgänglighetsgrupp.

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

I databasen i tillgänglighetsgruppen skapar du en vy som ska returneras sys.servers och namnet på den lokala instansen, som hjälper dig att identifiera vilken replik som svarar på frågan. Mer information finns i sys.servers.

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

Skapa sedan en extern tabell på källinstansen:

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. Skapa en extern datakälla för att köra frågor mot en parquet-fil i S3-kompatibel objektlagring via PolyBase

gäller för: SQL Server 2022 (16.x) och senare

Följande exempelskript skapar en extern datakälla s3_ds i källanvändardatabasen i SQL Server. Den externa datakällan refererar till s3_dc databasomfattande autentiseringsuppgifter.

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

Verifiera den nya externa datakällan med sys.external_data_sources.

SELECT * FROM sys.external_data_sources;

I följande exempel visas hur du använder T-SQL för att köra frågor mot en parquet-fil som lagras i S3-kompatibel objektlagring via OPENROWSET-fråga. Mer information finns i Virtualisera parquet-fil i en S3-kompatibel objektlagring med PolyBase.

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

E. Skapa en extern datakälla med hjälp av allmän ODBC till PostgreSQL

Precis som i tidigare exempel skapar du först en databashuvudnyckel och databasomfångsbegränsade autentiseringsuppgifter. Databasens begränsade autentiseringsuppgifter används för den externa datakällan. Det här exemplet förutsätter också att en allmän ODBC-dataprovider för PostgreSQL är installerad på servern.

I det här exemplet används den generiska ODBC-dataprovidern för att ansluta till en PostgreSQL-databasserver i samma nätverk, där postgreSQL-serverns fullständigt kvalificerade domännamn är POSTGRES1, med standardporten TCP 5432.

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

Azure Storage

Skapa en signatur för delad åtkomst

För både Azure Blob Storage och Azure Data Lake Gen2 är den autentiseringsmetod som stöds signatur för delad åtkomst (SAS). Ett enkelt sätt att generera en signaturtoken för delad åtkomst följer stegen nedan. Mer information finns i CREDENTIAL.

  1. Gå till Azure-portalen och önskat lagringskonto.
  2. Gå till önskad container under menyn Datalagring .
  3. Välj Token för delad åtkomst.
  4. Välj lämplig behörighet baserat på önskad åtgärd, för referens använd tabellbälgen:
Åtgärd Tillåtelse
Läsa data från en fil Läs
Läsa data från flera filer och undermappar Läsa och lista upp
Använda Skapa extern tabell som Select (CETAS) Läsa, skapa och skriva
  1. Välj förfallodatum för token.
  2. Generera SAS-token och URL.
  3. Kopiera SAS-token.

F. Skapa en extern datakälla för att komma åt data i Azure Blob Storage med hjälp av abs://-gränssnittet

gäller för: SQL Server 2022 (16.x) och senare

Från och med SQL Server 2022 (16.x) använder du ett nytt prefix abs för Azure Storage Account v2. Prefixet abs stöder autentisering med .SHARED ACCESS SIGNATURE Prefixet abs ersätter wasb, som används i tidigare versioner. HADOOP stöds inte längre, det finns inget mer behov av att använda TYPE = BLOB_STORAGE.

Azure Storage-kontonyckeln behövs inte längre, utan använder i stället SAS-token som vi kan se i följande exempel:

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

Ett mer detaljerat exempel på hur du kommer åt CSV-filer som lagras i Azure Blob Storage finns i Virtualisera CSV-fil med PolyBase.

G. Skapa en extern datakälla för att komma åt data i Azure Data Lake Gen2

Gäller för: SQL Server 2022 (16.x) och senare versioner

Från och med SQL Server 2022 (16.x) använder du ett nytt prefix adls för Azure Data Lake Gen2 och ersätter abfs används i tidigare versioner. Prefixet adls stöder även SAS-token som autentiseringsmetod som visas i det här exemplet:

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

Ett mer detaljerat exempel på hur du kommer åt deltafiler som lagras på Azure Data Lake Gen2 finns i Virtualisera deltatabell med PolyBase.

Exempel: Massåtgärder

Viktigt!

Lägg inte till parametrarna /avslutande , filnamn eller signatur för delad åtkomst i slutet av LOCATION URL:en när du konfigurerar en extern datakälla för massåtgärder.

H. Skapa en extern datakälla för massåtgärder som hämtar data från Azure Storage

Gäller för: SQL Server 2022 (16.x) och senare.

Använd följande datakälla för massåtgärder med BULK INSERT eller OPENROWSET. Autentiseringsuppgifterna måste anges SHARED ACCESS SIGNATURE som identitet, får inte ha inledande ? i SAS-token, måste ha minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r) och förfalloperioden ska vara giltig (alla datum är i UTC-tid). Mer information om signaturer för delad åtkomst finns i Använda signaturer för delad åtkomst (SAS).

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

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

Nästa steg

* SQL-databas *  

 

Översikt: Azure SQL Database

gäller för:Azure SQL Database

Skapar en extern datakälla för elastiska frågor. Externa datakällor används för att upprätta anslutningar och stöder dessa primära användningsfall:

  • Massinläsningsåtgärder med eller BULK INSERTOPENROWSET
  • Köra frågor mot SQL Database- eller Azure Synapse-instanser med SQL Database med elastisk fråga
  • Köra frågor mot en fragmenterad SQL Database med hjälp av elastisk fråga

Syntax

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen i SQL Database.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg Tillgänglighet
Massåtgärder https <storage_account>.blob.core.windows.net/<container>
Elastisk fråga (shard) Krävs inte <shard_map_server_name>.database.windows.net
Elastisk fråga (fjärransluten) Krävs inte <remote_server_name>.database.windows.net
EdgeHub edgehub edgehub:// Endast tillgängligt i Azure SQL Edge. EdgeHub är alltid lokalt för instansen av Azure SQL Edge. Därför behöver du inte ange en sökväg eller ett portvärde.
Kafka kafka kafka://<kafka_bootstrap_server_name_ip>:<port_number> Endast tillgängligt i Azure SQL Edge.

Platssökväg:

  • <shard_map_server_name> = Det logiska servernamnet i Azure som är värd för shard map manager. Argumentet DATABASE_NAME innehåller databasen som används som värd för fragmentkartan och SHARD_MAP_NAME används för själva shardkartan.
  • <remote_server_name> = Målnamnet för den logiska servern för den elastiska frågan. Databasnamnet anges med argumentet DATABASE_NAME .

Ytterligare kommentarer och vägledning när du anger platsen:

  • Databasmotorn verifierar inte att den externa datakällan finns när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • Om du vill läsa in data från Azure Storage till Azure SQL Database använder du en SIGNATUR för delad åtkomst (SAS-token).
  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.
  • TYPE = BLOB_STORAGENär måste autentiseringsuppgifterna skapas med som SHARED ACCESS SIGNATURE identitet.
  • När du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentiseringen utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).
  • När TYPE = HADOOP autentiseringsuppgifterna måste skapas med lagringskontonyckeln SECRETsom .
  • TYPE = BLOB_STORAGE tillåts endast för massåtgärder. du kan inte skapa externa tabeller för en extern datakälla med TYPE = BLOB_STORAGE.

Det finns flera sätt att skapa en signatur för delad åtkomst:

  • Du kan skapa en SAS-token genom att navigera till Azure Portal -><Your_Storage_Account> –> Signatur för delad åtkomst –> Konfigurera behörigheter –> Generera SAS och anslutningssträng. Mer information finns i Generera en signatur för delad åtkomst.

  • Du kan skapa och konfigurera en SAS med Azure Storage Explorer.

  • Du kan skapa en SAS-token programmatiskt via PowerShell, Azure CLI, .NET och REST API. Mer information finns i Bevilja begränsad åtkomst till Azure Storage-resurser med hjälp av signaturer för delad åtkomst (SAS).

  • SAS-token ska konfigureras på följande sätt:

    • När en SAS-token genereras innehåller den ett frågetecken (?) i början av token. Exkludera inledande ? när det konfigureras som HEMLIGHET.
    • Använd en giltig förfalloperiod (alla datum är i UTC-tid).
    • Bevilja minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r). Flera signaturer för delad åtkomst kan skapas för olika användningsfall. Behörigheter bör beviljas på följande sätt:
    Åtgärd Tillåtelse
    Läsa data från en fil Läs
    Läsa data från flera filer och undermappar Läsa och lista upp
    Använda Skapa extern tabell som Select (CETAS) Läsa, skapa och skriva

Ett exempel på hur du använder med CREDENTIALSHARED ACCESS SIGNATURE och TYPE = BLOB_STORAGEfinns i Skapa en extern datakälla för att köra massåtgärder och hämta data från Azure Storage till SQL Database

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

TYPE = [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER]

Anger vilken typ av extern datakälla som konfigureras. Den här parametern krävs inte alltid.

  • Används RDBMS för frågor mellan databaser med elastiska frågor från SQL Database.
  • Använd SHARD_MAP_MANAGER när du skapar en extern datakälla när du ansluter till en fragmenterad SQL Database.
  • Använd BLOB_STORAGE när du kör massåtgärder med BULK INSERT eller OPENROWSET.

Viktigt!

Ange TYPE inte om du använder någon annan extern datakälla.

DATABASE_NAME = database_name

Konfigurera det här argumentet när är inställt på TYPERDBMS eller SHARD_MAP_MANAGER.

TYP Värdet för DATABASE_NAME
RDBMS Namnet på fjärrdatabasen på den server som tillhandahålls med hjälp av LOCATION
SHARD_MAP_MANAGER Namnet på databasen som fungerar som shard map manager

Ett exempel som visar hur du skapar en extern datakälla finns TYPE = RDBMS i Skapa en extern RDBMS-datakälla

SHARD_MAP_NAME = shard_map_name

Används när TYPE argumentet är inställt SHARD_MAP_MANAGER på endast för att ange namnet på fragmentkartan.

Ett exempel som visar hur du skapar en extern datakälla finns TYPE = SHARD_MAP_MANAGER i Skapa en extern datakälla för shard map manager

Behörigheter

Kräver CONTROL behörighet för databasen i Azure SQL Database.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Exempel

A. Skapa en extern datakälla för shard map manager

Om du vill skapa en extern datakälla för att referera till en SHARD_MAP_MANAGERanger du det SQL Database-servernamn som är värd för shard map manager i SQL Database eller en SQL Server-databas på en virtuell dator.

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

En stegvis självstudiekurs finns i Komma igång med elastiska frågor för horisontell partitionering (horisontell partitionering).

B. Skapa en extern RDBMS-datakälla

Om du vill skapa en extern datakälla som refererar till en RDBMS anger du SQL Database-servernamnet för fjärrdatabasen i SQL Database.

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

En stegvis självstudie om RDBMS finns i Komma igång med frågor mellan databaser (vertikal partitionering).

Exempel: Massåtgärder

Viktigt!

Lägg inte till parametrarna /avslutande , filnamn eller signatur för delad åtkomst i slutet av LOCATION URL:en när du konfigurerar en extern datakälla för massåtgärder.

C. Skapa en extern datakälla för massåtgärder som hämtar data från Azure Storage

Använd följande datakälla för massåtgärder med BULK INSERT eller OPENROWSET. Autentiseringsuppgifterna måste anges SHARED ACCESS SIGNATURE som identitet, får inte ha inledande ? i SAS-token, måste ha minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r) och förfalloperioden ska vara giltig (alla datum är i UTC-tid). Mer information om signaturer för delad åtkomst finns i Använda signaturer för delad åtkomst (SAS).

CREATE DATABASE SCOPED CREDENTIAL AccessAzureInvoices
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

CREATE EXTERNAL DATA SOURCE MyAzureInvoices
WITH (
    LOCATION = 'https://newinvoices.blob.core.windows.net/week3',
    CREDENTIAL = AccessAzureInvoices,
    TYPE = BLOB_STORAGE
);

Om du vill se det här exemplet som används kan du läsa BULK INSERT.

Exempel: Azure SQL Edge

Viktigt!

Information om hur du konfigurerar externa data för Azure SQL Edge finns i Dataströmning i Azure SQL Edge.

A. Skapa en extern datakälla för att referera till Kafka

Gäller endastför:Azure SQL Edge

I det här exemplet är den externa datakällan en Kafka-server med IP-adress xxx.xxx.xxx.xxx och lyssnar på port 1900. Den externa Kafka-datakällan är endast avsedd för dataströmning och stöder inte predicate push-nedtryckning.

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

B. Skapa en extern datakälla för att referera till EdgeHub

Gäller endastför:Azure SQL Edge

I det här exemplet är den externa datakällan en EdgeHub som körs på samma gränsenhet som Azure SQL Edge. Den externa datakällan edgeHub är endast avsedd för dataströmning och stöder inte predikattryckning.

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

Nästa steg

* Azure Synapse
Analys *
 

 

Översikt: Azure Synapse Analytics

gäller för:Azure Synapse Analytics

Skapar en extern datakälla för datavirtualisering. Externa datakällor används för att upprätta anslutningar och stöder det primära användningsfallet för datavirtualisering och datainläsning från externa datakällor. Mer information finns i Använda externa tabeller med Synapse SQL.

Viktigt!

Information om hur du skapar en extern datakälla för att fråga en Azure Synapse Analytics-resurs med hjälp av Azure SQL Database med elastisk fråga finns i SQL Database.

Syntax

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i Azure SQL Database i Azure Synapse Analytics.

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

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg
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-lagringstjänst wasbs <container>@<storage_account>.blob.core.windows.net
Azure Blob Storage-lagringstjänst 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 har begränsat stöd, Gen2 rekommenderas för all ny utveckling.

Extern datakälla Platsprefix för anslutning Dedikerade SQL-pooler: PolyBase Dedikerade SQL-pooler: inbyggda* Serverlös SQL-pool
Data Lake Storage** Gen1 adl Nej Nej Ja
Data Lake Storage Gen2 abfs[s] Ja Ja Ja
Azure Blob Storage-lagringstjänst wasbs Ja Ja*** Ja
Azure Blob Storage-lagringstjänst https Nej Ja Ja
Data Lake Storage Gen1 http[s] Nej Nej Ja
Data Lake Storage Gen2 http[s] Ja Ja Ja
Data Lake Storage Gen2 wasb[s] Ja Ja Ja

* Serverlösa och dedikerade SQL-pooler i Azure Synapse Analytics använder olika kodbaser för datavirtualisering. Serverlösa SQL-pooler stöder en inbyggd datavirtualiseringsteknik. Dedikerade SQL-pooler stöder både intern datavirtualisering och PolyBase-datavirtualisering. PolyBase-datavirtualisering används när DEN EXTERNA DATAKÄLLAN skapas med TYPE=HADOOP.

** Microsoft Azure Data Lake Storage Gen1 har begränsat stöd, Gen2 rekommenderas för all ny utveckling.

Den säkrare wasbs anslutningsappen rekommenderas över wasb. Endast intern datavirtualisering i dedikerade SQL-pooler (där TYPE inte är lika med HADOOP) stöder wasb.

Platssökväg:

  • <container> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.

Ytterligare kommentarer och vägledning när du anger platsen:

  • Standardalternativet är att använda enable secure SSL connections när du etablerar Azure Data Lake Storage Gen2. När detta är aktiverat måste du använda abfss när en säker TLS/SSL-anslutning har valts. Observera att även abfss fungerar för osäkra TLS-anslutningar. Mer information finns i Drivrutinen för Azure Blob Filesystem (ABFS).
  • Azure Synapse verifierar inte att den externa datakällan finns när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Använd samma externa datakälla för alla tabeller när du frågar Hadoop för att säkerställa konsekvent frågesemantik.
  • https: med prefixet kan du använda undermappen i sökvägen. https är inte tillgängligt för alla dataåtkomstmetoder.
  • wasbs rekommenderas eftersom data skickas med en säker TLS-anslutning.
  • Hierarkiska namnområden stöds inte med Azure V2 Storage-konton vid åtkomst till data med det äldre wasb:// gränssnittet, men med stöd wasbs:// för hierarkiska namnområden.

CREDENTIAL = credential_name

Valfritt. Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan. Extern datakälla utan autentiseringsuppgifter kan komma åt offentligt lagringskonto eller använda anroparens Microsoft Entra-identitet för att komma åt filer i Azure Storage.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • Om du vill läsa in data från Azure Storage eller Azure Data Lake Store (ADLS) Gen2 till Azure Synapse Analytics använder du en Azure Storage-nyckel.
  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.

Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

  • I en serverlös SQL-pool kan databasomfattande autentiseringsuppgifter ange arbetsytans hanterade identitet, tjänstens huvudnamn eller sas-token (signatur för delad åtkomst). Åtkomst via en användaridentitet, även kallad Microsoft Entra-genomströmning, är också möjlig i databasomfattande autentiseringsuppgifter, liksom anonym åtkomst till offentligt tillgänglig lagring. Mer information finns i Typer av lagringsauktorisering som stöds.

  • I en dedikerad SQL-pool kan autentiseringsuppgifter med databasomfattning ange sas-token (signatur för delad åtkomst), lagringsåtkomstnyckel, tjänstens huvudnamn, arbetsytans hanterade identitet eller Microsoft Entra-genomströmning.

TYPE = HADOOP

Valfritt, rekommenderas inte.

Du kan bara ange TYP med dedikerade SQL-pooler. HADOOP är det enda tillåtna värdet när det anges. Externa datakällor med TYPE=HADOOP är endast tillgängliga i dedikerade SQL-pooler.

Använd HADOOP för äldre implementeringar, annars rekommenderar vi att du använder den nyare inbyggda dataåtkomsten. Ange inte argumentet TYPE för att använda den nyare inbyggda dataåtkomsten.

Ett exempel på hur du använder TYPE = HADOOP för att läsa in data från Azure Storage finns i Skapa extern datakälla för att referera till Azure Data Lake Store Gen 1 eller 2 med hjälp av ett huvudnamn för tjänsten.

Serverlösa och dedikerade SQL-pooler i Azure Synapse Analytics använder olika kodbaser för datavirtualisering. Serverlösa SQL-pooler stöder en inbyggd datavirtualiseringsteknik. Dedikerade SQL-pooler stöder både intern datavirtualisering och PolyBase-datavirtualisering. PolyBase-datavirtualisering används när DEN EXTERNA DATAKÄLLAN skapas med TYPE=HADOOP.

Behörigheter

Kräver CONTROL behörighet för databasen.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

De flesta externa datakällor stöder proxybaserad autentisering med hjälp av en databasomfattande autentiseringsuppgift för att skapa proxykontot.

SAS-nycklar (Signatur för delad åtkomst) stöds för autentisering till Azure Data Lake Store Gen 2-lagringskonton. Kunder som vill autentisera med hjälp av en signatur för delad åtkomst måste skapa en databasomfattande autentiseringsuppgift där IDENTITY = "Shared Access Signature" och ange en SAS-token som hemlighet.

Om du skapar en databasomfattande autentiseringsuppgift där IDENTITY = "Shared Access Signature" och använder ett lagringsnyckelvärde som hemlighet får du följande felmeddelande:

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

Exempel

A. Skapa en extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

I det här exemplet är den externa datakällan ett Azure Storage-konto V2 med namnet logs. Lagringscontainern heter daily. Den externa Datakällan i Azure Storage är endast avsedd för dataöverföring. Det stöder inte predikat-push-down. Hierarkiska namnområden stöds inte vid åtkomst till data via wasb:// gränssnittet. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).

I det här exemplet används den äldre HADOOP Java-baserade åtkomstmetoden. Följande exempel visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till Azure Storage. Ange Azure Storage-kontonyckeln i databasens hemlighet för autentiseringsuppgifter. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används under autentiseringen till 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. Skapa en extern datakälla för att referera till Azure Data Lake Store Gen 1 eller 2 med hjälp av tjänstens huvudnamn

Azure Data Lake Store-anslutningen kan baseras på din ADLS-URI och microsoft Entra-programmets huvudnamn för tjänsten. Dokumentation för att skapa det här programmet finns i Data lake Store-autentisering med hjälp av 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. Skapa en extern datakälla för att referera till Azure Data Lake Store Gen2 med hjälp av lagringskontonyckeln

-- 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. Skapa en extern datakälla till Azure Data Lake Store Gen2 med hjälp av abfs://

Du behöver inte ange SECRET när du ansluter till Azure Data Lake Store Gen2-kontot med en mekanism för hanterad identitet .

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

--Create database scoped credential with **IDENTITY = 'Managed Service Identity'**
CREATE DATABASE SCOPED CREDENTIAL msi_cred
WITH IDENTITY = 'Managed Service Identity';

--Create external data source with abfss:// scheme for connecting to your Azure Data Lake Store Gen2 account
CREATE EXTERNAL DATA SOURCE ext_datasource_with_abfss
WITH (
    TYPE = HADOOP,
    LOCATION = 'abfss://myfile@mystorageaccount.dfs.core.windows.net',
    CREDENTIAL = msi_cred
);

Nästa steg

* Analys
Plattformssystem (PDW) *
 

 

Översikt: Analysplattformssystem

Gäller för:Analytics Platform System (PDW)

Skapar en extern datakälla för PolyBase-frågor. Externa datakällor används för att upprätta anslutningar och stöder följande användningsfall: Datavirtualisering och datainläsning med PolyBase.

Syntax

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt på servern i Analytics Platform System (PDW).

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix för anslutning Sökväg
Cloudera CDH eller Hortonworks HDP hdfs <Namenode>[:port]
Azure Storage-konto wasb[s] <container>@<storage_account>.blob.core.windows.net

Platssökväg:

  • <Namenode> = datornamn, namn på tjänst-URI eller IP-adress för Namenode i Hadoop-klustret. PolyBase måste matcha alla DNS-namn som används av Hadoop-klustret.
  • port = Porten som den externa datakällan lyssnar på. I Hadoop finns porten med hjälp av konfigurationsparametern fs.defaultFS . Standardvärdet är 8020.
  • <container> = containern för lagringskontot som innehåller data. Rotcontainrar är skrivskyddade, data kan inte skrivas tillbaka till containern.
  • <storage_account> = lagringskontonamnet för Azure-resursen.

Ytterligare kommentarer och vägledning när du anger platsen:

  • PDW-motorn verifierar inte förekomsten av den externa datakällan när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.
  • Använd samma externa datakälla för alla tabeller när du frågar Hadoop för att säkerställa konsekvent frågesemantik.
  • wasbs rekommenderas eftersom data skickas med en säker TLS-anslutning.
  • Hierarkiska namnområden stöds inte när de används med Azure Storage-konton över wasb://.
  • Om du vill säkerställa lyckade PolyBase-frågor under en Hadoop-redundansväxling Namenode bör du överväga att använda en virtuell IP-adress för Namenode Hadoop-klustret. Om du inte gör det kör du kommandot ALTER EXTERNAL DATA SOURCE för att peka på den nya platsen.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • Om du vill läsa in data från Azure Storage till Azure Synapse eller PDW använder du en Azure Storage-nyckel.
  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.

TYPE = [ HADOOP ]

Anger vilken typ av extern datakälla som konfigureras. Den här parametern krävs inte alltid.

  • Använd HADOOP när den externa datakällan är Cloudera CDH, Hortonworks HDP eller Azure Storage.

Ett exempel på hur du använder TYPE = HADOOP för att läsa in data från Azure Storage finns i Skapa extern datakälla för att referera till Hadoop.

RESOURCE_MANAGER_LOCATION = "ResourceManager_URI[:p ort]"

I SQL Server 2019 (15.x) anger du inte RESOURCE_MANAGER_LOCATION om du inte ansluter till Cloudera CDH, Hortonworks HDP, ett Azure Storage-konto.

Konfigurera det här valfria värdet när du ansluter till Cloudera CDH, Hortonworks HDP eller endast ett Azure Storage-konto. En fullständig lista över Hadoop-versioner som stöds finns i PolyBase Connectivity Configuration (Transact-SQL).

När har RESOURCE_MANAGER_LOCATION definierats fattar frågeoptimeraren ett kostnadsbaserat beslut för att förbättra prestandan. Ett MapReduce-jobb kan användas för att push-överföra beräkningen till Hadoop. Att RESOURCE_MANAGER_LOCATION ange kan avsevärt minska mängden data som överförs mellan Hadoop och SQL, vilket kan leda till bättre frågeprestanda.

Om Resource Manager inte har angetts inaktiveras push-överföring av beräkning till Hadoop för PolyBase-frågor. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat ger ett konkret exempel och ytterligare vägledning.

Värdet RESOURCE_MANAGER_LOCATION verifieras inte när du skapar den externa datakällan. Om du anger ett felaktigt värde kan det orsaka frågefel vid körningen när push-down görs eftersom det angivna värdet inte skulle kunna matchas.

För att PolyBase ska fungera korrekt med en extern Hadoop-datakälla måste portarna för följande Hadoop-klusterkomponenter vara öppna:

  • HDFS-portar
    • Namnnod
    • Datanod
  • Resource Manager
    • Lämna in arbete
    • Jobbhistorik

Om porten inte har angetts väljs standardvärdet med den aktuella inställningen för konfiguration av hadoop-anslutning.

Hadoop-anslutning Standardport för Resource Manager
1 50300
2 50300
3 8021
4 8032
5 8050
6 8032
7 8050

I följande tabell visas standardportarna för dessa komponenter. Observera att det finns ett beroende av Hadoop-versionen samt möjligheten till anpassad konfiguration som inte använder standardporttilldelningen.

Hadoop-klusterkomponent Standardport
Namnnod 8020
DataNode (dataöverföring, icke-privilegierad IPC-port) 50010
DataNode (dataöverföring, privilegierad IPC-port) 1019
Resource Manager-jobböverföring (Hortonworks 1.3) 50300
Resource Manager-jobböverföring (Cloudera 4.3) 8021
Resource Manager-jobböverföring (Hortonworks 2.0 i Windows, Cloudera 5.x på Linux) 8032
Resource Manager-jobböverföring (Hortonworks 2.x, 3.0 på Linux, Hortonworks 2.1-3 i Windows) 8050
Resource Manager-jobbhistorik 10020

Behörigheter

Kräver CONTROL behörighet för databasen i Analytics Platform System (PDW).

Anmärkning

I tidigare versioner av PDW skapar du nödvändiga ALTER ANY EXTERNAL DATA SOURCE behörigheter för extern datakälla.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Säkerhet

PolyBase stöder proxybaserad autentisering för de flesta externa datakällor. Skapa en databasomfattande autentiseringsuppgift för att skapa proxykontot.

En SAS-token med typ HADOOP stöds inte. Det stöds bara med typen = BLOB_STORAGE när en åtkomstnyckel för lagringskonto används i stället. Försök att skapa en extern datakälla med typen HADOOP och en SAS-autentiseringsuppgift misslyckas med följande fel:

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

Exempel

A. Skapa en extern datakälla för att referera till Hadoop

Om du vill skapa en extern datakälla som refererar till din Hortonworks HDP eller Cloudera CDH anger du datornamnet eller IP-adressen för Hadoop Namenode och porten.

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

B. Skapa en extern datakälla för att referera till Hadoop med push-down aktiverat

Ange alternativet RESOURCE_MANAGER_LOCATION för att aktivera push-down-beräkning till Hadoop för PolyBase-frågor. När det är aktiverat fattar PolyBase ett kostnadsbaserat beslut för att avgöra om frågeberäkningen ska skickas till Hadoop.

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

C. Skapa en extern datakälla för att referera till Kerberos-skyddad Hadoop

Kontrollera om Hadoop-klustret är Kerberos-skyddat genom att kontrollera värdet hadoop.security.authentication för egenskapen i Hadoop core-site.xml. Om du vill referera till ett Kerberos-skyddat Hadoop-kluster måste du ange en databasomfattande autentiseringsuppgift som innehåller ditt Kerberos-användarnamn och lösenord. Databashuvudnyckeln används för att kryptera databasens omfångsbegränsade hemlighet för autentiseringsuppgifter.

-- 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. Skapa en extern datakälla för att komma åt data i Azure Storage med hjälp av wasb://-gränssnittet

I det här exemplet är den externa datakällan ett Azure V2 Storage-konto med namnet logs. Lagringscontainern heter daily. Den externa Datakällan i Azure Storage är endast avsedd för dataöverföring. Det stöder inte predikat-push-down. Hierarkiska namnområden stöds inte vid åtkomst till data via wasb:// gränssnittet. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet måste autentisering utföras med en lagringskontonyckel, inte med en signatur för delad åtkomst (SAS).

Det här exemplet visar hur du skapar databasens begränsade autentiseringsuppgifter för autentisering till Azure Storage. Ange Azure Storage-kontonyckeln i databasens autentiseringsuppgiftshemlighet. Du kan ange valfri sträng i databasens omfångsbegränsade autentiseringsidentitet eftersom den inte används under autentiseringen till 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
);

Nästa steg

* SQL Managed Instance *  

Översikt: Azure SQL Managed Instance

gäller för:Azure SQL Managed Instance

Skapar en extern datakälla i Azure SQL Managed Instance. Fullständig information finns i Datavirtualisering med Azure SQL Managed Instance.

Datavirtualisering i Azure SQL Managed Instance ger åtkomst till externa data i olika filformat via OPENROWSET T-SQL-syntaxen eller T-SQL-syntaxen CREATE EXTERNAL TABLE .

Syntax

Mer information om syntaxkonventionerna finns i Transact-SQL syntaxkonventioner.

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

Argumentpunkter

data_source_name

Anger det användardefinierade namnet på datakällan. Namnet måste vara unikt i databasen.

LOCATION = '<prefix>://<path[:port]>'

Tillhandahåller anslutningsprotokollet och sökvägen till den externa datakällan.

Extern datakälla Platsprefix Sökväg
Azure Blob Storage-lagringstjänst 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>

Databasmotorn verifierar inte att den externa datakällan finns när objektet skapas. Om du vill verifiera skapar du en extern tabell med hjälp av den externa datakällan.

Lägg inte till parametrarna /avslutande , filnamn eller signatur för delad åtkomst i slutet av LOCATION URL:en när du konfigurerar en extern datakälla för massåtgärder.

CREDENTIAL = credential_name

Anger en databasomfattande autentiseringsuppgift för autentisering till den externa datakällan.

Ytterligare anteckningar och vägledning när du skapar en autentiseringsuppgift:

  • Om du vill läsa in data från Azure Storage till Azure SQL Managed Instance använder du en SIGNATUR för delad åtkomst (SAS-token).
  • CREDENTIAL krävs endast om data har skyddats. CREDENTIAL krävs inte för datauppsättningar som tillåter anonym åtkomst.
  • Om en autentiseringsuppgift krävs måste autentiseringsuppgifterna skapas med eller Managed IdentitySHARED ACCESS SIGNATURE som identitet. Information om hur du skapar en databasomfattande autentiseringsuppgifter finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).

Så här använder du den hanterade tjänstidentiteten för databasens begränsade autentiseringsuppgifter:

  • Specificera WITH IDENTITY = 'Managed Identity'

    • Använd den systemtilldelade hanterade tjänstidentiteten för Azure SQL Managed Instance, som måste aktiveras om den ska användas för detta ändamål.
  • Ge rollen Läsare Azure RBAC till den systemtilldelade hanterade tjänstidentiteten för Azure SQL Managed Instance till nödvändiga Azure Blob Storage-containrar. Via Azure-portalen kan du till exempel läsa Tilldela Azure-roller med hjälp av Azure-portalen.

Så här skapar du en signatur för delad åtkomst (SAS) för databasens begränsade autentiseringsuppgifter:

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

  • Det finns flera sätt att skapa en signatur för delad åtkomst:

  • SAS-token ska konfigureras på följande sätt:

    • När en SAS-token genereras innehåller den ett frågetecken (?) i början av token. Exkludera inledande ? när det konfigureras som HEMLIGHET.
    • Använd en giltig förfalloperiod (alla datum är i UTC-tid).
    • Bevilja minst läsbehörighet för filen som ska läsas in (till exempel srt=o&sp=r). Flera signaturer för delad åtkomst kan skapas för olika användningsfall. Behörigheter bör beviljas på följande sätt:
    Åtgärd Tillåtelse
    Läsa data från en fil Läs
    Läsa data från flera filer och undermappar Läsa och lista upp
    Använda Skapa extern tabell som Select (CETAS) Läsa, skapa och skriva

Behörigheter

Kräver CONTROL behörighet för databasen i Azure SQL Managed Instance.

Låsning

Tar ett delat lås på objektet EXTERNAL DATA SOURCE .

Exempel

Fler exempel finns i Datavirtualisering med Azure SQL Managed Instance.

A. Fråga externa data från Azure SQL Managed Instance med OPENROWSET eller en extern tabell

Fler exempel finns i Skapa extern datakälla eller se Datavirtualisering med Azure SQL Managed Instance.

  1. Skapa databasens huvudnyckel om den inte finns.

    -- Optional: Create MASTER KEY if it doesn't exist in the database:
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>'
    GO
    
  2. Skapa databasens begränsade autentiseringsuppgifter med hjälp av en SAS-token. Du kan också använda en hanterad identitet.

    CREATE DATABASE SCOPED CREDENTIAL MyCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<KEY>' ; --Removing leading '?'
    GO
    
  3. Skapa den externa datakällan med hjälp av autentiseringsuppgifterna.

    --Create external data source pointing to the file path, and referencing database-scoped credential:
    CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
    WITH (
        LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest',
        CREDENTIAL = [MyCredential]
    );
    
  4. Fråga parquet-datafilen i den externa datakällan med hjälp av OPENROWSET T-SQL-syntaxen och förlita sig på schemainferens för att snabbt utforska data utan att känna till schemat.

    --Query data with OPENROWSET, relying on schema inference.
    SELECT TOP 10 *
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.parquet',
        DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'parquet'
    ) AS filerows;
    
  5. Eller fråga data med OPENROWSET WITH-satsen i stället för att förlita sig på schemainferens, vilket kan köra frågor mot körningskostnaden. På en CSV stöds inte schemainferens.

    --Or, query data using the WITH clause on a CSV, where schema inference is not supported
    SELECT TOP 10 id,
        updated,
        confirmed,
        confirmed_change
    FROM OPENROWSET (
        BULK 'bing_covid-19_data.csv', DATA_SOURCE = 'MyExternalDataSource',
        FORMAT = 'CSV',
        FIRSTROW = 2
    ) WITH (
        id INT,
        updated DATE,
        confirmed INT,
        confirmed_change INT
    ) AS filerows;
    
  6. Du kan också skapa ett EXTERNT FILFORMAT och en EXTERN TABELL för att köra frågor mot data som en lokal tabell.

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

Nästa steg