Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2016 (13.x) i nowszych
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Tworzy zewnętrzne źródło danych na potrzeby wykonywania zapytań dotyczących danych zewnętrznych, używanych na potrzeby funkcji technologii PolyBase i wirtualizacji danych.
Ten artykuł zawiera składnię, argumenty, uwagi, uprawnienia i przykłady dla wybranego produktu SQL.
Wybieranie produktu
W poniższym wierszu wybierz nazwę produktu, którą cię interesuje, i zostanie wyświetlona tylko informacja o tym produkcie.
* SQL Server *
Azure Synapse
analizy
Omówienie: SQL Server 2016
Dotyczy: SQL Server 2016 (13.x)
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych i ładowanie danych przy użyciu PolyBase
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję.
Aby wyświetlić funkcje programu SQL Server 2019 (15.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Aby wyświetlić funkcje programu SQL Server 2022 (16.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Transact-SQL konwencje składni
Składnia programu SQL Server 2016
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w programie SQL Server.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Obsługiwane lokalizacje według produktu/usługi | Uwierzytelnianie |
---|---|---|---|---|
Cloudera CDH lub Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) do programu SQL Server 2019 (15.x) | Uwierzytelnianie anonimowe lub podstawowe |
Konto usługi Azure Storage (wersja 2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Począwszy od programu SQL Server 2016 (13.x) Hierarchiczna przestrzeń nazw nie jest obsługiwana |
Klucz konta usługi Azure Storage |
Ścieżka lokalizacji:
-
<Namenode>
= nazwa maszyny, identyfikator URI usługi nazw lub adresNamenode
IP klastra Hadoop. Program PolyBase musi rozpoznać wszystkie nazwy DNS używane przez klaster Hadoop. -
port
= port, na który nasłuchuje zewnętrzne źródło danych. W usłudze Hadoop port można znaleźć przy użyciu parametrufs.defaultFS
konfiguracji. Wartość domyślna to 8020. -
<container>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure. -
<server_name>
= nazwa hosta. -
<instance_name>
= nazwa wystąpienia nazwanego programu SQL Server. Używane, jeśli masz usługę przeglądarki programu SQL Server uruchomioną w wystąpieniu docelowym.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat bazy danych programu SQL Server nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Użyj tego samego zewnętrznego źródła danych dla wszystkich tabel podczas wykonywania zapytań w usłudze Hadoop, aby zapewnić spójność semantyki zapytań.
-
wasbs
jest opcjonalny, ale zalecany w programie SQL Server 2016 (13.x) na potrzeby uzyskiwania dostępu do kont usługi Azure Storage, ponieważ dane będą wysyłane przy użyciu bezpiecznego połączenia TLS/SSL. - Aby zapewnić pomyślne wykonywanie zapytań polyBase podczas przełączania w tryb failover w usłudze Hadoop
Namenode
, rozważ użycie wirtualnego adresu IP klastraNamenode
Hadoop. Jeśli tego nie zrobisz, wykonaj polecenie ALTER EXTERNAL DATA SOURCE , aby wskazać nową lokalizację.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.
CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy.
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP ] *
Określa typ konfigurowanego zewnętrznego źródła danych. W programie SQL Server 2016 ten parametr jest zawsze wymagany i powinien być określony tylko jako HADOOP
. Obsługuje połączenia z usługą Cloudera CDH, Hortonworks HDP lub kontem usługi Azure Storage. Zachowanie tego parametru różni się w nowszych wersjach programu SQL Server.
Przykład użycia TYPE
= HADOOP
do ładowania danych z konta usługi Azure Storage można znaleźć w temacie Create external data source to access data in Azure Storage using the wasb:// interface (Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://)
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]"
Skonfiguruj tę opcjonalną wartość podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP lub tylko kontem usługi Azure Storage. Aby uzyskać pełną listę obsługiwanych wersji usługi Hadoop, zobacz Konfiguracja łączności programu PolyBase.
Po zdefiniowaniu RESOURCE_MANAGER_LOCATION
elementu optymalizator zapytań podejmuje decyzję opartą na kosztach w celu poprawy wydajności. Zadanie MapReduce może służyć do wypychania obliczeń do usługi Hadoop. Określenie RESOURCE_MANAGER_LOCATION
elementu może znacznie zmniejszyć ilość danych przesyłanych między usługą Hadoop i programem SQL Server, co może prowadzić do zwiększenia wydajności zapytań.
Jeśli usługa Resource Manager nie jest określona, wypychanie zasobów obliczeniowych do usługi Hadoop jest wyłączone dla zapytań polyBase. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop z włączonym wypycheniem zawiera konkretny przykład i dalsze wskazówki.
Wartość RESOURCE_MANAGER_LOCATION nie jest weryfikowana podczas tworzenia zewnętrznego źródła danych. Wprowadzenie nieprawidłowej wartości może spowodować niepowodzenie zapytania w czasie wykonywania, gdy próba wypchnięcia w dół zostanie podjęta, ponieważ podana wartość nie będzie mogła rozwiązać problemu.
Aby program PolyBase działał poprawnie z zewnętrznym źródłem danych usługi Hadoop, porty dla następujących składników klastra Hadoop muszą być otwarte:
- Porty systemu plików HDFS
- Węzeł nazw
- Węzeł danych
- Resource Manager
- Przesyłanie zadania
- Historia zadania
Jeśli port nie zostanie określony, wartość domyślna zostanie wybrana przy użyciu bieżącego ustawienia dla konfiguracji "łączność hadoop".
Łączność z usługą Hadoop | Domyślny port usługi Resource Manager |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
W poniższej tabeli przedstawiono domyślne porty dla tych składników. Istnieje zależność wersji usługi Hadoop, a także możliwość konfiguracji niestandardowej, która nie używa domyślnego przypisania portu.
Składnik klastra Hadoop | Port domyślny |
---|---|
Węzeł nazw | 8020 |
DataNode (transfer danych, port IPC bez uprawnień) | 50010 |
DataNode (transfer danych, uprzywilejowany port IPC) | 1019 |
Przesyłanie zadania usługi Resource Manager (Hortonworks 1.3) | 50300 |
Przesyłanie zadań usługi Resource Manager (Cloudera 4.3) | 8021 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.0 w systemie Windows, Cloudera 5.x w systemie Linux) | 8032 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.x, 3.0 w systemie Linux, Hortonworks 2.1-3 w systemie Windows) | 8050 |
Historia zadań usługi Resource Manager | 10020 |
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w programie SQL Server.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Przykłady
Ważne
Aby uzyskać informacje na temat sposobu instalowania i włączania technologii PolyBase, zobacz Instalowanie programu PolyBase w systemie Windows
Odp. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop
Aby utworzyć zewnętrzne źródło danych, aby odwoływać się do klastra Hortonworks HDP lub Cloudera CDH Hadoop, określ nazwę maszyny lub adres IP platformy Hadoop Namenode
i portu.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Tworzenie zewnętrznego źródła danych w celu odwołowania się do usługi Hadoop z włączoną funkcją wypychania
Określ opcję włączenia RESOURCE_MANAGER_LOCATION
obliczeń wypychanych do usługi Hadoop dla zapytań PolyBase. Po włączeniu technologii PolyBase podejmuje decyzję opartą na kosztach, aby określić, czy obliczenia zapytań powinny być wypychane do usługi 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do zabezpieczonej przez protokół Kerberos platformy Hadoop
Aby sprawdzić, czy klaster Hadoop jest zabezpieczony za pomocą protokołu Kerberos, sprawdź wartość hadoop.security.authentication
właściwości w usłudze Hadoop core-site.xml. Aby odwołać się do klastra Hadoop zabezpieczonego przy użyciu protokołu Kerberos, należy określić poświadczenie o zakresie bazy danych zawierające nazwę użytkownika i hasło protokołu Kerberos. Klucz główny bazy danych służy do szyfrowania klucza tajnego poświadczeń o określonym zakresie bazy danych.
-- 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. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://
W tym przykładzie zewnętrzne źródło danych to konto usługi Azure V2 Storage o nazwie logs
. Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Storage służy tylko do transferu danych. Nie obsługuje predykatu push-down. Hierarchiczne przestrzenie nazw nie są obsługiwane podczas uzyskiwania dostępu do danych za pośrednictwem interfejsu wasb://
.
W tym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania na koncie usługi Azure V2 Storage. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze Azure Storage. Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasb
uwierzytelnianie musi odbywać się przy użyciu wasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS).
W programie SQL Server 2016 (13.x) TYPE
należy ustawić HADOOP
wartość nawet w przypadku uzyskiwania dostępu do usługi 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
);
Treści powiązane
Omówienie: SQL Server 2017
Dotyczy: SQL Server 2017 (14.x)
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych i ładowanie danych przy użyciu technologii PolyBase w programie SQL Server
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server w systemie Linux. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję.
Aby wyświetlić funkcje programu SQL Server 2019 (15.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Aby wyświetlić funkcje programu SQL Server 2022 (16.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję.
Aby wyświetlić funkcje programu SQL Server 2019 (15.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Aby wyświetlić funkcje programu SQL Server 2022 (16.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Transact-SQL konwencje składni
Składnia programu SQL Server 2017
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w programie SQL Server.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Obsługiwane lokalizacje według produktu/usługi | Uwierzytelnianie |
---|---|---|---|---|
Cloudera CDH lub Hortonworks HDP | hdfs |
<Namenode>[:port] |
Tylko program SQL Server 2016 (13.x) do programu SQL Server 2019 (tylko 15.x) | Uwierzytelnianie anonimowe lub podstawowe |
Konto usługi Azure Storage (wersja 2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Począwszy od programu SQL Server 2016 (13.x) Hierarchiczna przestrzeń nazw nie jest obsługiwana |
Klucz konta usługi Azure Storage |
Operacje zbiorcze | https |
<storage_account>.blob.core.windows.net/<container> |
Począwszy od programu SQL Server 2017 (14.x) | Sygnatura dostępu współdzielonego (SAS) |
Ścieżka lokalizacji:
-
<
Namenode>
= nazwa maszyny, identyfikator URI usługi nazw lub adresNamenode
IP klastra Hadoop. Program PolyBase musi rozpoznać wszystkie nazwy DNS używane przez klaster Hadoop. -
port
= port, na który nasłuchuje zewnętrzne źródło danych. W usłudze Hadoop port można znaleźć przy użyciu parametrufs.defaultFS
konfiguracji. Wartość domyślna to 8020. -
<container>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure. -
<server_name>
= nazwa hosta. -
<instance_name>
= nazwa wystąpienia nazwanego programu SQL Server. Używane, jeśli masz usługę przeglądarki programu SQL Server uruchomioną w wystąpieniu docelowym.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat bazy danych programu SQL Server nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Użyj tego samego zewnętrznego źródła danych dla wszystkich tabel podczas wykonywania zapytań w usłudze Hadoop, aby zapewnić spójność semantyki zapytań.
- Określ parametr podczas nawiązywania
Driver={<Name of Driver>}
połączenia za pomocą poleceniaODBC
. -
wasbs
jest opcjonalne, ale zalecane w programie SQL Server 2017 (14.x) na potrzeby uzyskiwania dostępu do kont usługi Azure Storage, ponieważ dane będą wysyłane przy użyciu bezpiecznego połączenia TLS/SSL. - Aby zapewnić pomyślne wykonywanie zapytań polyBase podczas przełączania w tryb failover w usłudze Hadoop
Namenode
, rozważ użycie wirtualnego adresu IP klastraNamenode
Hadoop. Jeśli tego nie zrobisz, wykonaj polecenie ALTER EXTERNAL DATA SOURCE , aby wskazać nową lokalizację.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy. - Po utworzeniu
TYPE
=BLOB_STORAGE
poświadczenia należy użyćSHARED ACCESS SIGNATURE
jako tożsamości. -
TYPE
=BLOB_STORAGE
jest dozwolone tylko w przypadku operacji zbiorczych; nie można utworzyć tabel zewnętrznych dla zewnętrznego źródła danych za pomocą poleceniaTYPE
=BLOB_STORAGE
. - Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub
wasb
uwierzytelnianie musi odbywać się przy użyciuwasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS). - Po
TYPE
=HADOOP
utworzeniu poświadczenia należy użyć klucza konta magazynu jako .SECRET
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
Token SAS można utworzyć, przechodząc do witryny Azure Portal -><Your_Storage_Account> —> Sygnatura dostępu współdzielonego — Konfigurowanie uprawnień —>> Generowanie sygnatury dostępu współdzielonego i parametrów połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
podczas konfigurowania jako KLUCZ TAJNY. - Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień
Aby zapoznać się z przykładem użycia elementu z elementem CREDENTIAL
SHARED ACCESS SIGNATURE
iTYPE
= BLOB_STORAGE
, zobacz Tworzenie zewnętrznego źródła danych w celu wykonywania operacji zbiorczych i pobierania danych z usługi Azure Storage do usługi SQL Database
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Określa typ konfigurowanego zewnętrznego źródła danych. Ten parametr nie jest zawsze wymagany i powinien być określony tylko podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP, kontem usługi Azure Storage lub usługą Azure Data Lake Storage Gen2.
- Użyj
HADOOP
, gdy zewnętrzne źródło danych to Cloudera CDH, Hortonworks HDP, konto usługi Azure Storage lub usługa Azure Data Lake Storage Gen2. - Użyj
BLOB_STORAGE
funkcji podczas wykonywania operacji zbiorczych z konta usługi Azure Storage przy użyciu funkcji BULK INSERT lub OPENROWSET. Wprowadzenie do programu SQL Server 2017 (14.x). UżyjHADOOP
polecenia w przypadku, gdy zamierzasz używaćCREATE EXTERNAL TABLE
usługi Azure Storage.
Uwaga / Notatka
TYPE
powinna być ustawiona na HADOOP
wartość nawet w przypadku uzyskiwania dostępu do usługi Azure Storage.
Przykład użycia TYPE
= HADOOP
do ładowania danych z konta usługi Azure Storage można znaleźć w temacie Create external data source to access data in Azure Storage using the wasb:// interface (Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://)
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]"
Skonfiguruj tę opcjonalną wartość podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP lub tylko kontem usługi Azure Storage. Aby uzyskać pełną listę obsługiwanych wersji usługi Hadoop, zobacz Konfiguracja łączności programu PolyBase (Transact-SQL).
Po zdefiniowaniu RESOURCE_MANAGER_LOCATION
elementu optymalizator zapytań podejmie decyzję opartą na kosztach w celu zwiększenia wydajności. Zadanie MapReduce może służyć do wypychania obliczeń do usługi Hadoop. Określenie RESOURCE_MANAGER_LOCATION
elementu może znacznie zmniejszyć ilość danych przesyłanych między usługą Hadoop i programem SQL Server, co może prowadzić do zwiększenia wydajności zapytań.
Jeśli usługa Resource Manager nie jest określona, wypychanie zasobów obliczeniowych do usługi Hadoop jest wyłączone dla zapytań polyBase. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop z włączonym wypycheniem zawiera konkretny przykład i dalsze wskazówki.
Wartość RESOURCE_MANAGER_LOCATION
nie jest weryfikowana podczas tworzenia zewnętrznego źródła danych. Wprowadzenie nieprawidłowej wartości może spowodować niepowodzenie zapytania w czasie wykonywania, gdy próba wypchnięcia w dół zostanie podjęta, ponieważ podana wartość nie będzie mogła rozwiązać problemu.
Aby program PolyBase działał poprawnie z zewnętrznym źródłem danych usługi Hadoop, porty dla następujących składników klastra Hadoop muszą być otwarte:
- Porty systemu plików HDFS
- Węzeł nazw
- Węzeł danych
- Resource Manager
- Przesyłanie zadania
- Historia zadania
Jeśli port nie zostanie określony, wartość domyślna zostanie wybrana przy użyciu bieżącego ustawienia dla konfiguracji "łączność hadoop".
Łączność z usługą Hadoop | Domyślny port usługi Resource Manager |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
W poniższej tabeli przedstawiono domyślne porty dla tych składników. Istnieje zależność wersji usługi Hadoop, a także możliwość konfiguracji niestandardowej, która nie używa domyślnego przypisania portu.
Składnik klastra Hadoop | Port domyślny |
---|---|
Węzeł nazw | 8020 |
DataNode (transfer danych, port IPC bez uprawnień) | 50010 |
DataNode (transfer danych, uprzywilejowany port IPC) | 1019 |
Przesyłanie zadania usługi Resource Manager (Hortonworks 1.3) | 50300 |
Przesyłanie zadań usługi Resource Manager (Cloudera 4.3) | 8021 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.0 w systemie Windows, Cloudera 5.x w systemie Linux) | 8032 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.x, 3.0 w systemie Linux, Hortonworks 2.1-3 w systemie Windows) | 8050 |
Historia zadań usługi Resource Manager | 10020 |
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w programie SQL Server.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Token SAS z typem HADOOP
nie jest obsługiwany. Jest obsługiwana tylko z typem = BLOB_STORAGE
w przypadku użycia klucza dostępu do konta magazynu. Próba utworzenia zewnętrznego źródła danych z typem HADOOP
i poświadczenie sygnatury dostępu współdzielonego kończy się niepowodzeniem z powodu następującego błędu:
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.'
Przykłady
Ważne
Aby uzyskać informacje na temat sposobu instalowania i włączania technologii PolyBase, zobacz Instalowanie programu PolyBase w systemie Windows
Odp. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop
Aby utworzyć zewnętrzne źródło danych, aby odwoływać się do klastra Hortonworks HDP lub Cloudera CDH Hadoop, określ nazwę maszyny lub adres IP platformy Hadoop Namenode
i portu.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Tworzenie zewnętrznego źródła danych w celu odwołowania się do usługi Hadoop z włączoną funkcją wypychania
Określ opcję włączenia RESOURCE_MANAGER_LOCATION
obliczeń wypychanych do usługi Hadoop dla zapytań PolyBase. Po włączeniu technologii PolyBase podejmuje decyzję opartą na kosztach, aby określić, czy obliczenia zapytań powinny być wypychane do usługi 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do zabezpieczonej przez protokół Kerberos platformy Hadoop
Aby sprawdzić, czy klaster Hadoop jest zabezpieczony za pomocą protokołu Kerberos, sprawdź wartość hadoop.security.authentication
właściwości w usłudze Hadoop core-site.xml. Aby odwołać się do klastra Hadoop zabezpieczonego przy użyciu protokołu Kerberos, należy określić poświadczenie o zakresie bazy danych zawierające nazwę użytkownika i hasło protokołu Kerberos. Klucz główny bazy danych służy do szyfrowania klucza tajnego poświadczeń o określonym zakresie bazy danych.
-- 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. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://
W tym przykładzie zewnętrzne źródło danych to konto usługi Azure V2 Storage o nazwie logs
. Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Storage służy tylko do transferu danych. Nie obsługuje predykatu push-down. Hierarchiczne przestrzenie nazw nie są obsługiwane podczas uzyskiwania dostępu do danych za pośrednictwem interfejsu wasb://
. Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasb
uwierzytelnianie musi odbywać się przy użyciu wasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS).
W tym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania na koncie usługi Azure V2 Storage. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze 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
);
Przykłady: operacje zbiorcze
Ważne
Nie należy dodawać końcowych /parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
E. Tworzenie zewnętrznego źródła danych na potrzeby operacji zbiorczych pobierania danych z usługi Azure Storage
Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.
Użyj następującego źródła danych na potrzeby operacji zbiorczych przy użyciu operacji BULK INSERT lub OPENROWSET. Poświadczenie musi być ustawione SHARED ACCESS SIGNATURE
jako tożsamość, nie może mieć wiodącego w ?
tokenie SYGNATURy dostępu współdzielonego, musi mieć co najmniej uprawnienie do odczytu w pliku, które należy załadować (na przykład srt=o&sp=r
), a okres wygaśnięcia powinien być prawidłowy (wszystkie daty są w czasie UTC). Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Używanie sygnatur dostępu współdzielonego (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
);
Aby zobaczyć, jak używać tego przykładu, zobacz WSTAWIANIE ZBIORCZE.
Treści powiązane
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- UTWÓRZ TABELĘ ZEWNĘTRZNĄ (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Używanie sygnatur dostępu współdzielonego (SAS)
- Konfiguracja łączności programu PolyBase (Transact-SQL)
Omówienie: SQL Server 2019
Dotyczy: SQL Server 2019 (15.x)
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych i ładowanie danych przy użyciu technologii PolyBase w programie SQL Server
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję.
Aby wyświetlić funkcje programu SQL Server 2022 (16.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję.
Aby wyświetlić funkcje programu SQL Server 2022 (16.x), odwiedź stronę CREATE EXTERNAL DATA SOURCE (TWORZENIE ZEWNĘTRZNEGO ŹRÓDŁA DANYCH).
Transact-SQL konwencje składni
Składnia dla programu SQL Server 2019
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
[ [ , ] TYPE = { HADOOP | BLOB_STORAGE } ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' ]
)
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w programie SQL Server.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Obsługiwane lokalizacje według produktu/usługi | Uwierzytelnianie |
---|---|---|---|---|
Cloudera CDH lub Hortonworks HDP | hdfs |
<Namenode>[:port] |
SQL Server 2016 (13.x) do programu SQL Server 2019 (15.x) | Uwierzytelnianie anonimowe lub podstawowe |
Konto usługi Azure Storage (wersja 2) | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Począwszy od programu SQL Server 2016 (13.x) Hierarchiczna przestrzeń nazw nie jest obsługiwana |
Klucz konta usługi Azure Storage |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie SQL |
Wyrocznia | oracle |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Teradata | teradata |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
MongoDB lub Interfejs API usługi Cosmos DB dla bazy danych MongoDB | mongodb |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Ogólne ODBC | odbc |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) — tylko system Windows | Tylko uwierzytelnianie podstawowe |
Operacje zbiorcze | https |
<storage_account>.blob.core.windows.net/<container> |
Począwszy od programu SQL Server 2017 (14.x) | Sygnatura dostępu współdzielonego (SAS) |
Azure Data Lake Storage Gen2 | abfs[s] |
abfss://<container>@<storage _account>.dfs.core.windows.net |
Począwszy od programu SQL Server 2019 (15.x) CU11+. | Klucz dostępu do magazynu |
Pula danych klastrów danych big data programu SQL Server | sqldatapool |
sqldatapool://controller-svc/default |
Obsługiwane tylko w klastrach danych big data programu SQL Server 2019 | Tylko uwierzytelnianie podstawowe |
Pula magazynów klastrów danych big data programu SQL Server | sqlhdfs |
sqlhdfs://controller-svc/default |
Obsługiwane tylko w klastrach danych big data programu SQL Server 2019 | Tylko uwierzytelnianie podstawowe |
Ścieżka lokalizacji:
-
<Namenode>
= nazwa maszyny, identyfikator URI usługi nazw lub adresNamenode
IP klastra Hadoop. Program PolyBase musi rozpoznać wszystkie nazwy DNS używane przez klaster Hadoop. -
port
= port, na który nasłuchuje zewnętrzne źródło danych. W usłudze Hadoop port można znaleźć przy użyciu parametrufs.defaultFS
konfiguracji. Wartość domyślna to 8020. -
<container>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure. -
<server_name>
= nazwa hosta. -
<instance_name>
= nazwa wystąpienia nazwanego programu SQL Server. Używane, jeśli masz usługę przeglądarki programu SQL Server uruchomioną w wystąpieniu docelowym.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat bazy danych programu SQL Server nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Użyj tego samego zewnętrznego źródła danych dla wszystkich tabel podczas wykonywania zapytań w usłudze Hadoop, aby zapewnić spójność semantyki zapytań.
- Łącznik służy
sqlserver
do łączenia programu SQL Server 2019 (15.x) z innym programem SQL Server lub z usługą Azure SQL Database. - Określ parametr podczas nawiązywania
Driver={<Name of Driver>}
połączenia za pomocą poleceniaODBC
. - Używanie
wasbs
lubabfss
jest opcjonalne, ale zalecane w programie SQL Server 2019 (15.x) na potrzeby uzyskiwania dostępu do kont usługi Azure Storage, ponieważ dane będą wysyłane przy użyciu bezpiecznego połączenia TLS/SSL. - Interfejsy
abfs
API lubabfss
są obsługiwane podczas uzyskiwania dostępu do kont usługi Azure Storage, począwszy od programu SQL Server 2019 (15.x) CU11. Aby uzyskać więcej informacji, zobacz Sterownik systemu plików obiektów blob platformy Azure (ABFS). - Opcja Hierarchiczna przestrzeń nazw dla kont usługi Azure Storage (wersja 2) jest
abfs[s]
obsługiwana za pośrednictwem usługi Azure Data Lake Storage Gen2, począwszy od programu SQL Server 2019 (15.x) CU11+. Opcja Hierarchiczna przestrzeń nazw nie jest obsługiwana i ta opcja powinna pozostać wyłączona. - Aby zapewnić pomyślne wykonywanie zapytań polyBase podczas przełączania w tryb failover w usłudze Hadoop
Namenode
, rozważ użycie wirtualnego adresu IP klastraNamenode
Hadoop. Jeśli tego nie zrobisz, wykonaj polecenie ALTER EXTERNAL DATA SOURCE , aby wskazać nową lokalizację. - Typy
sqlhdfs
isqldatapool
są obsługiwane do nawiązywania połączenia między wystąpieniem głównym i pulą magazynów klastra danych big data. W przypadku usługi Cloudera CDH lub Hortonworks HDP użyj poleceniahdfs
. Aby uzyskać więcej informacji na temat używaniasqlhdfs
do wykonywania zapytań dotyczących pul magazynów klastrów danych big data programu SQL Server, zobacz Query HDFS in SQL Server 2019 Big Data Cluster (Wykonywanie zapytań o system plików HDFS w klastrze danych big data programu SQL Server 2019). - Obsługa programu SQL Server dla zewnętrznych źródeł danych HDFS Cloudera (CDP) i Hortonworks (HDP) została wycofana i nie jest uwzględniana w programie SQL Server 2022 (16.x) i nowszych wersjach. Aby uzyskać więcej informacji, zobacz opcje Big Data na platformie Microsoft SQL Server.
CONNECTION_OPTIONS = key_value_pair
Określony dla programu SQL Server 2019 (15.x) i nowszych wersji. Określa dodatkowe opcje podczas nawiązywania ODBC
połączenia z zewnętrznym źródłem danych. Aby użyć wielu opcji połączenia, oddziel je średnikami.
Dotyczy połączeń ogólnych ODBC
, a także wbudowanych ODBC
łączników dla programu SQL Server, Oracle, Teradata, MongoDB i interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.
Jest key_value_pair
to słowo kluczowe i wartość dla określonej opcji połączenia. Dostępne słowa kluczowe i wartości zależą od typu zewnętrznego źródła danych. Nazwa sterownika jest wymagana co najmniej, ale istnieją inne opcje, takie jak APP='<your_application_name>'
lub ApplicationIntent= ReadOnly|ReadWrite
, które są również przydatne do ustawienia i mogą pomóc w rozwiązywaniu problemów.
Możliwe pary wartości klucza są specyficzne dla dostawcy zewnętrznego źródła danych. Aby uzyskać więcej informacji na temat każdego dostawcy, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Począwszy od programu SQL Server 2019 (15.x) Aktualizacja zbiorcza 19, wprowadzono dodatkowe słowa kluczowe do obsługi plików Oracle TNS:
- Słowo kluczowe
TNSNamesFile
określa ścieżkę pliku do pliku znajdującegotnsnames.ora
się na serwerze Oracle. - Słowo kluczowe
ServerName
określa alias używany w obiekcietnsnames.ora
, który będzie używany do zastępowania nazwy hosta i portu.
Pushdown = WŁĄCZONE | OD
Określony tylko dla programu SQL Server 2019 (15.x). Określa, czy obliczenia można wypchnąć do zewnętrznego źródła danych. Jest on domyślnie włączony .
PUSHDOWN
Program jest obsługiwany podczas nawiązywania połączenia z programem SQL Server, Oracle, Teradata, MongoDB, interfejsem API usługi Azure Cosmos DB dla bazy danych MongoDB lub odBC na poziomie zewnętrznego źródła danych.
Włączenie lub wyłączenie wypychania na poziomie zapytania jest osiągane za pomocą wskazówki EXTERNALPUSHDOWN.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy. - Po utworzeniu
TYPE
=BLOB_STORAGE
poświadczenia należy użyćSHARED ACCESS SIGNATURE
jako tożsamości. -
TYPE
=BLOB_STORAGE
jest dozwolone tylko w przypadku operacji zbiorczych; nie można utworzyć tabel zewnętrznych dla zewnętrznego źródła danych za pomocą poleceniaTYPE
=BLOB_STORAGE
.
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
Token SAS można utworzyć, przechodząc do witryny Azure Portal -><Your_Storage_Account> —> Sygnatura dostępu współdzielonego — Konfigurowanie uprawnień —>> Generowanie sygnatury dostępu współdzielonego i parametrów połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
podczas konfigurowania jako KLUCZ TAJNY. - Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień
Aby zapoznać się z przykładem użycia elementu z elementem CREDENTIAL
SHARED ACCESS SIGNATURE
iTYPE
= BLOB_STORAGE
, zobacz Tworzenie zewnętrznego źródła danych w celu wykonywania operacji zbiorczych i pobierania danych z usługi Azure Storage do usługi SQL Database
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ HADOOP | BLOB_STORAGE ] *
Określa typ konfigurowanego zewnętrznego źródła danych. Ten parametr nie jest zawsze wymagany i powinien być określony tylko podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP, kontem usługi Azure Storage lub usługą Azure Data Lake Storage Gen2.
- W programie SQL Server 2019 (15.x) nie należy określać typu, chyba że nawiąż połączenie z usługą Cloudera CDH, Hortonworks HDP, kontem usługi Azure Storage.
- Użyj
HADOOP
, gdy zewnętrzne źródło danych to Cloudera CDH, Hortonworks HDP, konto usługi Azure Storage lub usługa Azure Data Lake Storage Gen2. - Użyj
BLOB_STORAGE
funkcji podczas wykonywania operacji zbiorczych z konta usługi Azure Storage przy użyciu funkcji BULK INSERT lub OPENROWSET z programem SQL Server 2017 (14.x). UżyjHADOOP
polecenia podczas tworzenia tabeli zewnętrznej względem usługi Azure Storage. - Obsługa programu SQL Server dla zewnętrznych źródeł danych HDFS Cloudera (CDP) i Hortonworks (HDP) została wycofana i nie jest uwzględniana w programie SQL Server 2022 (16.x) i nowszych wersjach. Aby uzyskać więcej informacji, zobacz opcje Big Data na platformie Microsoft SQL Server.
Przykład użycia do TYPE
= HADOOP
ładowania danych z konta usługi Azure Storage można znaleźć w temacie Create external data source to access data in Azure Storage using the wasb:// interface (Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://).
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]"
W programie SQL Server 2019 (15.x) nie należy określać RESOURCE_MANAGER_LOCATION, chyba że nawiąż połączenie z usługą Cloudera CDH, Hortonworks HDP, kontem usługi Azure Storage.
Skonfiguruj tę opcjonalną wartość podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP lub tylko kontem usługi Azure Storage. Aby uzyskać pełną listę obsługiwanych wersji usługi Hadoop, zobacz Konfiguracja łączności programu PolyBase.
Po zdefiniowaniu RESOURCE_MANAGER_LOCATION
elementu optymalizator zapytań podejmuje decyzję opartą na kosztach w celu poprawy wydajności. Zadanie MapReduce może służyć do wypychania obliczeń do usługi Hadoop. Określenie RESOURCE_MANAGER_LOCATION
elementu może znacznie zmniejszyć ilość danych przesyłanych między usługą Hadoop i programem SQL Server, co może prowadzić do zwiększenia wydajności zapytań.
Jeśli usługa Resource Manager nie jest określona, wypychanie zasobów obliczeniowych do usługi Hadoop jest wyłączone dla zapytań polyBase. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop z włączonym wypycheniem zawiera konkretny przykład i dalsze wskazówki.
Wartość RESOURCE_MANAGER_LOCATION nie jest weryfikowana podczas tworzenia zewnętrznego źródła danych. Wprowadzenie nieprawidłowej wartości może spowodować niepowodzenie zapytania w czasie wykonywania, gdy próba wypchnięcia w dół zostanie podjęta, ponieważ podana wartość nie będzie mogła rozwiązać problemu.
Aby program PolyBase działał poprawnie z zewnętrznym źródłem danych usługi Hadoop, porty dla następujących składników klastra Hadoop muszą być otwarte:
- Porty systemu plików HDFS
- Węzeł nazw
- Węzeł danych
- Resource Manager
- Przesyłanie zadania
- Historia zadania
Jeśli port nie zostanie określony, wartość domyślna zostanie wybrana przy użyciu bieżącego ustawienia dla konfiguracji "łączność hadoop".
Łączność z usługą Hadoop | Domyślny port usługi Resource Manager |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
8 |
8032 |
W poniższej tabeli przedstawiono domyślne porty dla tych składników. Istnieje zależność wersji usługi Hadoop, a także możliwość konfiguracji niestandardowej, która nie używa domyślnego przypisania portu.
Składnik klastra Hadoop | Port domyślny |
---|---|
Węzeł nazw | 8020 |
DataNode (transfer danych, port IPC bez uprawnień) | 50010 |
DataNode (transfer danych, uprzywilejowany port IPC) | 1019 |
Przesyłanie zadania usługi Resource Manager (Hortonworks 1.3) | 50300 |
Przesyłanie zadań usługi Resource Manager (Cloudera 4.3) | 8021 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.0 w systemie Windows, Cloudera 5.x w systemie Linux) | 8032 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.x, 3.0 w systemie Linux, Hortonworks 2.1-3 w systemie Windows) | 8050 |
Historia zadań usługi Resource Manager | 10020 |
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w programie SQL Server.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Po nawiązaniu połączenia z magazynem lub pulą danych w klastrze danych big data programu SQL Server 2019 poświadczenia użytkownika są przekazywane do systemu zaplecza. Utwórz identyfikatory logowania w samej puli danych, aby włączyć uwierzytelnianie przekazywane.
Token SAS z typem HADOOP
nie jest obsługiwany. Jest obsługiwana tylko z typem = BLOB_STORAGE
w przypadku użycia klucza dostępu do konta magazynu. Próba utworzenia zewnętrznego źródła danych z typem HADOOP
i poświadczenie sygnatury dostępu współdzielonego kończy się niepowodzeniem z powodu następującego błędu:
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.'
Przykłady
Ważne
Aby uzyskać informacje na temat sposobu instalowania i włączania technologii PolyBase, zobacz Instalowanie programu PolyBase w systemie Windows
Odp. Tworzenie zewnętrznego źródła danych w programie SQL Server 2019 w celu odwołania się do programu Oracle
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do bazy danych Oracle, upewnij się, że masz poświadczenie o zakresie bazy danych. Opcjonalnie możesz również włączyć lub wyłączyć wypychanie obliczeń względem tego źródła danych.
-- 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
);
Opcjonalnie zewnętrzne źródło danych oracle może używać uwierzytelniania serwera proxy w celu zapewnienia szczegółowej kontroli dostępu. Użytkownik proxy można skonfigurować tak, aby miał ograniczony dostęp w porównaniu z użytkownikiem personifikowanym.
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]
);
Alternatywnie można użyć uwierzytelniania TNS.
Począwszy od programu SQL Server 2019 (15.x) Aktualizacja zbiorcza 19, CREATE EXTERNAL DATA SOURCE
teraz obsługuje korzystanie z plików TNS podczas nawiązywania połączenia z bazą danych Oracle.
Parametr CONNECTION_OPTIONS
został rozszerzony, a teraz używa TNSNamesFile
parametru ServerName
i tnsnames.ora
jako zmiennych do przeglądania pliku i nawiązywania połączenia z serwerem.
W poniższym przykładzie podczas wykonywania program SQL Server wyszuka lokalizację pliku określoną przez tnsnames.ora
program i wyszuka TNSNamesFile
hosta i port sieciowy określony przez ServerName
program .
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'
);
Aby uzyskać dodatkowe przykłady dla innych źródeł danych, takich jak MongoDB, zobacz Configure PolyBase to access external data in MongoDB (Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w bazie danych MongoDB).
B. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop
Aby utworzyć zewnętrzne źródło danych, aby odwoływać się do klastra Hortonworks HDP lub Cloudera CDH Hadoop, określ nazwę maszyny lub adres IP platformy Hadoop Namenode
i portu.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
C. Tworzenie zewnętrznego źródła danych w celu odwołowania się do usługi Hadoop z włączoną funkcją wypychania
Określ opcję włączenia RESOURCE_MANAGER_LOCATION
obliczeń wypychanych do usługi Hadoop dla zapytań PolyBase. Po włączeniu technologii PolyBase podejmuje decyzję opartą na kosztach, aby określić, czy obliczenia zapytań powinny być wypychane do usługi 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do zabezpieczonej przez protokół Kerberos platformy Hadoop
Aby sprawdzić, czy klaster Hadoop jest zabezpieczony za pomocą protokołu Kerberos, sprawdź wartość hadoop.security.authentication
właściwości w usłudze Hadoop core-site.xml. Aby odwołać się do klastra Hadoop zabezpieczonego przy użyciu protokołu Kerberos, należy określić poświadczenie o zakresie bazy danych zawierające nazwę użytkownika i hasło protokołu Kerberos. Klucz główny bazy danych służy do szyfrowania klucza tajnego poświadczeń o określonym zakresie bazy danych.
-- 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. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://
W tym przykładzie zewnętrzne źródło danych to konto usługi Azure V2 Storage o nazwie logs
. Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Storage służy tylko do transferu danych. Nie obsługuje predykatu push-down. Hierarchiczne przestrzenie nazw nie są obsługiwane podczas uzyskiwania dostępu do danych za pośrednictwem interfejsu wasb://
. Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasb
uwierzytelnianie musi odbywać się przy użyciu wasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS).
W tym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania na koncie usługi Azure V2 Storage. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do wystąpienia nazwanego programu SQL Server za pośrednictwem łączności programu PolyBase
Dotyczy: SQL Server 2019 (15.x) i nowszych wersji
Aby utworzyć zewnętrzne źródło danych odwołujące się do nazwanego wystąpienia programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić nazwę wystąpienia.
W poniższym przykładzie WINSQL2019
jest nazwą hosta i SQL2019
nazwą wystąpienia.
'Server=%s\SQL2019'
jest parą klucz-wartość.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternatywnie możesz użyć portu, aby nawiązać połączenie z domyślnym wystąpieniem programu SQL Server.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
G. Tworzenie zewnętrznego źródła danych w celu odwołowania się do pomocniczej repliki zawsze włączonej grupy dostępności
Dotyczy: SQL Server 2019 (15.x) i nowszych wersji
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do czytelnej repliki pomocniczej programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić element ApplicationIntent=ReadOnly
. Ponadto należy ustawić bazę danych dostępności jako Database={dbname}
w CONNECTION_OPTIONS
pliku lub ustawić bazę danych dostępności jako domyślną bazę danych logowania używaną dla poświadczeń o zakresie bazy danych. Należy to zrobić we wszystkich replikach dostępności grupy dostępności.
Najpierw utwórz poświadczenie o zakresie bazy danych, przechowując poświadczenia dla uwierzytelnionego logowania SQL. Łącznik SQL ODBC dla technologii PolyBase obsługuje tylko uwierzytelnianie podstawowe. Przed utworzeniem poświadczeń o zakresie bazy danych baza danych musi mieć klucz główny, aby chronić poświadczenia. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY. Poniższy przykład tworzy poświadczenie o zakresie bazy danych, podaj własne dane logowania i hasło.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Następnie utwórz nowe zewnętrzne źródło danych.
Niezależnie od tego, czy baza danych dostępności została uwzględniona Database=dbname
w CONNECTION_OPTIONS
bazie danych, czy ustawiona jako domyślna baza danych logowania w poświadczeniu o określonym zakresie, należy nadal podać nazwę bazy danych za pomocą trzyczęściowej nazwy w instrukcji CREATE EXTERNAL TABLE w parametrze LOCATION. Aby zapoznać się z przykładem, zobacz CREATE EXTERNAL TABLE (TWORZENIE TABELI ZEWNĘTRZNEJ).
W poniższym przykładzie WINSQL2019AGL
jest nazwą odbiornika grupy dostępności i dbname
jest nazwą bazy danych, która ma być elementem docelowym instrukcji CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Zachowanie przekierowania grupy dostępności można zademonstrować, określając ApplicationIntent
i tworząc tabelę zewnętrzną w widoku sys.servers
systemu . W poniższym przykładowym skryscie tworzone są dwa zewnętrzne źródła danych, a jedna tabela zewnętrzna jest tworzona dla każdego z nich. Użyj widoków, aby przetestować, który serwer odpowiada na połączenie. Podobne wyniki można również osiągnąć za pomocą funkcji routingu tylko do odczytu. Aby uzyskać więcej informacji, zobacz Konfigurowanie routingu tylko do odczytu dla zawsze włączonej grupy dostępności.
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
Wewnątrz bazy danych w grupie dostępności utwórz widok, który ma zostać zwrócony sys.servers
, oraz nazwę wystąpienia lokalnego, co ułatwia określenie, która replika odpowiada na zapytanie. Aby uzyskać więcej informacji, zobacz sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Następnie utwórz tabelę zewnętrzną w wystąpieniu źródłowym:
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
Przykłady: operacje zbiorcze
Ważne
Nie należy dodawać końcowych /parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
H. Tworzenie zewnętrznego źródła danych na potrzeby operacji zbiorczych pobierania danych z usługi Azure Storage
Dotyczy: SQL Server 2017 (14.x) i SQL Server 2019 (15.x)
Użyj następującego źródła danych na potrzeby operacji zbiorczych przy użyciu operacji BULK INSERT lub OPENROWSET. Poświadczenie musi być ustawione SHARED ACCESS SIGNATURE
jako tożsamość, nie może mieć wiodącego w ?
tokenie SYGNATURy dostępu współdzielonego, musi mieć co najmniej uprawnienie do odczytu w pliku, które należy załadować (na przykład srt=o&sp=r
), a okres wygaśnięcia powinien być prawidłowy (wszystkie daty są w czasie UTC). Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Używanie sygnatur dostępu współdzielonego (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
);
Aby zobaczyć, jak używać tego przykładu, zobacz WSTAWIANIE ZBIORCZE.
Ja. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu abfs://
Dotyczy: SQL Server 2019 (15.x) CU11 lub nowszy
W tym przykładzie zewnętrzne źródło danych jest kontem logs
usługi Azure Data Lake Storage Gen2 przy użyciu sterownika systemu plików usługi Azure Blob (ABFS). Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Data Lake Storage Gen2 jest przeznaczone tylko do transferu danych, ponieważ wypychanie predykatu nie jest obsługiwane.
W tym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania na koncie usługi Azure Data Lake Storage Gen2. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze 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. Tworzenie zewnętrznego źródła danych przy użyciu ogólnego odBC do bazy danych PostgreSQL
Podobnie jak w poprzednich przykładach, najpierw utwórz klucz główny bazy danych i poświadczenia o zakresie bazy danych. Poświadczenie o zakresie bazy danych będzie używane dla zewnętrznego źródła danych. W tym przykładzie przyjęto również założenie, że na serwerze jest zainstalowany ogólny dostawca danych ODBC dla bazy danych PostgreSQL.
W tym przykładzie ogólny dostawca danych ODBC służy do nawiązywania połączenia z serwerem bazy danych PostgreSQL w tej samej sieci, gdzie w pełni kwalifikowana nazwa domeny serwera PostgreSQL to POSTGRES1
, przy użyciu domyślnego portu TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Treści powiązane
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- UTWÓRZ TABELĘ ZEWNĘTRZNĄ (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Używanie sygnatur dostępu współdzielonego (SAS)
- Konfiguracja łączności programu PolyBase (Transact-SQL)
Omówienie: SQL Server 2022
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych i ładowanie danych przy użyciu technologii PolyBase w programie SQL Server
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję. Ta zawartość dotyczy programu SQL Server 2022 (16.x) i nowszych wersji.
Składnia programu SQL Server 2022
Składnia dla programu SQL Server 2022 i nowszych wersji
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w programie SQL Server.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Obsługiwane lokalizacje według produktu/usługi | Uwierzytelnianie |
---|---|---|---|---|
Konto usługi Azure Storage (wersja 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ lub abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Począwszy od programu SQL Server 2022 (16.x) Hierarchiczna przestrzeń nazw jest obsługiwana. |
Sygnatura dostępu współdzielonego (SAS) |
Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ lub adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Począwszy od programu SQL Server 2022 (16.x) | Sygnatura dostępu współdzielonego (SAS) |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie SQL |
Wyrocznia | oracle |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Teradata | teradata |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
MongoDB lub Interfejs API usługi Cosmos DB dla bazy danych MongoDB | mongodb |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Ogólne ODBC | odbc |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) — tylko system Windows | Tylko uwierzytelnianie podstawowe |
Operacje zbiorcze | https |
<storage_account>.blob.core.windows.net/<container> |
Począwszy od programu SQL Server 2017 (14.x) | Sygnatura dostępu współdzielonego (SAS) |
Przechowywanie obiektów zgodne ze standardem S3 | s3 |
- Zgodne ze standardem S3: s3://<server_name>:<port>/ - AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder> lub s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Począwszy od programu SQL Server 2022 (16.x) | Podstawowe lub przekazywane (STS) * |
* Musi być poświadczenie w zakresie bazy danych, gdzie tożsamość jest zakodowana IDENTITY = 'S3 Access Key'
w kodzie, a argument SECRET jest w formacie = '<AccessKeyID>:<SecretKeyID>'
lub używa autoryzacji przekazywania (STS). Aby uzyskać więcej informacji, zobacz Configure PolyBase to access external data in S3-compatible object storage (Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z programem S3).
Ścieżka lokalizacji:
-
port
= port, na który nasłuchuje zewnętrzne źródło danych. Opcjonalnie w wielu przypadkach w zależności od konfiguracji sieci. -
<container_name>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure. -
<server_name>
= nazwa hosta. -
<instance_name>
= nazwa wystąpienia nazwanego programu SQL Server. Używane, jeśli masz usługę przeglądarki programu SQL Server uruchomioną w wystąpieniu docelowym. -
<ip_address>:<port>
= Tylko dla magazynu obiektów zgodnego z programem S3 (począwszy od programu SQL Server 2022 (16.x)), punkt końcowy i port używany do łączenia się z magazynem zgodnym z usługą S3. -
<bucket_name>
= tylko w przypadku magazynu obiektów zgodnego z programem S3 (począwszy od programu SQL Server 2022 (16.x)), specyficznego dla platformy magazynu. -
<region>
= tylko w przypadku magazynu obiektów zgodnego z programem S3 (począwszy od programu SQL Server 2022 (16.x)), specyficznego dla platformy magazynu. -
<folder>
= Część ścieżki magazynu w adresie URL magazynu.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat bazy danych programu SQL Server nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Łącznik umożliwia
sqlserver
połączenie programu SQL Server 2019 (15.x) z innym programem SQL Server lub usługą Azure SQL Database. - Określ parametr podczas nawiązywania
Driver={<Name of Driver>}
połączenia za pomocą poleceniaODBC
. - Opcja Hierarchiczna przestrzeń nazw dla kont usługi Azure Storage (V2) przy użyciu prefiksu
adls
jest obsługiwana za pośrednictwem usługi Azure Data Lake Storage Gen2 w programie SQL Server 2022 (16.x).
- Obsługa programu SQL Server dla zewnętrznych źródeł danych HDFS Cloudera (CDP) i Hortonworks (HDP) jest wycofana i nie jest uwzględniana w programie SQL Server 2022 (16.x). Nie ma potrzeby używania argumentu TYPE w programie SQL Server 2022 (16.x).
- Aby uzyskać więcej informacji na temat magazynu obiektów zgodnego z programem S3 i technologii PolyBase, począwszy od programu SQL Server 2022 (16.x), zobacz Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z programem S3. Aby zapoznać się z przykładem wykonywania zapytań dotyczących pliku parquet w magazynie obiektów zgodnym z protokołem S3, zobacz Virtualize parquet file in a S3-compatible object storage with PolyBase (Wirtualizacja pliku parquet w magazynie obiektów zgodnym z programem PolyBase).
- Różni się od poprzednich wersji, w programie SQL Server 2022 (16.x) prefiks używany dla konta usługi Azure Storage (wersja 2) zmienił się z
wasb[s]
naabs
. - Różni się od poprzednich wersji, w programie SQL Server 2022 (16.x) prefiks używany dla usługi Azure Data Lake Storage Gen2 zmienił się z
abfs[s]
naadls
. - Aby zapoznać się z przykładem użycia technologii PolyBase do wirtualizacji pliku CSV w usłudze Azure Storage, zobacz Wirtualizacja pliku CSV za pomocą technologii PolyBase.
- Aby zapoznać się z przykładem użycia technologii PolyBase do wirtualizacji tabeli różnicowej w usłudze ADLS Gen2, zobacz Wirtualizacja tabeli różnicowej za pomocą technologii PolyBase.
- Program SQL Server 2022 (16.x) w pełni obsługuje dwa formaty adresów URL dla konta usługi Azure Storage w wersji 2 (
abs
) i usługi Azure Data Lake Gen2 (adls
).- Ścieżka LOCATION może używać formatów:
<container>@<storage_account_name>..
(zalecane) lub<storage_account_name>../<container>
. Przykład:- Konto usługi Azure Storage w wersji 2:
abs://<container>@<storage_account_name>.blob.core.windows.net
(zalecane) lubabs://<storage_account_name>.blob.core.windows.net/<container>
.
- Konto usługi Azure Storage w wersji 2:
- Ścieżka LOCATION może używać formatów:
- Usługa Azure Data Lake Gen2 obsługuje:
adls://<container>@<storage_account_name>.blob.core.windows.net
(zalecane) lubadls://<storage_account_name>.dfs.core.windows.net/<container>
.
CONNECTION_OPTIONS = key_value_pair
Określony dla programu SQL Server 2019 (15.x) i nowszych wersji. Określa dodatkowe opcje podczas nawiązywania ODBC
połączenia z zewnętrznym źródłem danych. Aby użyć wielu opcji połączenia, oddziel je średnikami.
Dotyczy połączeń ogólnych ODBC
, a także wbudowanych ODBC
łączników dla programu SQL Server, Oracle, Teradata, MongoDB i interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.
Jest key_value_pair
to słowo kluczowe i wartość dla określonej opcji połączenia. Dostępne słowa kluczowe i wartości zależą od typu zewnętrznego źródła danych. Nazwa sterownika jest wymagana co najmniej, ale istnieją inne opcje, takie jak APP='<your_application_name>'
lub ApplicationIntent= ReadOnly|ReadWrite
, które są również przydatne do ustawienia i mogą pomóc w rozwiązywaniu problemów.
Możliwe pary wartości klucza są specyficzne dla sterownika. Aby uzyskać więcej informacji na temat każdego dostawcy, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Począwszy od programu SQL Server 2022 (16.x) Aktualizacja zbiorcza 2, wprowadzono dodatkowe słowa kluczowe do obsługi plików Oracle TNS:
- Słowo kluczowe
TNSNamesFile
określa ścieżkę pliku do pliku znajdującegotnsnames.ora
się na serwerze Oracle. - Słowo kluczowe
ServerName
określa alias używany w obiekcietnsnames.ora
, który będzie używany do zastępowania nazwy hosta i portu.
PUSHDOWN = ON | OD
Dotyczy: SQL Server 2019 (15.x) i nowsze wersje. Określa, czy obliczenia można wypchnąć do zewnętrznego źródła danych. Jest on domyślnie włączony.
PUSHDOWN
Program jest obsługiwany podczas nawiązywania połączenia z programem SQL Server, Oracle, Teradata, MongoDB, interfejsem API usługi Azure Cosmos DB dla bazy danych MongoDB lub odBC na poziomie zewnętrznego źródła danych.
Włączenie lub wyłączenie wypychania na poziomie zapytania jest osiągane za pomocą wskazówki EXTERNALPUSHDOWN.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy. - W przypadku uzyskiwania dostępu do konta usługi Azure Storage (wersja 2) lub usługi Azure Data Lake Storage Gen2
IDENTITY
element musi mieć wartośćSHARED ACCESS SIGNATURE
. - Aby zapoznać się z przykładem, zobacz Tworzenie zewnętrznego źródła danych w celu wykonywania operacji zbiorczych i pobierania danych z usługi Azure Storage do usługi SQL Database.
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
Token SAS można utworzyć, przechodząc do witryny Azure Portal -><Your_Storage_Account> —> Sygnatura dostępu współdzielonego — Konfigurowanie uprawnień —>> Generowanie sygnatury dostępu współdzielonego i parametrów połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
podczas konfigurowania jako KLUCZ TAJNY. - Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) Odczyt, tworzenie, wyświetlanie i zapisywanie W przypadku usług Azure Blob Storage i Azure Data Lake Gen 2:
- Dozwolone usługi:
Blob
należy wybrać, aby wygenerować token SAS
- Dozwolone usługi:
Dozwolone typy zasobów:
Container
iObject
należy wybrać, aby wygenerować token SAS
Aby zapoznać się z przykładem użycia magazynu obiektów zgodnego CREDENTIAL
z usługą S3 i technologii PolyBase, zobacz Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z usługą S3.
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w programie SQL Server.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Uaktualnianie do programu SQL Server 2022
Począwszy od programu SQL Server 2022 (16.x), zewnętrzne źródła danych usługi Hadoop nie są już obsługiwane. Wymagane jest ręczne ponowne utworzenie zewnętrznych źródeł danych utworzonych wcześniej za pomocą TYPE = HADOOP
metody i dowolnej tabeli zewnętrznej korzystającej z tego zewnętrznego źródła danych.
Użytkownicy będą również musieli skonfigurować swoje zewnętrzne źródła danych, aby używać nowych łączników podczas nawiązywania połączenia z usługą Azure Storage.
Zewnętrzne źródło danych | Źródło | Do |
---|---|---|
Azure Blob Storage (Usługa przechowywania bloków Azure) | wasb[s] |
abs |
ADLS Gen2 | abfs[s] |
adls |
Przykłady
Ważne
Aby uzyskać informacje na temat sposobu instalowania i włączania technologii PolyBase, zobacz Instalowanie programu PolyBase w systemie Windows
Odp. Tworzenie zewnętrznego źródła danych w programie SQL Server w celu odwołania się do bazy danych Oracle
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do bazy danych Oracle, upewnij się, że masz poświadczenie o zakresie bazy danych. Opcjonalnie możesz również włączyć lub wyłączyć wypychanie obliczeń względem tego źródła danych.
-- 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
);
Opcjonalnie zewnętrzne źródło danych oracle może używać uwierzytelniania serwera proxy w celu zapewnienia szczegółowej kontroli dostępu. Użytkownik proxy można skonfigurować tak, aby miał ograniczony dostęp w porównaniu z użytkownikiem personifikowanym.
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]
);
Alternatywnie można uwierzytelnić się przy użyciu usługi TNS.
Począwszy od programu SQL Server 2022 (16.x) Aktualizacja zbiorcza 2, CREATE EXTERNAL DATA SOURCE
teraz obsługuje korzystanie z plików TNS podczas nawiązywania połączenia z bazą danych Oracle.
Parametr CONNECTION_OPTIONS
został rozszerzony, a teraz używa TNSNamesFile
parametru ServerName
i tnsnames.ora
jako zmiennych do przeglądania pliku i nawiązywania połączenia z serwerem.
W poniższym przykładzie podczas wykonywania program SQL Server wyszuka lokalizację pliku określoną przez tnsnames.ora
program i wyszuka TNSNamesFile
hosta i port sieciowy określony przez ServerName
program .
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. Tworzenie zewnętrznego źródła danych w celu odwołania się do wystąpienia nazwanego programu SQL Server za pośrednictwem łączności programu PolyBase
Dotyczy: SQL Server 2019 (15.x) i nowszych wersji
Aby utworzyć zewnętrzne źródło danych odwołujące się do nazwanego wystąpienia programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić nazwę wystąpienia.
Najpierw utwórz poświadczenie o zakresie bazy danych, przechowując poświadczenia dla uwierzytelnionego logowania SQL. Łącznik SQL ODBC dla technologii PolyBase obsługuje tylko uwierzytelnianie podstawowe. Przed utworzeniem poświadczeń o zakresie bazy danych baza danych musi mieć klucz główny, aby chronić poświadczenia. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY (Transact-SQL). Poniższy przykład tworzy poświadczenie o zakresie bazy danych, podaj własne dane logowania i hasło.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
W poniższym przykładzie WINSQL2019
jest nazwą hosta i SQL2019
nazwą wystąpienia.
'Server=%s\SQL2019'
jest parą klucz-wartość.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternatywnie możesz użyć portu, aby nawiązać połączenie z domyślnym wystąpieniem programu SQL Server.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
C. Tworzenie zewnętrznego źródła danych w celu odwołowania się do pomocniczej repliki zawsze włączonej grupy dostępności
Dotyczy: SQL Server 2019 (15.x) i nowszych wersji
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do czytelnej repliki pomocniczej programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić element ApplicationIntent=ReadOnly
. Ponadto należy ustawić bazę danych dostępności jako Database={dbname}
w CONNECTION_OPTIONS
pliku lub ustawić bazę danych dostępności jako domyślną bazę danych logowania używaną dla poświadczeń o zakresie bazy danych. Należy to zrobić we wszystkich replikach dostępności grupy dostępności.
Najpierw utwórz poświadczenie o zakresie bazy danych, przechowując poświadczenia dla uwierzytelnionego logowania SQL. Łącznik SQL ODBC dla technologii PolyBase obsługuje tylko uwierzytelnianie podstawowe. Przed utworzeniem poświadczeń o zakresie bazy danych baza danych musi mieć klucz główny, aby chronić poświadczenia. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY (Transact-SQL). Poniższy przykład tworzy poświadczenie o zakresie bazy danych, podaj własne dane logowania i hasło.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username',
SECRET = 'password';
Następnie utwórz nowe zewnętrzne źródło danych.
Niezależnie od tego, czy baza danych dostępności została uwzględniona Database=dbname
w CONNECTION_OPTIONS
bazie danych, czy ustawiona jako domyślna baza danych logowania w poświadczeniu o określonym zakresie, należy nadal podać nazwę bazy danych za pomocą trzyczęściowej nazwy w instrukcji CREATE EXTERNAL TABLE w parametrze LOCATION. Aby zapoznać się z przykładem, zobacz CREATE EXTERNAL TABLE (TWORZENIE TABELI ZEWNĘTRZNEJ).
W poniższym przykładzie WINSQL2019AGL
jest nazwą odbiornika grupy dostępności i dbname
jest nazwą bazy danych, która ma być elementem docelowym instrukcji CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Zachowanie przekierowania grupy dostępności można zademonstrować, określając ApplicationIntent
i tworząc tabelę zewnętrzną w widoku sys.servers
systemu . W poniższym przykładowym skryscie tworzone są dwa zewnętrzne źródła danych, a jedna tabela zewnętrzna jest tworzona dla każdego z nich. Użyj widoków, aby przetestować, który serwer odpowiada na połączenie. Podobne wyniki można również osiągnąć za pomocą funkcji routingu tylko do odczytu. Aby uzyskać więcej informacji, zobacz Konfigurowanie routingu tylko do odczytu dla zawsze włączonej grupy dostępności.
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
Wewnątrz bazy danych w grupie dostępności utwórz widok, który ma zostać zwrócony sys.servers
, oraz nazwę wystąpienia lokalnego, co ułatwia określenie, która replika odpowiada na zapytanie. Aby uzyskać więcej informacji, zobacz sys.servers.
CREATE VIEW vw_sys_servers
AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Następnie utwórz tabelę zewnętrzną w wystąpieniu źródłowym:
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. Tworzenie zewnętrznego źródła danych w celu wykonywania zapytań względem pliku parquet w magazynie obiektów zgodnym z programem S3 za pomocą technologii PolyBase
Dotyczy: PROGRAMU SQL Server 2022 (16.x) i nowszych
Poniższy przykładowy skrypt tworzy zewnętrzne źródło danych s3_ds
w źródłowej bazie danych użytkownika w programie SQL Server. Zewnętrzne źródło danych odwołuje się do poświadczenia o zakresie bazy danych s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>' -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Sprawdź nowe zewnętrzne źródło danych przy użyciu sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Następnie w poniższym przykładzie pokazano, jak używać języka T-SQL do wykonywania zapytań dotyczących pliku parquet przechowywanego w magazynie obiektów zgodnym z protokołem S3 za pośrednictwem zapytania OPENROWSET. Aby uzyskać więcej informacji, zobacz Virtualize parquet file in a S3-compatible object storage with PolyBase (Wirtualizacja pliku parquet w magazynie obiektów zgodnym z programem S3 za pomocą technologii PolyBase).
SELECT *
FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Tworzenie zewnętrznego źródła danych przy użyciu ogólnego odBC do bazy danych PostgreSQL
Podobnie jak w poprzednich przykładach, najpierw utwórz klucz główny bazy danych i poświadczenia o zakresie bazy danych. Poświadczenie o zakresie bazy danych będzie używane dla zewnętrznego źródła danych. W tym przykładzie przyjęto również założenie, że na serwerze jest zainstalowany ogólny dostawca danych ODBC dla bazy danych PostgreSQL.
W tym przykładzie ogólny dostawca danych ODBC służy do nawiązywania połączenia z serwerem bazy danych PostgreSQL w tej samej sieci, gdzie w pełni kwalifikowana nazwa domeny serwera PostgreSQL to POSTGRES1
, przy użyciu domyślnego portu TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Azure Storage
Tworzenie sygnatury dostępu współdzielonego
W przypadku usług Azure Blob Storage i Azure Data Lake Storage (ADLS) Gen2 obsługiwana metoda uwierzytelniania to sygnatura dostępu współdzielonego (SAS). Jednym z prostych sposobów generowania tokenu sygnatury dostępu współdzielonego jest wykonanie poniższych kroków. Aby uzyskać więcej informacji, zobacz CREDENTIAL (POŚWIADCZENIA).
Przejdź do witryny Azure Portal i odpowiedniego konta magazynu.
Przejdź do żądanego kontenera w menu Magazyn danych .
Wybierz pozycję Tokeny dostępu współdzielonego.
Wybierz odpowiednie uprawnienie na podstawie żądanej akcji:
Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) Odczyt, tworzenie i zapisywanie Wybierz datę wygaśnięcia tokenu.
Generowanie tokenu sygnatury dostępu współdzielonego i adresu URL.
Skopiuj token SAS.
F. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Blob Storage przy użyciu interfejsu abs://
Dotyczy: PROGRAMU SQL Server 2022 (16.x) i nowszych
Począwszy od programu SQL Server 2022 (16.x), użyj nowego prefiksu abs
dla konta usługi Azure Storage w wersji 2. Prefiks abs
obsługuje uwierzytelnianie przy użyciu polecenia SHARED ACCESS SIGNATURE
. Prefiks abs
zastępuje wasb
wartość , używaną w poprzednich wersjach. Usługa HADOOP nie jest już obsługiwana. Nie trzeba już używać usługi TYPE = BLOB_STORAGE
.
Klucz konta usługi Azure Storage nie jest już potrzebny, zamiast tego przy użyciu tokenu SAS, jak widać w poniższym przykładzie:
-- 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
);
Aby uzyskać bardziej szczegółowy przykład dotyczący uzyskiwania dostępu do plików CSV przechowywanych w usłudze Azure Blob Storage, zobacz Wirtualizacja pliku CSV za pomocą technologii PolyBase.
G. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Data Lake Gen2
Dotyczy: SQL Server 2022 (16.x) i nowsze wersje
Począwszy od programu SQL Server 2022 (16.x), użyj nowego prefiksu adls
dla usługi Azure Data Lake Gen2, zastępując abfs
go używanymi w poprzednich wersjach. Prefiks adls
obsługuje również token SAS jako metodę uwierzytelniania, jak pokazano w tym przykładzie:
--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
);
Aby uzyskać bardziej szczegółowy przykład sposobu uzyskiwania dostępu do plików różnicowych przechowywanych w usłudze Azure Data Lake Gen2, zobacz Wirtualizacja tabeli różnicowej za pomocą technologii PolyBase.
Przykłady: operacje zbiorcze
Ważne
Nie należy dodawać końcowych /parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
H. Tworzenie zewnętrznego źródła danych na potrzeby operacji zbiorczych pobierania danych z usługi Azure Storage
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
Użyj następującego źródła danych do operacji zbiorczych przy użyciu funkcji BULK INSERT (Transact-SQL) lub OPENROWSET (Transact-SQL). Poświadczenie musi być ustawione SHARED ACCESS SIGNATURE
jako tożsamość, nie może mieć wiodącego w ?
tokenie SYGNATURy dostępu współdzielonego, musi mieć co najmniej uprawnienie do odczytu w pliku, które należy załadować (na przykład srt=o&sp=r
), a okres wygaśnięcia powinien być prawidłowy (wszystkie daty są w czasie UTC). Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Używanie sygnatur dostępu współdzielonego (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,
);
Treści powiązane
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- UTWÓRZ TABELĘ ZEWNĘTRZNĄ (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Używanie sygnatur dostępu współdzielonego (SAS)
- Konfiguracja łączności programu PolyBase (Transact-SQL)
Omówienie: SQL Server 2025
Dotyczy: SQL Server 2025 (17.x) Preview i nowsze wersje.
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych i ładowanie danych przy użyciu wirtualizacji danych z technologią PolyBase w programie SQL Server
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
Uwaga / Notatka
Ta składnia różni się w różnych wersjach programu SQL Server. Użyj listy rozwijanej selektora wersji, aby wybrać odpowiednią wersję. Ta zawartość dotyczy programu SQL Server 2025 (17.x) Preview i nowszych wersji.
Składnia dla programu SQL Server 2025 i nowszych wersji
Aby uzyskać więcej informacji na temat konwencji składni, zobacz Transact-SQL konwencje składni.
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CONNECTION_OPTIONS = '<key_value_pairs>'[,...]]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] PUSHDOWN = { ON | OFF } ]
)
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w programie SQL Server.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Obsługiwane lokalizacje według produktu/usługi | Uwierzytelnianie |
---|---|---|---|---|
Konto usługi Azure Storage (wersja 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ lub abs://<storage_account_name>.blob.core.windows.net/<container_name> |
Począwszy od programu SQL Server 2022 (16.x) Hierarchiczna przestrzeń nazw jest obsługiwana. |
Sygnatura dostępu współdzielonego (SAS) |
Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ lub adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Począwszy od programu SQL Server 2022 (16.x) | Sygnatura dostępu współdzielonego (SAS) |
SQL Server | sqlserver |
<server_name>[\<instance_name>][:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie SQL |
Wyrocznia | oracle |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Teradata | teradata |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
MongoDB lub Interfejs API usługi Cosmos DB dla bazy danych MongoDB | mongodb |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) | Tylko uwierzytelnianie podstawowe |
Ogólne ODBC | odbc |
<server_name>[:port] |
Począwszy od programu SQL Server 2019 (15.x) — tylko system Windows | Tylko uwierzytelnianie podstawowe |
Operacje zbiorcze | https |
<storage_account>.blob.core.windows.net/<container> |
Począwszy od programu SQL Server 2017 (14.x) | Sygnatura dostępu współdzielonego (SAS) |
Przechowywanie obiektów zgodne ze standardem S3 | s3 |
- Zgodne ze standardem S3: s3://<server_name>:<port>/ - AWS S3: s3://<bucket_name>.S3.amazonaws.com[:port]/<folder> lub s3://s3.amazonaws.com[:port]/<bucket_name>/<folder> |
Począwszy od programu SQL Server 2022 (16.x) | Podstawowa lub przekazywana (STS) 1 |
1 Musi być poświadczenie w zakresie bazy danych, gdzie IDENTITY
jest zakodowany w kodzie IDENTITY = 'S3 Access Key'
, a SECRET
argument jest w formacie = '<AccessKeyID>:<SecretKeyID>'
lub używa autoryzacji przekazywania (STS). Aby uzyskać więcej informacji, zobacz Configure PolyBase to access external data in S3-compatible object storage (Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z programem S3).
Ścieżka lokalizacji:
Ścieżka dostępu | Opis |
---|---|
port |
Port, na który nasłuchuje zewnętrzne źródło danych. Opcjonalnie w wielu przypadkach w zależności od konfiguracji sieci. |
<container_name> |
Kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. |
<storage_account> |
Nazwa konta magazynu zasobu platformy Azure. |
<server_name> |
Nazwa hosta. |
<instance_name> |
Nazwa wystąpienia nazwanego programu SQL Server. Używane, jeśli masz usługę przeglądarki programu SQL Server uruchomioną w wystąpieniu docelowym. |
<ip_address>:<port>
1 |
Tylko w przypadku magazynu obiektów zgodnego z usługą S3 punkt końcowy i port używany do nawiązywania połączenia z magazynem zgodnym z usługą S3. |
<bucket_name>
1 |
Tylko w przypadku magazynu obiektów zgodnego z usługą S3 specyficzne dla platformy magazynu. |
<region>
1 |
Tylko w przypadku magazynu obiektów zgodnego z usługą S3 specyficzne dla platformy magazynu. |
<folder> |
Część ścieżki magazynu w adresie URL magazynu. |
1 SQL Server 2022 (16.x) i nowsze wersje.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
Aparat bazy danych programu SQL Server nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
Łącznik umożliwia
sqlserver
połączenie programu SQL Server 2019 (15.x) z innym programem SQL Server lub usługą Azure SQL Database.Określ parametr podczas nawiązywania
Driver={<Name of Driver>}
połączenia za pomocą poleceniaODBC
.Opcja Hierarchiczna przestrzeń nazw dla kont usługi Azure Storage (V2) przy użyciu prefiksu
adls
jest obsługiwana za pośrednictwem usługi Azure Data Lake Storage Gen2 w programie SQL Server 2022 (16.x) i nowszych wersjach.Obsługa programu SQL Server dla zewnętrznych źródeł danych HDFS Cloudera (CDP) i Hortonworks (HDP) jest wycofana i nie jest uwzględniana w programie SQL Server 2022 (16.x) i nowszych wersjach. Nie ma potrzeby używania argumentu
TYPE
w wersji zapoznawczej programu SQL Server 2025 (17.x).Aby uzyskać więcej informacji na temat magazynu obiektów zgodnego z programem S3 i programu PolyBase w programie SQL Server 2022 (16.x) i nowszych wersjach, zobacz Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z programem S3. Aby zapoznać się z przykładem wykonywania zapytań dotyczących pliku parquet w magazynie obiektów zgodnym z protokołem S3, zobacz Virtualize parquet file in a S3-compatible object storage with PolyBase (Wirtualizacja pliku parquet w magazynie obiektów zgodnym z programem PolyBase).
W programie SQL Server 2022 (16.x) i nowszych wersjach:
prefiks używany dla konta usługi Azure Storage (wersja 2) został zmieniony z
wasb[s]
naabs
prefiks używany dla usługi Azure Data Lake Storage Gen2 został zmieniony z
abfs[s]
naadls
Aby zapoznać się z przykładem użycia technologii PolyBase do wirtualizacji pliku CSV w usłudze Azure Storage, zobacz Wirtualizacja pliku CSV za pomocą technologii PolyBase.
Aby zapoznać się z przykładem użycia technologii PolyBase do wirtualizacji tabeli różnicowej w usłudze ADLS Gen2, zobacz Wirtualizacja tabeli różnicowej za pomocą technologii PolyBase.
Program SQL Server 2022 (16.x) i nowsze wersje w pełni obsługują dwa formaty adresów URL dla konta usługi Azure Storage w wersji 2 (
abs
) i usługi Azure Data Lake Gen2 (adls
).Ścieżka
LOCATION
może używać formatów:<container>@<storage_account_name>..
(zalecane) lub<storage_account_name>../<container>
. Przykład:- Konto usługi Azure Storage w wersji 2:
abs://<container>@<storage_account_name>.blob.core.windows.net
(zalecane) lubabs://<storage_account_name>.blob.core.windows.net/<container>
.
- Konto usługi Azure Storage w wersji 2:
Usługa Azure Data Lake Gen2 obsługuje:
adls://<container>@<storage_account_name>.blob.core.windows.net
(zalecane) lubadls://<storage_account_name>.dfs.core.windows.net/<container>
.
CONNECTION_OPTIONS = key_value_pair
Dotyczy: SQL Server 2019 (15.x) i nowsze wersje.
Określa dodatkowe opcje podczas nawiązywania ODBC
połączenia z zewnętrznym źródłem danych. Aby użyć wielu opcji połączenia, oddziel je średnikami.
Dotyczy połączeń ogólnych ODBC
, a także wbudowanych ODBC
łączników dla programu SQL Server, Oracle, Teradata, MongoDB i interfejsu API usługi Azure Cosmos DB dla bazy danych MongoDB.
Jest key_value_pair
to słowo kluczowe i wartość dla określonej opcji połączenia. Dostępne słowa kluczowe i wartości zależą od typu zewnętrznego źródła danych. Nazwa sterownika jest wymagana co najmniej, ale istnieją inne opcje, takie jak APP='<your_application_name>'
lub ApplicationIntent= ReadOnly|ReadWrite
, które są również przydatne do ustawienia i mogą pomóc w rozwiązywaniu problemów.
Możliwe pary wartości klucza są specyficzne dla sterownika. Aby uzyskać więcej informacji na temat każdego dostawcy, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL) CONNECTION_OPTIONS.
Począwszy od programu SQL Server 2022 (16.x) Aktualizacja zbiorcza 2, wprowadzono dodatkowe słowa kluczowe do obsługi plików Oracle TNS:
- Słowo kluczowe
TNSNamesFile
określa ścieżkę pliku do pliku znajdującegotnsnames.ora
się na serwerze Oracle. - Słowo kluczowe
ServerName
określa alias używany w obiekcietnsnames.ora
, który będzie używany do zastępowania nazwy hosta i portu.
Opcje szyfrowania w programie SQL Server 2025 (wersja zapoznawcza 17.x)
Począwszy od wersji zapoznawczej programu SQL Server 2025 (17.x), w przypadku używania sqlserver
jako źródła danych sterownik Microsoft ODBC w wersji 18 dla programu SQL Server jest domyślnym sterownikiem. Opcja jest wymagana Encryption
(Yes
, No
, lub Strict
) i TrustServerCertificate
jest dostępna (Yes
lub No
). Jeśli Encryption
nie zostanie określony, domyślne zachowanie to Encrypt=Yes;TrustServerCertificate=No;
, i wymaga certyfikatu serwera.
Aby nawiązać połączenie przy użyciu protokołu TDS 8.0, dodano tryb ścisły (Encrypt=Strict
). W tym trybie wymagany jest zaufany certyfikat serwera do zainstalowania i jest zawsze weryfikowany (certyfikat TrustServerCertificate jest ignorowany). Nowego słowa kluczowego , HostnameInCertificate
można użyć do określenia oczekiwanej nazwy hosta znalezionej w certyfikacie, jeśli różni się on od określonego serwera.
HostnameInCertificate
można używać we wszystkich trybach szyfrowania i ma zastosowanie również wtedy, gdy opcja szyfrowania wymuszonego po stronie serwera jest włączona, co spowoduje, że sterownik weryfikuje certyfikat w trybach opcjonalnych lub obowiązkowych , chyba że jest wyłączony przy użyciu polecenia TrustServerCertificate
.
Aby uzyskać więcej informacji na temat Encryption
opcji, certyfikatów serwera i TrustServerCertificate
programu , zobacz Funkcje sterownika Microsoft ODBC dla programu SQL Server w systemie Windows.
Zawsze należy używać najnowszego sterownika. Jednak wersja zapoznawcza programu SQL Server 2025 (17.x) obsługuje również sterownik Microsoft ODBC w wersji 17 dla programu SQL Server w celu zapewnienia zgodności z poprzednimi wersjami. Aby uzyskać więcej informacji na temat zmiany wersji sterownika używanej przez program PolyBase, zobacz Jak zmienić wersję sterownika programu SQL Server dla programu PolyBase.
PUSHDOWN = ON | OD
Dotyczy: SQL Server 2019 (15.x) i nowsze wersje.
Określa, czy obliczenia można wypchnąć do zewnętrznego źródła danych. Włączone domyślnie.
PUSHDOWN
Program jest obsługiwany podczas nawiązywania połączenia z programem SQL Server, Oracle, Teradata, MongoDB, interfejsem API usługi Azure Cosmos DB dla bazy danych MongoDB lub odBC na poziomie zewnętrznego źródła danych.
Włączenie lub wyłączenie wypychania na poziomie zapytania jest osiągane za pomocą wskazówki.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy.W przypadku uzyskiwania dostępu do konta usługi Azure Storage (wersja 2) lub usługi Azure Data Lake Storage Gen2
IDENTITY
element musi mieć wartośćSHARED ACCESS SIGNATURE
.Aby zapoznać się z przykładem, zobacz Tworzenie zewnętrznego źródła danych w celu wykonywania operacji zbiorczych i pobierania danych z usługi Azure Storage do usługi SQL Database.
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
Token SAS można utworzyć, przechodząc do witryny Azure Portal><Your_Storage_Account>> Sygnatura >Konfigurowanie uprawnień>Generuj sygnaturę dostępu współdzielonego i parametry połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
po skonfigurowaniu jako .SECRET
Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) Odczyt, tworzenie, wyświetlanie i zapisywanie W przypadku usług Azure Blob Storage i Azure Data Lake Gen 2:
- Dozwolone usługi:
Blob
należy wybrać, aby wygenerować token SAS
- Dozwolone usługi:
Dozwolone typy zasobów:
Container
iObject
należy wybrać, aby wygenerować token SAS
Aby zapoznać się z przykładem użycia magazynu obiektów zgodnego CREDENTIAL
z usługą S3 i technologii PolyBase, zobacz Konfigurowanie programu PolyBase w celu uzyskania dostępu do danych zewnętrznych w magazynie obiektów zgodnym z usługą S3.
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (TWORZENIE POŚWIADCZEŃ O ZAKRESIE BAZY DANYCH).
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w programie SQL Server.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Uaktualnianie do programu SQL Server 2025
W programie SQL Server 2022 (16.x) i nowszych wersjach zewnętrzne źródła danych usługi Hadoop nie są obsługiwane. Wymagane jest ręczne ponowne utworzenie zewnętrznych źródeł danych utworzonych wcześniej za pomocą TYPE = HADOOP
polecenia i dowolnej tabeli zewnętrznej korzystającej z tego zewnętrznego źródła danych.
Użytkownicy będą również musieli skonfigurować swoje zewnętrzne źródła danych, aby używać nowych łączników podczas nawiązywania połączenia z usługą Azure Storage.
Zewnętrzne źródło danych | Źródło | Do |
---|---|---|
Azure Blob Storage (Usługa przechowywania bloków Azure) | wasb[s] | Mięśnie brzucha |
ADLS Gen2 | abfs[s] | ADLS |
Przykłady
Ważne
Aby uzyskać informacje na temat sposobu instalowania i włączania programu PolyBase, zobacz Instalowanie programu PolyBase w systemie Windows.
Odp. Tworzenie zewnętrznego źródła danych w programie SQL Server w celu odwołania się do bazy danych Oracle
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do bazy danych Oracle, upewnij się, że masz poświadczenie o zakresie bazy danych. Opcjonalnie możesz również włączyć lub wyłączyć wypychanie obliczeń względem tego źródła danych.
-- Create a database master key if one does not already exist, using your own password.
-- This key is used to encrypt the credential secret in next step.
CREATE MASTER KEY ENCRYPTION BY PASSWORD= '<password>';
-- Create a database scoped credential with Azure storage account key as the secret.
CREATE DATABASE SCOPED CREDENTIAL OracleProxyAccount
WITH IDENTITY = 'oracle_username', SECRET = 'oracle_password';
CREATE EXTERNAL DATA SOURCE MyOracleServer
WITH (
LOCATION = 'oracle://145.145.145.145:1521',
PUSHDOWN = ON,
CREDENTIAL = OracleProxyAccount
);
Opcjonalnie zewnętrzne źródło danych oracle może używać uwierzytelniania serwera proxy w celu zapewnienia szczegółowej kontroli dostępu. Użytkownik proxy można skonfigurować tak, aby miał ograniczony dostęp w porównaniu z użytkownikiem personifikowanym.
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]
);
Alternatywnie można uwierzytelnić się przy użyciu usługi TNS.
Począwszy od programu SQL Server 2022 (16.x) Aktualizacja zbiorcza 2, CREATE EXTERNAL DATA SOURCE
teraz obsługuje korzystanie z plików TNS podczas nawiązywania połączenia z bazą danych Oracle.
Parametr CONNECTION_OPTIONS
został rozszerzony, a teraz używa TNSNamesFile
parametru ServerName
i tnsnames.ora
jako zmiennych do przeglądania pliku i nawiązywania połączenia z serwerem.
W poniższym przykładzie podczas wykonywania program SQL Server wyszuka lokalizację pliku określoną przez tnsnames.ora
program i wyszuka TNSNamesFile
hosta i port sieciowy określony przez ServerName
program .
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. Tworzenie zewnętrznego źródła danych w celu odwołania się do wystąpienia nazwanego programu SQL Server za pośrednictwem łączności programu PolyBase
Dotyczy: SQL Server 2019 (15.x) i nowsze wersje.
Aby utworzyć zewnętrzne źródło danych odwołujące się do nazwanego wystąpienia programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić nazwę wystąpienia.
Najpierw utwórz poświadczenie o zakresie bazy danych, przechowując poświadczenia dla uwierzytelnionego logowania SQL. Łącznik SQL ODBC dla technologii PolyBase obsługuje tylko uwierzytelnianie podstawowe. Przed utworzeniem poświadczeń o zakresie bazy danych baza danych musi mieć klucz główny, aby chronić poświadczenia. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY. Poniższy przykład tworzy poświadczenie o zakresie bazy danych, podaj własne dane logowania i hasło.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
W poniższym przykładzie WINSQL2019
jest nazwą hosta i SQL2019
nazwą wystąpienia.
'Server=%s\SQL2019'
jest parą klucz-wartość.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019',
CONNECTION_OPTIONS = 'Server=%s\SQL2019',
CREDENTIAL = SQLServerCredentials
);
Alternatywnie możesz użyć portu, aby nawiązać połączenie z domyślnym wystąpieniem programu SQL Server.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019:58137',
CREDENTIAL = SQLServerCredentials
);
C. Tworzenie zewnętrznego źródła danych w celu odwołowania się do pomocniczej repliki zawsze włączonej grupy dostępności
Dotyczy: SQL Server 2019 (15.x) i nowsze wersje.
Aby utworzyć zewnętrzne źródło danych, które odwołuje się do czytelnej repliki pomocniczej programu SQL Server, użyj polecenia CONNECTION_OPTIONS
, aby określić element ApplicationIntent=ReadOnly
. Ponadto należy ustawić bazę danych dostępności jako Database={dbname}
CONNECTION_OPTIONS
w pliku lub ustawić bazę danych dostępności jako domyślną bazę danych logowania używaną dla poświadczeń o określonym zakresie bazy danych. Należy to zrobić na wszystkich replikach dostępności grupy dostępności.
Najpierw utwórz poświadczenie o zakresie bazy danych, przechowując poświadczenia dla uwierzytelnionego logowania SQL. Łącznik SQL ODBC dla technologii PolyBase obsługuje tylko uwierzytelnianie podstawowe. Przed utworzeniem poświadczeń o zakresie bazy danych baza danych musi mieć klucz główny, aby chronić poświadczenia. Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY. Poniższy przykład tworzy poświadczenie o zakresie bazy danych, podaj własne dane logowania i hasło.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH IDENTITY = 'username', SECRET = 'password';
Następnie utwórz nowe zewnętrzne źródło danych.
Niezależnie od tego, czy baza danych dostępności została uwzględniona Database=dbname
w CONNECTION_OPTIONS
bazie danych, czy ustawiona jako domyślna baza danych logowania w poświadczeniu o określonym zakresie, należy nadal podać nazwę bazy danych za pomocą trzyczęściowej nazwy w instrukcji CREATE EXTERNAL TABLE w parametrze LOCATION. Aby zapoznać się z przykładem, zobacz CREATE EXTERNAL TABLE (TWORZENIE TABELI ZEWNĘTRZNEJ).
W poniższym przykładzie WINSQL2019AGL
jest nazwą odbiornika grupy dostępności i dbname
jest nazwą bazy danych, która ma być elementem docelowym instrukcji CREATE EXTERNAL TABLE.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2019AGL',
CONNECTION_OPTIONS = 'ApplicationIntent=ReadOnly; Database=dbname',
CREDENTIAL = SQLServerCredentials
);
Zachowanie przekierowania grupy dostępności można zademonstrować, określając ApplicationIntent
i tworząc tabelę zewnętrzną w widoku sys.servers
systemu . W poniższym przykładowym skryscie tworzone są dwa zewnętrzne źródła danych, a jedna tabela zewnętrzna jest tworzona dla każdego z nich. Użyj widoków, aby przetestować, który serwer odpowiada na połączenie. Podobne wyniki można również osiągnąć za pomocą funkcji routingu tylko do odczytu. Aby uzyskać więcej informacji, zobacz Konfigurowanie routingu tylko do odczytu dla zawsze włączonej grupy dostępności.
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
Wewnątrz bazy danych w grupie dostępności utwórz widok, który ma zostać zwrócony sys.servers
, oraz nazwę wystąpienia lokalnego, co ułatwia określenie, która replika odpowiada na zapytanie. Aby uzyskać więcej informacji, zobacz sys.servers.
CREATE VIEW vw_sys_servers AS
SELECT [name]
FROM sys.servers
WHERE server_id = 0;
GO
Następnie utwórz tabelę zewnętrzną w wystąpieniu źródłowym:
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. Tworzenie zewnętrznego źródła danych w celu wykonywania zapytań względem pliku parquet w magazynie obiektów zgodnym z programem S3 za pomocą technologii PolyBase
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
Poniższy przykładowy skrypt tworzy zewnętrzne źródło danych s3_ds
w źródłowej bazie danych użytkownika w programie SQL Server. Zewnętrzne źródło danych odwołuje się do poświadczenia o zakresie bazy danych s3_dc
.
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key', -- for S3-compatible object storage the identity must always be S3 Access Key
SECRET = '<access_key_id>:<secret_key_id>'; -- provided by the S3-compatible object storage
GO
CREATE EXTERNAL DATA SOURCE s3_ds
WITH (
LOCATION = 's3://<ip_address>:<port>/',
CREDENTIAL = s3_dc
);
GO
Sprawdź nowe zewnętrzne źródło danych przy użyciu sys.external_data_sources.
SELECT *
FROM sys.external_data_sources;
Następnie w poniższym przykładzie pokazano, jak używać języka T-SQL do wykonywania zapytań dotyczących pliku parquet przechowywanego w magazynie obiektów zgodnym z protokołem S3 za pośrednictwem zapytania OPENROWSET. Aby uzyskać więcej informacji, zobacz Virtualize parquet file in a S3-compatible object storage with PolyBase (Wirtualizacja pliku parquet w magazynie obiektów zgodnym z programem S3 za pomocą technologii PolyBase).
SELECT * FROM OPENROWSET (
BULK '/<bucket>/<parquet_folder>',
FORMAT = 'PARQUET',
DATA_SOURCE = 's3_ds'
) AS [cc];
E. Tworzenie zewnętrznego źródła danych przy użyciu ogólnego odBC do bazy danych PostgreSQL
Podobnie jak w poprzednich przykładach, najpierw utwórz klucz główny bazy danych i poświadczenia o zakresie bazy danych. Poświadczenie o zakresie bazy danych będzie używane dla zewnętrznego źródła danych. W tym przykładzie przyjęto również założenie, że na serwerze jest zainstalowany ogólny dostawca danych ODBC dla bazy danych PostgreSQL.
W tym przykładzie ogólny dostawca danych ODBC służy do nawiązywania połączenia z serwerem bazy danych PostgreSQL w tej samej sieci, gdzie w pełni kwalifikowana nazwa domeny serwera PostgreSQL to POSTGRES1
, przy użyciu domyślnego portu TCP 5432.
CREATE EXTERNAL DATA SOURCE POSTGRES1
WITH (
LOCATION = 'odbc://POSTGRES1.domain:5432',
CONNECTION_OPTIONS = 'Driver={PostgreSQL Unicode(x64)};',
CREDENTIAL = postgres_credential
);
Azure Storage
Tworzenie sygnatury dostępu współdzielonego
W przypadku usług Azure Blob Storage i Azure Data Lake Gen2 obsługiwana metoda uwierzytelniania to sygnatura dostępu współdzielonego (SAS). Jednym z prostych sposobów generowania tokenu sygnatury dostępu współdzielonego jest wykonanie poniższych kroków. Aby uzyskać więcej informacji, zobacz CREDENTIAL (POŚWIADCZENIA).
- Przejdź do witryny Azure Portal i odpowiedniego konta magazynu.
- Przejdź do żądanego kontenera w menu Magazyn danych .
- Wybierz pozycję Tokeny dostępu współdzielonego.
- Wybierz odpowiednie uprawnienie na podstawie żądanej akcji, aby uzyskać odwołanie, użyj poniższej tabeli:
Akcja | Pozwolenie |
---|---|
Odczytywanie danych z pliku | Przeczytaj |
Odczytywanie danych z wielu plików i podfolderów | Przeczytaj i wymień |
Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) | Odczyt, tworzenie i zapisywanie |
- Wybierz datę wygaśnięcia tokenu.
- Generowanie tokenu sygnatury dostępu współdzielonego i adresu URL.
- Skopiuj token SAS.
F. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Blob Storage przy użyciu interfejsu abs://
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
Użyj nowego prefiksu abs
dla konta usługi Azure Storage w wersji 2. Prefiks abs
obsługuje uwierzytelnianie przy użyciu polecenia SHARED ACCESS SIGNATURE
. Prefiks abs
zastępuje wasb
wartość , używaną w poprzednich wersjach. Usługa HADOOP nie jest już obsługiwana. Nie trzeba już używać usługi TYPE = BLOB_STORAGE
.
Klucz konta usługi Azure Storage nie jest już potrzebny, zamiast tego przy użyciu tokenu SAS, jak widać w poniższym przykładzie:
-- 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
);
Aby uzyskać bardziej szczegółowy przykład dotyczący uzyskiwania dostępu do plików CSV przechowywanych w usłudze Azure Blob Storage, zobacz Wirtualizacja pliku CSV za pomocą technologii PolyBase.
G. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Data Lake Gen2
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
Użyj nowego prefiksu adls
dla usługi Azure Data Lake Gen2, zastępując abfs
go używanymi w poprzednich wersjach. Prefiks adls
obsługuje również token SAS jako metodę uwierzytelniania, jak pokazano w tym przykładzie:
--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
);
Aby uzyskać bardziej szczegółowy przykład sposobu uzyskiwania dostępu do plików różnicowych przechowywanych w usłudze Azure Data Lake Gen2, zobacz Wirtualizacja tabeli różnicowej za pomocą technologii PolyBase.
Przykłady: operacje zbiorcze
Ważne
Nie należy dodawać końcowych /
parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
H. Tworzenie zewnętrznego źródła danych na potrzeby operacji zbiorczych pobierania danych z usługi Azure Storage
Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.
Użyj następującego źródła danych na potrzeby operacji zbiorczych przy użyciu operacji BULK INSERT lub OPENROWSET. Poświadczenie musi być ustawione SHARED ACCESS SIGNATURE
jako tożsamość, nie może mieć wiodącego w ?
tokenie SYGNATURy dostępu współdzielonego, musi mieć co najmniej uprawnienie do odczytu w pliku, które należy załadować (na przykład srt=o&sp=r
), a okres wygaśnięcia powinien być prawidłowy (wszystkie daty są w czasie UTC). Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Używanie sygnatur dostępu współdzielonego (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,
);
Ja. Tworzenie zewnętrznego źródła danych przy użyciu usługi TDS 8.0 w celu nawiązania połączenia z innym programem SQL Server
Dotyczy: SQL Server 2025 (17.x) Preview i nowsze wersje.
W przypadku korzystania z najnowszego sterownika Microsoft ODBC 18 dla programu SQL Server należy użyć Encryption
opcji w obszarze CONNECTION_OPTIONS
, a TrustServerCertificate
także jest obsługiwana. Jeśli Encryption
nie zostanie określony, domyślne zachowanie to Encrypt=Yes;TrustServerCertificate=No;
, i wymagasz certyfikatu serwera.
W tym przykładzie jest używane uwierzytelnianie SQL. Aby chronić poświadczenia, potrzebny jest klucz główny bazy danych (DMK). Aby uzyskać więcej informacji, zobacz CREATE MASTER KEY. Poniższy przykład tworzy poświadczenie o zakresie bazy danych z niestandardowym identyfikatorem logowania i hasłem.
CREATE DATABASE SCOPED CREDENTIAL SQLServerCredentials
WITH
IDENTITY = '<username>',
SECRET = '<password>';
Nazwa serwera docelowego to WINSQL2022
, port 58137
i jest wystąpieniem domyślnym.
Encryption=Strict
Określając parametr , połączenie używa protokołu TDS 8.0, a certyfikat serwera jest zawsze weryfikowany. w tym przykładzie używanym elementem HostnameinCertificate
jest WINSQL2022
:
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=Strict;HostnameInCertificate=WINSQL2022;'
CREDENTIAL = SQLServerCredentials
);
J. Tworzenie zewnętrznego źródła danych przy użyciu szyfrowania i opcji TrustServerCertificate
Poniżej przedstawiono dwa przykłady kodu w poprzednim przykładzie. Pierwszy fragment kodu zawiera Encryption
i TrustServerCertificate
ustawiono.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=Yes;HostnameInCertificate=WINSQL2022;TrustServerCertificate=Yes;'
CREDENTIAL = SQLServerCredentials
);
Poniższy fragment kodu nie został Encryption
włączony.
CREATE EXTERNAL DATA SOURCE SQLServerInstance2
WITH (
LOCATION = 'sqlserver://WINSQL2022:58137',
CONNECTION_OPTIONS = 'Encryption=no;'
CREDENTIAL = SQLServerCredentials
);
Treści powiązane
- ALTER EXTERNAL DATA SOURCE (Transact-SQL)
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- UTWÓRZ TABELĘ ZEWNĘTRZNĄ (Transact-SQL)
- sys.external_data_sources (Transact-SQL)
- Używanie sygnatur dostępu współdzielonego (SAS)
- Konfiguracja łączności programu PolyBase (Transact-SQL)
* SQL Database *
Azure Synapse
analizy
Omówienie: Azure SQL Database
Dotyczy: Azure SQL Database
Tworzy zewnętrzne źródło danych dla zapytań elastycznych. Zewnętrzne źródła danych są używane do nawiązywania łączności i obsługi tych podstawowych przypadków użycia:
- Wirtualizacja danych (wersja zapoznawcza)
- Operacje ładowania zbiorczego przy użyciu lub
BULK INSERT
OPENROWSET
- Wykonywanie zapytań dotyczących zdalnych wystąpień usługi SQL Database lub Azure Synapse przy użyciu usługi SQL Database z elastycznym zapytaniem
- Wykonywanie zapytań względem podzielonej na fragmenty bazy danych SQL Database przy użyciu zapytania elastycznego
Transact-SQL konwencje składni
Składnia
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>' ] )
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych w usłudze SQL Database.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu | Dostępność |
---|---|---|---|
Operacje zbiorcze | https |
<storage_account>.blob.core.windows.net/<container> |
|
Zapytanie elastyczne (fragment) | Niewymagane | <shard_map_server_name>.database.windows.net |
|
Zapytanie elastyczne (zdalne) | Niewymagane | <remote_server_name>.database.windows.net |
|
EdgeHub | edgehub |
edgehub:// |
Dostępne tylko w usłudze Azure SQL Edge. Usługa EdgeHub jest zawsze lokalna dla wystąpienia usługi Azure SQL Edge. W związku z tym nie trzeba określać ścieżki ani wartości portu. |
Kafka | kafka |
kafka://<kafka_bootstrap_server_name_ip>:<port_number> |
Dostępne tylko w usłudze Azure SQL Edge. |
Konto usługi Azure Storage (wersja 2) | abs |
abs://<container_name>@<storage_account_name>.blob.core.windows.net/ lub abs://<storage_account_name>.blob.core.windows.net/
<container_name> |
|
Azure Data Lake Storage Gen2 | adls |
adls://<container_name>@<storage_account_name>.dfs.core.windows.net/ lub adls://<storage_account_name>.dfs.core.windows.net/<container_name> |
Ścieżka lokalizacji:
-
<shard_map_server_name>
= nazwa serwera logicznego na platformie Azure hostująca menedżera map fragmentów. ArgumentDATABASE_NAME
udostępnia bazę danych używaną do hostowania mapy fragmentów iSHARD_MAP_NAME
jest używana dla samej mapy fragmentów. -
<remote_server_name>
= docelowa nazwa serwera logicznego dla zapytania elastycznego. Nazwa bazy danych jest określana przy użyciu argumentuDATABASE_NAME
.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat bazy danych nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
- Aby załadować dane z usługi Azure Storage do usługi Azure SQL Database, użyj tokenu sygnatury dostępu współdzielonego (SAS).
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy. - Po utworzeniu
TYPE
=BLOB_STORAGE
poświadczenia należy użyćSHARED ACCESS SIGNATURE
jako tożsamości. - Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem łącznika WASB[s] należy przeprowadzić uwierzytelnianie przy użyciu klucza konta magazynu, a nie sygnatury dostępu współdzielonego (SAS).
- Po
TYPE
=HADOOP
utworzeniu poświadczenia należy użyć klucza konta magazynu jako .SECRET
-
TYPE
=BLOB_STORAGE
jest dozwolone tylko w przypadku operacji zbiorczych; nie można utworzyć tabel zewnętrznych dla zewnętrznego źródła danych za pomocą poleceniaTYPE
=BLOB_STORAGE
.
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
Token SAS można utworzyć, przechodząc do witryny Azure Portal -><Your_Storage_Account> —> Sygnatura dostępu współdzielonego — Konfigurowanie uprawnień —>> Generowanie sygnatury dostępu współdzielonego i parametrów połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
podczas konfigurowania jako KLUCZ TAJNY. - Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) Odczyt, tworzenie i zapisywanie
Aby zapoznać się z przykładem użycia elementu z elementem CREDENTIAL
SHARED ACCESS SIGNATURE
iTYPE
= BLOB_STORAGE
, zobacz Tworzenie zewnętrznego źródła danych w celu wykonywania operacji zbiorczych i pobierania danych z usługi Azure Storage do usługi SQL Database
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
TYPE = * [ BLOB_STORAGE | RDBMS | SHARD_MAP_MANAGER ] *
Określa typ konfigurowanego zewnętrznego źródła danych. Ten parametr nie zawsze jest wymagany i powinien być udostępniany tylko dla niektórych zewnętrznych źródeł danych.
- Służy
RDBMS
do wykonywania zapytań między bazami danych przy użyciu zapytań elastycznych z usługi SQL Database. - Użyj
SHARD_MAP_MANAGER
polecenia podczas tworzenia zewnętrznego źródła danych podczas nawiązywania połączenia z fragmentowaną bazą danych SQL Database. - Użyj elementu
BLOB_STORAGE
do użycia tylko z prefiksemhttps
. W przypadkuabd
iadls
prefiksów nie należy podawaćTYPE
.
Ważne
Nie należy ustawiać TYPE
, jeśli używasz innego zewnętrznego źródła danych.
DATABASE_NAME = database_name
Skonfiguruj ten argument, gdy parametr ma ustawioną TYPE
wartość RDBMS
lub SHARD_MAP_MANAGER
.
TYP | Wartość DATABASE_NAME |
---|---|
RDBMS |
Nazwa zdalnej bazy danych na serwerze podanym przy użyciu polecenia LOCATION |
SHARD_MAP_MANAGER |
Nazwa bazy danych działającej jako menedżer mapy fragmentów |
Przykład pokazujący sposób tworzenia zewnętrznego źródła danych, w którym TYPE = RDBMS
, można znaleźć w artykule Create an RDBMS external data source (Tworzenie zewnętrznego źródła danych RDBMS).
SHARD_MAP_NAME = shard_map_name
Używany, gdy TYPE
argument jest ustawiony SHARD_MAP_MANAGER
na wartość tylko w celu ustawienia nazwy mapy fragmentów.
Przykład pokazujący sposób tworzenia zewnętrznego źródła danych, w którym TYPE
= SHARD_MAP_MANAGER
znajduje się temat Tworzenie zewnętrznego źródła danych menedżera map fragmentów
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w usłudze Azure SQL Database.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Przykłady
Odp. Tworzenie zewnętrznego źródła danych menedżera map fragmentów
Aby utworzyć zewnętrzne źródło danych w celu odwołania SHARD_MAP_MANAGER
się do elementu , określ nazwę serwera usługi SQL Database, który hostuje menedżera map fragmentów w usłudze SQL Database lub bazy danych programu SQL Server na maszynie wirtualnej.
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'
);
Aby zapoznać się z samouczkiem krok po kroku, zobacz Wprowadzenie do elastycznych zapytań dotyczących fragmentowania (partycjonowanie poziome).
B. Tworzenie zewnętrznego źródła danych RDBMS
Aby utworzyć zewnętrzne źródło danych w celu odwołania się do programu RDBMS, określa nazwę serwera usługi SQL Database zdalnego bazy danych w usłudze 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
);
Aby zapoznać się z samouczkiem krok po kroku dotyczącym usługi RDBMS, zobacz Wprowadzenie do zapytań między bazami danych (partycjonowanie pionowe).
Przykłady: operacje zbiorcze
Ważne
Nie należy dodawać końcowych /
parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
C. Tworzenie zewnętrznego źródła danych na potrzeby operacji zbiorczych pobierania danych z usługi Azure Storage
Użyj następującego źródła danych do operacji zbiorczych przy użyciu funkcji BULK INSERT (Transact-SQL) lub OPENROWSET (Transact-SQL). Poświadczenie musi być ustawione SHARED ACCESS SIGNATURE
jako tożsamość, nie może mieć wiodącego w ?
tokenie SYGNATURy dostępu współdzielonego, musi mieć co najmniej uprawnienie do odczytu w pliku, które należy załadować (na przykład srt=o&sp=r
), a okres wygaśnięcia powinien być prawidłowy (wszystkie daty są w czasie UTC). Aby uzyskać więcej informacji na temat sygnatur dostępu współdzielonego, zobacz Używanie sygnatur dostępu współdzielonego (SAS).
Utwórz zewnętrzne źródło danych dla usługi Azure Blob Storage (ABS) przy użyciu tożsamości zarządzanej:
CREATE DATABASE SCOPED CREDENTIAL DSC_MI
WITH IDENTITY = 'Managed Identity'
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateABS
WITH (
LOCATION = 'abs://<container>@<storage_account_name>.blob.core.windows.net/'
,CREDENTIAL = [DSC_MI]);
Utwórz zewnętrzne źródło danych dla usługi Azure Data Lake Gen2 (ADLS) przy użyciu tożsamości użytkownika:
CREATE DATABASE SCOPED CREDENTIAL DSC_ADLS
WITH IDENTITY = 'User Identity'
--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE PrivateADLS
WITH (
LOCATION = 'adls://<container>@<storage_account_name>.dfs.core.windows.net/'
,CREDENTIAL = [DSC_ADLS]);
Aby zobaczyć, jak używać tego przykładu, zobacz WSTAWIANIE ZBIORCZE.
Przykłady: Azure SQL Edge
Ważne
Aby uzyskać informacje na temat konfigurowania danych zewnętrznych dla usługi Azure SQL Edge, zobacz Przesyłanie strumieniowe danych w usłudze Azure SQL Edge.
Odp. Tworzenie zewnętrznego źródła danych w celu odwołania się do platformy Kafka
Dotyczy tylko:Azure SQL Edge
W tym przykładzie zewnętrzne źródło danych to serwer platformy Kafka z adresem IP xxx.xxx.xxx.xxx i nasłuchiwanie na porcie 1900. Zewnętrzne źródło danych platformy Kafka jest przeznaczone tylko do przesyłania strumieniowego danych i nie obsługuje wypychania predykatu.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyKafkaServer
WITH (LOCATION = 'kafka://xxx.xxx.xxx.xxx:1900');
B. Tworzenie zewnętrznego źródła danych w celu odwołania się do usługi EdgeHub
Dotyczy tylko:Azure SQL Edge
W tym przykładzie zewnętrzne źródło danych to usługa EdgeHub uruchomiona na tym samym urządzeniu brzegowym co usługa Azure SQL Edge. Zewnętrzne źródło danych edgeHub jest przeznaczone tylko do przesyłania strumieniowego danych i nie obsługuje wypychania predykatu.
-- Create an External Data Source for Kafka
CREATE EXTERNAL DATA SOURCE MyEdgeHub
WITH (LOCATION = 'edgehub://');
Treści powiązane
* Azure Synapse
Analiza *
Omówienie: Azure Synapse Analytics
Dotyczy: Azure Synapse Analytics
Tworzy zewnętrzne źródło danych na potrzeby wirtualizacji danych. Zewnętrzne źródła danych służą do nawiązywania łączności i obsługi podstawowego przypadku użycia wirtualizacji danych i ładowania danych z zewnętrznych źródeł danych. Aby uzyskać więcej informacji, zobacz Używanie tabel zewnętrznych z usługą Synapse SQL.
Ważne
Aby utworzyć zewnętrzne źródło danych w celu wykonywania zapytań dotyczących zasobu usługi Azure Synapse Analytics przy użyciu usługi Azure SQL Database z elastycznym zapytaniem, zobacz CREATE EXTERNAL DATA SOURCE for Azure SQL Database (TWORZENIE zewnętrznego źródła danych dla usługi Azure SQL Database).
Transact-SQL konwencje składni
Składnia
-
dedykowanej puli SQL
- pula SQL bezserwerowa
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
)
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w usłudze Azure SQL Database w usłudze Azure Synapse Analytics.
LOCATION = "<prefix>://<path>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu |
---|---|---|
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 (Usługa przechowywania bloków Azure) | wasbs |
<container>@<storage_account>.blob.core.windows.net |
Azure Blob Storage (Usługa przechowywania bloków Azure) | https |
<storage_account>.blob.core.windows.net/<container>/subfolders |
Data Lake Storage Gen1 | http[s] |
<storage_account>.azuredatalakestore.net/webhdfs/v1 |
Data Lake Storage Gen2 | http[s] |
<storage_account>.dfs.core.windows.net/<container>/subfolders |
Data Lake Storage Gen2 | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
* Usługa Microsoft Azure Data Lake Storage Gen1 ma ograniczoną obsługę, usługa Gen2 jest zalecana dla wszystkich nowych rozwiązań.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Dedykowane pule SQL: PolyBase | Dedykowane pule SQL: natywne* | Bezserwerowe pule SQL |
---|---|---|---|---|
Data Lake Storage** Gen1 | adl |
Nie. | Nie. | Tak |
Data Lake Storage Gen2 | abfs[s] |
Tak | Tak | Tak |
Azure Blob Storage (Usługa przechowywania bloków Azure) | wasbs |
Tak | Tak*** | Tak |
Azure Blob Storage (Usługa przechowywania bloków Azure) | https |
Nie. | Tak | Tak |
Data Lake Storage Gen1 | http[s] |
Nie. | Nie. | Tak |
Data Lake Storage Gen2 | http[s] |
Tak | Tak | Tak |
Data Lake Storage Gen2 | wasb[s] |
Tak | Tak | Tak |
* Bezserwerowe i dedykowane pule SQL w usłudze Azure Synapse Analytics używają różnych baz kodu na potrzeby wirtualizacji danych. Bezserwerowe pule SQL obsługują natywną technologię wirtualizacji danych. Dedykowane pule SQL obsługują wirtualizację danych natywną i polyBase. Wirtualizacja danych programu PolyBase jest używana podczas tworzenia zewnętrznego źródła danych za pomocą TYPE=HADOOP
.
** Usługa Microsoft Azure Data Lake Storage Gen1 ma ograniczoną obsługę. W przypadku wszystkich nowych programowania zaleca się użycie usługi Gen2.
Bardziej bezpieczny wasbs
łącznik jest zalecany za pośrednictwem wasb
polecenia . Obsługiwana jest tylko natywna wirtualizacja danych w dedykowanych pulach SQL (gdzie typ nie jest wasb
równy usłudze HADOOP).
Ścieżka lokalizacji:
-
<container>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Domyślną opcją jest
enable secure SSL connections
aprowizowanie usługi Azure Data Lake Storage Gen2. Po włączeniu tej opcji należy użyćabfss
opcji bezpiecznego połączenia TLS/SSL, chociażabfss
działa również w przypadku niezabezpieczonych połączeń TLS. Aby uzyskać więcej informacji, zobacz Sterownik systemu plików obiektów blob platformy Azure (ABFS). - Usługa Azure Synapse nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Użyj tego samego zewnętrznego źródła danych dla wszystkich tabel podczas wykonywania zapytań w usłudze Hadoop, aby zapewnić spójność semantyki zapytań.
-
https:
prefiks umożliwia używanie podfolderu w ścieżce.https
nie jest dostępna dla wszystkich metod dostępu do danych. -
wasbs
jest zalecane, ponieważ dane będą wysyłane przy użyciu bezpiecznego połączenia TLS. - Hierarchiczne przestrzenie nazw nie są obsługiwane w przypadku kont magazynu platformy Azure w wersji 2 podczas uzyskiwania dostępu do danych przy użyciu starszego
wasb://
interfejsu, ale obsługująwasbs://
hierarchiczne przestrzenie nazw.
CREDENTIAL = credential_name
Opcjonalny. Określa poświadczenie o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych. Zewnętrzne źródło danych bez poświadczeń może uzyskać dostęp do publicznego konta magazynu lub użyć tożsamości firmy Microsoft Entra obiektu wywołującego, aby uzyskać dostęp do plików w usłudze Azure Storage.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
- Aby załadować dane z usługi Azure Storage lub Azure Data Lake Store (ADLS) Gen2 do usługi Azure Synapse Analytics, użyj klucza usługi Azure Storage.
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy.
Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
W bezserwerowej puli SQL poświadczenia o zakresie bazy danych mogą określać tożsamość zarządzaną obszaru roboczego, nazwę główną usługi lub token sygnatury dostępu współdzielonego (SAS). Dostęp za pośrednictwem tożsamości użytkownika, znany również jako przekazywanie firmy Microsoft, jest również możliwy w poświadczeniu o zakresie bazy danych, podobnie jak anonimowy dostęp do publicznie dostępnego magazynu. Aby uzyskać więcej informacji, zobacz Obsługiwane typy autoryzacji magazynu.
W dedykowanej puli SQL poświadczenia o zakresie bazy danych mogą określać token sygnatury dostępu współdzielonego (SAS), klucz dostępu do magazynu, jednostkę usługi, tożsamość zarządzaną obszaru roboczego lub przekazywanie usługi Microsoft Entra.
TYPE = HADOOP
Opcjonalne, niezalecane.
Można określić tylko typ z dedykowanymi pulami SQL.
HADOOP
jest jedyną dozwoloną wartością po określeniu. Zewnętrzne źródła danych z usługą TYPE=HADOOP
są dostępne tylko w dedykowanych pulach SQL.
Użyj usługi HADOOP w przypadku starszych implementacji. W przeciwnym razie zaleca się użycie nowszego natywnego dostępu do danych. Nie należy określać argumentu TYPE do używania nowszego natywnego dostępu do danych.
Przykład użycia do TYPE = HADOOP
ładowania danych z usługi Azure Storage można znaleźć w temacie Create external data source to reference Azure Data Lake Store Gen 1 or 2 using a service principal (Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Azure Data Lake Store Gen 1 lub 2 przy użyciu jednostki usługi).
Bezserwerowe i dedykowane pule SQL w usłudze Azure Synapse Analytics używają różnych baz kodu na potrzeby wirtualizacji danych. Bezserwerowe pule SQL obsługują natywną technologię wirtualizacji danych. Dedykowane pule SQL obsługują wirtualizację danych natywną i polyBase. Wirtualizacja danych programu PolyBase jest używana podczas tworzenia zewnętrznego źródła danych za pomocą TYPE=HADOOP
.
Uprawnienia
Wymaga uprawnienia CONTROL
do bazy danych.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Większość zewnętrznych źródeł danych obsługuje uwierzytelnianie oparte na serwerze proxy przy użyciu poświadczeń o zakresie bazy danych w celu utworzenia konta serwera proxy.
Klucze sygnatury dostępu współdzielonego (SAS) są obsługiwane do uwierzytelniania na kontach magazynu usługi Azure Data Lake Store Gen 2. Klienci, którzy chcą uwierzytelnić się przy użyciu sygnatury dostępu współdzielonego, muszą utworzyć poświadczenie w zakresie bazy danych, gdzie IDENTITY = "Shared Access Signature"
i wprowadzić token SAS jako wpis tajny.
Jeśli utworzysz poświadczenie o zakresie bazy danych, gdzie IDENTITY = "Shared Access Signature"
i użyjesz wartości klucza magazynu jako wpisu tajnego, zostanie wyświetlony następujący komunikat o błędzie:
'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]'
Przykłady
Odp. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://
W tym przykładzie zewnętrzne źródło danych to konto usługi Azure Storage w wersji 2 o nazwie logs
. Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Storage służy tylko do transferu danych. Nie obsługuje predykatu push-down. Hierarchiczne przestrzenie nazw nie są obsługiwane podczas uzyskiwania dostępu do danych za pośrednictwem interfejsu wasb://
. Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasb
uwierzytelnianie musi odbywać się przy użyciu wasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS).
W tym przykładzie użyto starszej metody dostępu opartej na języku Java usługi HADOOP. W poniższym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania w usłudze Azure Storage. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze 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. Tworzenie zewnętrznego źródła danych w celu odwołowania się do usługi Azure Data Lake Store Gen 1 lub 2 przy użyciu jednostki usługi
Łączność usługi Azure Data Lake Store może być oparta na identyfikatorze URI usługi ADLS i jednostce usługi aplikacji Microsoft Entra. Dokumentację dotyczącą tworzenia tej aplikacji można znaleźć w artykule Uwierzytelnianie w usłudze Data Lake Store przy użyciu identyfikatora Entra firmy Microsoft.
-- 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do usługi Azure Data Lake Store Gen2 przy użyciu klucza konta magazynu
-- 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. Tworzenie zewnętrznego źródła danych w usłudze Azure Data Lake Store Gen2 przy użyciu abfs://
Nie ma potrzeby określania klucza TAJNEgo podczas nawiązywania połączenia z kontem usługi Azure Data Lake Store Gen2 za pomocą mechanizmu tożsamości zarządzanej .
-- 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
);
Treści powiązane
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- CREATE EXTERNAL FILE FORMAT (Transact-SQL)
- UTWÓRZ TABELĘ ZEWNĘTRZNĄ (Transact-SQL)
- CREATE EXTERNAL TABLE AS SELECT (Azure Synapse Analytics)
- CREATE TABLE AS SELECT (Azure Synapse Analytics)
- sys.external_data_sources (Transact-SQL)
- Używanie sygnatur dostępu współdzielonego (SAS)
Azure Synapse
analizy
* Analiza
System platformy (PDW) *
Omówienie: System platformy analizy
Dotyczy: Analytics Platform System (PDW)
Tworzy zewnętrzne źródło danych dla zapytań PolyBase. Zewnętrzne źródła danych służą do nawiązywania łączności i obsługi następującego przypadku użycia: wirtualizacja danych i ładowanie danych przy użyciu wirtualizacji danych z technologią PolyBase w programie SQL Server.
Transact-SQL konwencje składni
Składnia
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
[ [ , ] TYPE = HADOOP ]
[ [ , ] RESOURCE_MANAGER_LOCATION = '<resource_manager>[:<port>]' )
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa na serwerze w systemie platformy analizy (PDW).
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji łącznika | Ścieżka dostępu |
---|---|---|
Cloudera CDH lub Hortonworks HDP | hdfs |
<Namenode>[:port] |
Konto magazynu platformy Azure | wasb[s] |
<container>@<storage_account>.blob.core.windows.net |
Ścieżka lokalizacji:
-
<Namenode>
= nazwa maszyny, identyfikator URI usługi nazw lub adresNamenode
IP klastra Hadoop. Program PolyBase musi rozpoznać wszystkie nazwy DNS używane przez klaster Hadoop. -
port
= port, na który nasłuchuje zewnętrzne źródło danych. W usłudze Hadoop port można znaleźć przy użyciu parametrufs.defaultFS
konfiguracji. Wartość domyślna to 8020. -
<container>
= kontener konta magazynu zawierającego dane. Kontenery główne są tylko do odczytu, dlatego nie można zapisywać danych z powrotem do kontenera. -
<storage_account>
= nazwa konta magazynu zasobu platformy Azure.
Dodatkowe uwagi i wskazówki dotyczące ustawiania lokalizacji:
- Aparat PDW nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
- Użyj tego samego zewnętrznego źródła danych dla wszystkich tabel podczas wykonywania zapytań w usłudze Hadoop, aby zapewnić spójność semantyki zapytań.
-
wasbs
jest zalecane, ponieważ dane będą wysyłane przy użyciu bezpiecznego połączenia TLS. - Hierarchiczne przestrzenie nazw nie są obsługiwane w przypadku użycia z kontami usługi Azure Storage za pośrednictwem wasb://.
- Aby zapewnić pomyślne wykonywanie zapytań polyBase podczas przełączania w tryb failover w usłudze Hadoop
Namenode
, rozważ użycie wirtualnego adresu IP klastraNamenode
Hadoop. Jeśli tego nie zrobisz, wykonaj polecenie ALTER EXTERNAL DATA SOURCE , aby wskazać nową lokalizację.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
- Aby załadować dane z usługi Azure Storage do usługi Azure Synapse lub PDW, użyj klucza usługi Azure Storage.
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy.
TYPE = * [ HADOOP ] *
Określa typ konfigurowanego zewnętrznego źródła danych. Ten parametr nie zawsze jest wymagany.
- Użyj usługi HADOOP, gdy zewnętrzne źródło danych to Cloudera CDH, Hortonworks HDP lub Azure Storage.
Przykład użycia do TYPE
= HADOOP
ładowania danych z usługi Azure Storage można znaleźć w temacie Create external data source to reference Hadoop (Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop).
RESOURCE_MANAGER_LOCATION = 'ResourceManager_URI[:p ort]"
W programie SQL Server 2019 (15.x) nie należy określać RESOURCE_MANAGER_LOCATION, chyba że nawiąż połączenie z usługą Cloudera CDH, Hortonworks HDP, kontem usługi Azure Storage.
Skonfiguruj tę opcjonalną wartość podczas nawiązywania połączenia z usługą Cloudera CDH, Hortonworks HDP lub tylko kontem usługi Azure Storage. Aby uzyskać pełną listę obsługiwanych wersji usługi Hadoop, zobacz Konfiguracja łączności programu PolyBase (Transact-SQL).
Po zdefiniowaniu RESOURCE_MANAGER_LOCATION
elementu optymalizator zapytań podejmuje decyzję opartą na kosztach w celu poprawy wydajności. Zadanie MapReduce może służyć do wypychania obliczeń do usługi Hadoop. Określenie RESOURCE_MANAGER_LOCATION
elementu może znacząco zmniejszyć ilość danych przesyłanych między usługą Hadoop i bazą danych SQL, co może prowadzić do zwiększenia wydajności zapytań.
Jeśli usługa Resource Manager nie jest określona, wypychanie zasobów obliczeniowych do usługi Hadoop jest wyłączone dla zapytań polyBase. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop z włączonym wypycheniem zawiera konkretny przykład i dalsze wskazówki.
Wartość RESOURCE_MANAGER_LOCATION nie jest weryfikowana podczas tworzenia zewnętrznego źródła danych. Wprowadzenie nieprawidłowej wartości może spowodować niepowodzenie zapytania w czasie wykonywania, gdy próba wypchnięcia w dół zostanie podjęta, ponieważ podana wartość nie będzie mogła rozwiązać problemu.
Aby program PolyBase działał poprawnie z zewnętrznym źródłem danych usługi Hadoop, porty dla następujących składników klastra Hadoop muszą być otwarte:
- Porty systemu plików HDFS
- Węzeł nazw
- Węzeł danych
- Resource Manager
- Przesyłanie zadania
- Historia zadania
Jeśli port nie zostanie określony, wartość domyślna zostanie wybrana przy użyciu bieżącego ustawienia dla konfiguracji "łączność hadoop".
Łączność z usługą Hadoop | Domyślny port usługi Resource Manager |
---|---|
1 |
50300 |
2 |
50300 |
3 |
8021 |
4 |
8032 |
5 |
8050 |
6 |
8032 |
7 |
8050 |
W poniższej tabeli przedstawiono domyślne porty dla tych składników. Istnieje zależność wersji usługi Hadoop, a także możliwość konfiguracji niestandardowej, która nie używa domyślnego przypisania portu.
Składnik klastra Hadoop | Port domyślny |
---|---|
Węzeł nazw | 8020 |
DataNode (transfer danych, port IPC bez uprawnień) | 50010 |
DataNode (transfer danych, uprzywilejowany port IPC) | 1019 |
Przesyłanie zadania usługi Resource Manager (Hortonworks 1.3) | 50300 |
Przesyłanie zadań usługi Resource Manager (Cloudera 4.3) | 8021 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.0 w systemie Windows, Cloudera 5.x w systemie Linux) | 8032 |
Przesyłanie zadań usługi Resource Manager (Hortonworks 2.x, 3.0 w systemie Linux, Hortonworks 2.1-3 w systemie Windows) | 8050 |
Historia zadań usługi Resource Manager | 10020 |
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w systemie platformy analizy (PDW).
Uwaga / Notatka
W poprzednich wersjach pdW utwórz wymagane ALTER ANY EXTERNAL DATA SOURCE
uprawnienia zewnętrznego źródła danych.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Bezpieczeństwo
Technologia PolyBase obsługuje uwierzytelnianie oparte na serwerze proxy dla większości zewnętrznych źródeł danych. Utwórz poświadczenie o zakresie bazy danych, aby utworzyć konto serwera proxy.
Token SAS z typem HADOOP
nie jest obsługiwany. Jest obsługiwana tylko z typem = BLOB_STORAGE
w przypadku użycia klucza dostępu do konta magazynu. Próba utworzenia zewnętrznego źródła danych z typem HADOOP
i poświadczenie sygnatury dostępu współdzielonego kończy się niepowodzeniem z powodu następującego błędu:
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.'
Przykłady
Odp. Tworzenie zewnętrznego źródła danych w celu odwołania do usługi Hadoop
Aby utworzyć zewnętrzne źródło danych w celu odwołowania się do usługi Hortonworks HDP lub Cloudera CDH, określ nazwę komputera lub adres IP platformy Hadoop Namenode
i portu.
CREATE EXTERNAL DATA SOURCE MyHadoopCluster
WITH (
LOCATION = 'hdfs://10.10.10.10:8050',
TYPE = HADOOP
);
B. Tworzenie zewnętrznego źródła danych w celu odwołowania się do usługi Hadoop z włączoną funkcją wypychania
Określ opcję włączenia RESOURCE_MANAGER_LOCATION
obliczeń wypychanych do usługi Hadoop dla zapytań PolyBase. Po włączeniu technologii PolyBase podejmuje decyzję opartą na kosztach, aby określić, czy obliczenia zapytań powinny być wypychane do usługi 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. Tworzenie zewnętrznego źródła danych w celu odwołania się do zabezpieczonej przez protokół Kerberos platformy Hadoop
Aby sprawdzić, czy klaster Hadoop jest zabezpieczony za pomocą protokołu Kerberos, sprawdź wartość hadoop.security.authentication
właściwości w usłudze Hadoop core-site.xml. Aby odwołać się do klastra Hadoop zabezpieczonego przy użyciu protokołu Kerberos, należy określić poświadczenie o zakresie bazy danych zawierające nazwę użytkownika i hasło protokołu Kerberos. Klucz główny bazy danych służy do szyfrowania klucza tajnego poświadczeń o określonym zakresie bazy danych.
-- 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. Tworzenie zewnętrznego źródła danych w celu uzyskania dostępu do danych w usłudze Azure Storage przy użyciu interfejsu wasb://
W tym przykładzie zewnętrzne źródło danych to konto usługi Azure V2 Storage o nazwie logs
. Kontener magazynu nosi nazwę daily
. Zewnętrzne źródło danych usługi Azure Storage służy tylko do transferu danych. Nie obsługuje predykatu push-down. Hierarchiczne przestrzenie nazw nie są obsługiwane podczas uzyskiwania dostępu do danych za pośrednictwem interfejsu wasb://
. Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasb
uwierzytelnianie musi odbywać się przy użyciu wasbs
klucza konta magazynu, a nie przy użyciu sygnatury dostępu współdzielonego (SAS).
W tym przykładzie pokazano, jak utworzyć poświadczenia o zakresie bazy danych na potrzeby uwierzytelniania w usłudze Azure Storage. Określ klucz konta usługi Azure Storage w kluczu tajnym poświadczeń bazy danych. Możesz określić dowolny ciąg w tożsamości poświadczeń o zakresie bazy danych, ponieważ nie jest używany podczas uwierzytelniania w usłudze 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
);
Treści powiązane
* SQL Managed Instance *
Azure Synapse
analizy
Omówienie: Azure SQL Managed Instance
Dotyczy: Azure SQL Managed Instance
Tworzy zewnętrzne źródło danych w usłudze Azure SQL Managed Instance. Aby uzyskać pełne informacje, zobacz Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance.
Wirtualizacja danych w usłudze Azure SQL Managed Instance zapewnia dostęp do danych zewnętrznych w różnych formatach plików za pośrednictwem funkcji OPENROWSET lub CREATE EXTERNAL TABLE.
Transact-SQL konwencje składni
Składnia
CREATE EXTERNAL DATA SOURCE <data_source_name>
WITH
( [ LOCATION = '<prefix>://<path>[:<port>]' ]
[ [ , ] CREDENTIAL = <credential_name> ]
)
[ ; ]
Argumenty (w programowaniu)
data_source_name
Określa nazwę zdefiniowaną przez użytkownika dla źródła danych. Nazwa musi być unikatowa w bazie danych.
LOCATION = "<prefix>://<path[:p ort]>"
Udostępnia protokół łączności i ścieżkę do zewnętrznego źródła danych.
Zewnętrzne źródło danych | Prefiks lokalizacji | Ścieżka dostępu |
---|---|---|
Azure Blob Storage (Usługa przechowywania bloków Azure) | abs |
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name> |
Azure Data Lake Service Gen2 | adls |
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name> |
Aparat bazy danych nie weryfikuje istnienia zewnętrznego źródła danych podczas tworzenia obiektu. Aby sprawdzić poprawność, utwórz tabelę zewnętrzną przy użyciu zewnętrznego źródła danych.
Nie należy dodawać końcowych /parametrów , nazwy pliku lub sygnatury dostępu współdzielonego na końcu LOCATION
adresu URL podczas konfigurowania zewnętrznego źródła danych na potrzeby operacji zbiorczych.
CREDENTIAL = credential_name
Określa poświadczenia o zakresie bazy danych do uwierzytelniania w zewnętrznym źródle danych.
Dodatkowe uwagi i wskazówki dotyczące tworzenia poświadczeń:
- Aby załadować dane z usługi Azure Storage do usługi Azure SQL Managed Instance, użyj sygnatury dostępu współdzielonego (tokenu SAS).
-
CREDENTIAL
jest wymagany tylko wtedy, gdy dane zostały zabezpieczone.CREDENTIAL
nie jest wymagany w przypadku zestawów danych, które zezwalają na dostęp anonimowy. - Jeśli wymagane jest poświadczenie, należy utworzyć poświadczenie przy użyciu lub
Managed Identity
SHARED ACCESS SIGNATURE
jako TOŻSAMOŚĆ. Aby utworzyć poświadczenie o zakresie bazy danych, zobacz CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
Aby użyć tożsamości usługi zarządzanej dla poświadczeń o zakresie bazy danych:
Precyzować
WITH IDENTITY = 'Managed Identity'
Użyj przypisanej przez system tożsamości usługi zarządzanej usługi Azure SQL Managed Instance, która musi być włączona, jeśli ma być używana w tym celu.
- Udziel roli Czytelnik kontroli dostępu opartej na rolach platformy Azure tożsamości usługi zarządzanej przypisanej przez system do usługi Azure SQL Managed Instance do niezbędnych kontenerów usługi Azure Blob Storage. Na przykład za pośrednictwem witryny Azure Portal zobacz Przypisywanie ról platformy Azure przy użyciu witryny Azure Portal.
Aby utworzyć sygnaturę dostępu współdzielonego (SAS) dla poświadczeń o zakresie bazy danych:
Precyzować
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = ...
Istnieje wiele sposobów tworzenia sygnatury dostępu współdzielonego:
- Token SAS można uzyskać, przechodząc do witryny Azure Portal —><Your_Storage_Account> —> Sygnatura dostępu współdzielonego — Konfigurowanie uprawnień —>> Generowanie sygnatury dostępu współdzielonego i parametrów połączenia. Aby uzyskać więcej informacji, zobacz Generowanie sygnatury dostępu współdzielonego.
- Sygnaturę dostępu współdzielonego można utworzyć i skonfigurować za pomocą Eksploratora usługi Azure Storage.
- Token SAS można utworzyć programowo za pomocą programu PowerShell, interfejsu wiersza polecenia platformy Azure, platformy .NET i interfejsu API REST. Aby uzyskać więcej informacji, zobacz Udzielanie ograniczonego dostępu do zasobów usługi Azure Storage przy użyciu sygnatur dostępu współdzielonego (SAS).
Token SAS należy skonfigurować w następujący sposób:
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
?
podczas konfigurowania jako KLUCZ TAJNY. - Użyj prawidłowego okresu wygaśnięcia (wszystkie daty są w czasie UTC).
- Po wygenerowaniu tokenu SAS zawiera on znak zapytania ('?') na początku tokenu. Wyklucz wiodące
Przyznaj co najmniej uprawnienie do odczytu w pliku, który powinien zostać załadowany (na przykład
srt=o&sp=r
). Dla różnych przypadków użycia można utworzyć wiele sygnatur dostępu współdzielonego. Uprawnienia powinny być przyznawane w następujący sposób:Akcja Pozwolenie Odczytywanie danych z pliku Przeczytaj Odczytywanie danych z wielu plików i podfolderów Przeczytaj i wymień Użyj pozycji Utwórz tabelę zewnętrzną jako wybierz (CETAS) Odczyt, tworzenie i zapisywanie
Uprawnienia
Wymaga CONTROL
uprawnień do bazy danych w usłudze Azure SQL Managed Instance.
Blokowanie
Pobiera udostępnioną blokadę obiektu EXTERNAL DATA SOURCE
.
Przykłady
Aby uzyskać więcej przykładów, zobacz Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance.
Odp. Wykonywanie zapytań dotyczących danych zewnętrznych z usługi Azure SQL Managed Instance przy użyciu funkcji OPENROWSET lub tabeli zewnętrznej
Aby uzyskać więcej przykładów, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL) lub zobacz Wirtualizacja danych za pomocą usługi Azure SQL Managed Instance.
Utwórz klucz główny bazy danych, jeśli nie istnieje.
-- Optional: Create MASTER KEY if it doesn't exist in the database: CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Strong Password>' GO
Utwórz poświadczenie o zakresie bazy danych przy użyciu tokenu SAS. Możesz również użyć tożsamości zarządzanej.
CREATE DATABASE SCOPED CREDENTIAL MyCredential WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<KEY>' ; --Removing leading '?' GO
Utwórz zewnętrzne źródło danych przy użyciu poświadczeń.
--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] );
Wykonywanie zapytań względem pliku danych parquet w zewnętrznym źródle danych przy użyciu składni T-SQL OPENROWSET, korzystając z wnioskowania schematu, aby szybko eksplorować dane bez znajomości schematu.
--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;
Możesz też wykonywać zapytania o dane przy użyciu klauzuli OPENROWSET WITH, zamiast polegać na wnioskowaniu schematu, co może spowodować koszt wykonywania zapytań. W pliku CSV wnioskowanie schematu nie jest obsługiwane.
--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;
Możesz też utworzyć format PLIKU ZEWNĘTRZNEgo i tabelę zewnętrzną, aby wysyłać zapytania o dane jako tabelę lokalną.
-- 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