Udostępnij za pośrednictwem


CREATE EXTERNAL DATA SOURCE (Transact-SQL)

Dotyczy: SQL Server 2016 (13.x) i nowszych Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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 *  

 

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 INSERTOPENROWSET

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 adres Namenode 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 parametru fs.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 klastra Namenode 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 wasbuwierzytelnianie 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
);

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 INSERTOPENROWSET

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 adres Namenode 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 parametru fs.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ą polecenia ODBC.
  • 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 klastra Namenode 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_STORAGEpoś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ą polecenia TYPE = BLOB_STORAGE.
  • Podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem programu lub wasbuwierzytelnianie musi odbywać się przy użyciu wasbs 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).
  • 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 CREDENTIALSHARED 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żyj HADOOP 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 wasbuwierzytelnianie 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.

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 INSERTOPENROWSET

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 adres Namenode 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 parametru fs.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ą polecenia ODBC.
  • Używanie wasbs lub abfss 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 lub abfss 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 klastra Namenode Hadoop. Jeśli tego nie zrobisz, wykonaj polecenie ALTER EXTERNAL DATA SOURCE , aby wskazać nową lokalizację.
  • Typy sqlhdfs i sqldatapool 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 polecenia hdfs. Aby uzyskać więcej informacji na temat używania sqlhdfs 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ącego tnsnames.ora się na serwerze Oracle.
  • Słowo kluczowe ServerName określa alias używany w obiekcie tnsnames.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_STORAGEpoś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ą polecenia TYPE = 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).
  • 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 CREDENTIALSHARED 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żyj HADOOP 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 ServerNameprogram .

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 wasbuwierzytelnianie 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_OPTIONSpliku 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.serverssystemu . 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 logsusł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
);

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 INSERTOPENROWSET

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ą polecenia ODBC.
  • 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] na abs.
  • 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] na adls.
  • 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) lub abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Usługa Azure Data Lake Gen2 obsługuje: adls://<container>@<storage_account_name>.blob.core.windows.net (zalecane) lub adls://<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ącego tnsnames.ora się na serwerze Oracle.
  • Słowo kluczowe ServerName określa alias używany w obiekcie tnsnames.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ń:

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).
  • 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 typy zasobów: Container i Object 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 = HADOOPmetody 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 ServerNameprogram .

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

  1. Przejdź do witryny Azure Portal i odpowiedniego konta magazynu.

  2. Przejdź do żądanego kontenera w menu Magazyn danych .

  3. Wybierz pozycję Tokeny dostępu współdzielonego.

  4. 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
  5. Wybierz datę wygaśnięcia tokenu.

  6. Generowanie tokenu sygnatury dostępu współdzielonego i adresu URL.

  7. 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 wasbwartość , 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,
);

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:

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ą polecenia ODBC.

  • 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] na abs

  • prefiks używany dla usługi Azure Data Lake Storage Gen2 został zmieniony z abfs[s] na adls

  • 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) lub abs://<storage_account_name>.blob.core.windows.net/<container>.
  • Usługa Azure Data Lake Gen2 obsługuje: adls://<container>@<storage_account_name>.blob.core.windows.net (zalecane) lub adls://<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ącego tnsnames.ora się na serwerze Oracle.
  • Słowo kluczowe ServerName określa alias używany w obiekcie tnsnames.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 , HostnameInCertificatemoż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 TrustServerCertificateprogramu , 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ń:

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 typy zasobów: Container i Object 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 = HADOOPpolecenia 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 ServerNameprogram .

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

  1. Przejdź do witryny Azure Portal i odpowiedniego konta magazynu.
  2. Przejdź do żądanego kontenera w menu Magazyn danych .
  3. Wybierz pozycję Tokeny dostępu współdzielonego.
  4. 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
  1. Wybierz datę wygaśnięcia tokenu.
  2. Generowanie tokenu sygnatury dostępu współdzielonego i adresu URL.
  3. 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 wasbwartość , 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 58137i jest wystąpieniem domyślnym. Encryption=StrictOkreś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
);

* SQL Database *  

 

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:

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. Argument DATABASE_NAME udostępnia bazę danych używaną do hostowania mapy fragmentów i SHARD_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 argumentu DATABASE_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_STORAGEpoś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ą polecenia TYPE = 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).
  • 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 CREDENTIALSHARED 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 prefiksem https . W przypadku abd i adls 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_MANAGERsię 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://');

* 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

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 wasbpolecenia . Obsługiwana jest tylko natywna wirtualizacja danych w dedykowanych pulach SQL (gdzie typ nie jest wasbró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 wasbuwierzytelnianie 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
);

* 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 adres Namenode 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 parametru fs.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 klastra Namenode 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 wasbuwierzytelnianie 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
);

* SQL Managed Instance *  

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

  1. 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
    
  2. 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
    
  3. 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]
    );
    
  4. 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;
    
  5. 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;
    
  6. 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