Udostępnij za pośrednictwem


Konfigurowanie programu PolyBase w celu uzyskiwania dostępu do danych zewnętrznych w usłudze Azure Blob Storage

Dotyczy: SQL Server (tylko system Windows) Nieobsługiwane. usługa Azure SQL Database nieobsługiwana. usługa Azure Synapse Analytics nieobsługiwana. Analytics Platform System (PDW)

W tym artykule wyjaśniono, jak używać technologii PolyBase w wystąpieniu programu SQL Server do wykonywania zapytań dotyczących danych zewnętrznych w usłudze Azure Blob Storage.

Warunki wstępne

Jeśli nie zainstalowano programu PolyBase, zobacz instalacja programu PolyBase. W artykule dotyczącym instalacji wyjaśniono wymagania wstępne.

SQL Server 2022

W programie SQL Server 2022 (16.x) skonfiguruj zewnętrzne źródła danych do używania nowych łączników podczas nawiązywania połączenia z usługą Azure Storage. Poniższa tabela zawiera podsumowanie zmian:

Zewnętrzne źródło danych Z Do
Azure Blob Storage wasb[s] Mięśnie brzucha
ADLS Gen 2 abfs[s] adls

Konfigurowanie łączności usługi Azure Blob Storage

Najpierw skonfiguruj program SQL Server PolyBase do korzystania z usługi Azure Blob Storage.

  1. Uruchom sp_configure, ustawiając 'łączność hadoop' z dostawcą Azure Blob Storage. Aby znaleźć wartość dla dostawców, zobacz Konfigurację łączności PolyBase. Domyślnie łączność z usługą Hadoop jest ustawiona na 7.

    -- Values map to various external data sources.  
    -- Example: value 7 stands for Hortonworks HDP 2.1 to 2.6 on Linux,
    -- 2.1 to 2.3 on Windows Server, and Azure Blob Storage  
    sp_configure @configname = 'hadoop connectivity', @configvalue = 7;
    GO
    
    RECONFIGURE
    GO
    
  2. Uruchom ponownie program SQL Server przy użyciu services.msc. Ponowne uruchomienie programu SQL Server powoduje ponowne uruchomienie tych usług:

    • Usługa przenoszenia danych programu SQL Server PolyBase
    • Aparat programu SQL Server PolyBase

    zatrzymać i uruchomić usługi PolyBase w pliku services.msc

  1. Uruchom ponownie program SQL Server przy użyciu services.msc. Ponowne uruchomienie programu SQL Server powoduje ponowne uruchomienie tych usług:

    • Usługa przenoszenia danych programu SQL Server PolyBase
    • Aparat programu SQL Server PolyBase

    zatrzymać i uruchomić usługi PolyBase w pliku services.msc

Konfigurowanie tabeli zewnętrznej

Aby wykonać zapytanie dotyczące danych w źródle danych usługi Hadoop, należy zdefiniować tabelę zewnętrzną do użycia w zapytaniach Transact-SQL. W poniższych krokach opisano sposób konfigurowania tabeli zewnętrznej.

  1. Utwórz klucz główny w bazie danych. Klucz główny jest wymagany do szyfrowania tajemnicy poświadczenia.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Utwórz poświadczenie powiązane z zakresem bazy danych dla usługi Azure Blob Storage; IDENTITY może być dowolne, ponieważ nie jest używane.

    -- IDENTITY: any string (this is not used for authentication to Azure storage).  
    -- SECRET: your Azure storage account key.  
    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH IDENTITY = 'user', Secret = '<azure_storage_account_key>';
    
  3. Utwórz zewnętrzne źródło danych za pomocą CREATE EXTERNAL DATA SOURCE. Należy pamiętać, że 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 przy użyciu sygnatury dostępu współdzielonego (SAS).

    -- LOCATION:  Azure account storage account name and blob container name.  
    -- CREDENTIAL: The database scoped credential created above.  
    CREATE EXTERNAL DATA SOURCE AzureStorage with (  
          TYPE = HADOOP,
          LOCATION ='wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net',  
          CREDENTIAL = AzureStorageCredential  
    );  
    
  4. Utwórz format pliku zewnętrznego za pomocą CREATE EXTERNAL FILE FORMAT.

    -- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT,  RCFILE, ORC, PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
          FORMAT_TYPE = DELIMITEDTEXT,
          FORMAT_OPTIONS (FIELD_TERMINATOR ='|',
                USE_TYPE_DEFAULT = TRUE))  
    
  5. Utwórz tabelę zewnętrzną wskazującą dane przechowywane w usłudze Azure Storage za pomocą CREATE EXTERNAL TABLE. W tym przykładzie dane zewnętrzne zawierają dane z czujników samochodowych; LOCATION nie może być /, ale /Demo/, jak pokazano w tym przykładzie, nie musi wcześniej istnieć.

    -- LOCATION: path to file or directory that contains the data (relative to HDFS root).  
    CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] (  
          [SensorKey] int NOT NULL,
          [CustomerKey] int NOT NULL,
          [GeographyKey] int NULL,
          [Speed] float NOT NULL,
          [YearMeasured] int NOT NULL  
    )  
    WITH (LOCATION='/Demo/',
          DATA_SOURCE = AzureStorage,  
          FILE_FORMAT = TextFileFormat  
    );  
    
  6. Utwórz statystyki dotyczące tabeli zewnętrznej.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    
  1. Utwórz klucz główny w bazie danych. Klucz główny jest wymagany do szyfrowania tajemnicy poświadczenia.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Tworzenie poświadczeń o zakresie bazy danych dla usługi Azure Blob Storage za pomocą sygnatury dostępu współdzielonego (SAS); IDENTITY może być dowolna, ponieważ nie jest używana.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH
    IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>' ;
    
  3. Utwórz zewnętrzne źródło danych za pomocą CREATE EXTERNAL DATA SOURCE. Należy pamiętać, że podczas nawiązywania połączenia z usługą Azure Storage za pośrednictwem łącznika WASB wymagane jest uwierzytelnianie za pomocą sygnatury dostępu współdzielonego (SAS).

    -- LOCATION:  Azure account storage account name and blob container name.  
    -- CREDENTIAL: The database scoped credential created above.  
    CREATE EXTERNAL DATA SOURCE AzureStorage with (  
          LOCATION ='wasbs://<blob_container_name>@<azure_storage_account_name>.blob.core.windows.net',  
          CREDENTIAL = AzureStorageCredential  
    );  
    
  4. Utwórz format pliku zewnętrznego za pomocą CREATE EXTERNAL FILE FORMAT.

    -- FORMAT TYPE: Type of format in Hadoop (DELIMITEDTEXT,  RCFILE, ORC, PARQUET).
    CREATE EXTERNAL FILE FORMAT TextFileFormat WITH (  
          FORMAT_TYPE = DELIMITEDTEXT,
          FORMAT_OPTIONS (FIELD_TERMINATOR ='|',
                USE_TYPE_DEFAULT = TRUE))  
    
  5. Utwórz tabelę zewnętrzną wskazującą dane przechowywane w usłudze Azure Storage za pomocą CREATE EXTERNAL TABLE. W tym przykładzie dane zewnętrzne zawierają dane z czujników samochodowych, LOCATION nie może być /, ale /Demo/ jak w tym przykładzie, nie musi istnieć wcześniej.

    -- LOCATION: path to file or directory that contains the data (relative to HDFS root).  
    CREATE EXTERNAL TABLE [dbo].[CarSensor_Data] (  
          [SensorKey] int NOT NULL,
          [CustomerKey] int NOT NULL,
          [GeographyKey] int NULL,
          [Speed] float NOT NULL,
          [YearMeasured] int NOT NULL  
    )  
    WITH (LOCATION='/Demo/',
          DATA_SOURCE = AzureStorage,  
          FILE_FORMAT = TextFileFormat  
    );  
    
  6. Utwórz statystyki na tabeli zewnętrznej.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

Zapytania programu PolyBase

Istnieją trzy funkcje, dla których technologia PolyBase jest odpowiednia:

  • Zapytania ad hoc względem tabel zewnętrznych.
  • Importowanie danych.
  • Eksportowanie danych.

Poniższe zapytania zawierają przykład fikcyjnych danych z czujników samochodów.

Zapytania ad hoc

Następujące zapytanie ad hoc łączy dane relacyjne z danymi Hadoop. Wybiera klientów, którzy jeżdżą szybciej niż 35 mph, i dołącza do ustrukturyzowanych danych klientów przechowywanych w programie SQL Server z danymi czujnika samochodu przechowywanymi w usłudze Hadoop.

SELECT DISTINCT Insured_Customers.FirstName,Insured_Customers.LastName,
       Insured_Customers. YearlyIncome, CarSensor_Data.Speed  
FROM Insured_Customers, CarSensor_Data  
WHERE Insured_Customers.CustomerKey = CarSensor_Data.CustomerKey and CarSensor_Data.Speed > 35
ORDER BY CarSensor_Data.Speed DESC  
OPTION (FORCE EXTERNALPUSHDOWN);   -- or OPTION (DISABLE EXTERNALPUSHDOWN)  

Importowanie danych za pomocą technologii PolyBase

Poniższe zapytanie importuje dane zewnętrzne do programu SQL Server. W tym przykładzie importuje dane dla szybkich sterowników do programu SQL Server w celu przeprowadzenia bardziej szczegółowej analizy. Aby zwiększyć wydajność, wykorzystuje technologię kolumnowej bazy danych.

SELECT DISTINCT
      Insured_Customers.FirstName, Insured_Customers.LastName,   
      Insured_Customers.YearlyIncome, Insured_Customers.MaritalStatus  
INTO Fast_Customers from Insured_Customers INNER JOIN   
(  
      SELECT * FROM CarSensor_Data where Speed > 35   
) AS SensorD  
ON Insured_Customers.CustomerKey = SensorD.CustomerKey  
ORDER BY YearlyIncome  
  
CREATE CLUSTERED COLUMNSTORE INDEX CCI_FastCustomers ON Fast_Customers;  

Eksportowanie danych za pomocą technologii PolyBase

Poniższe zapytanie eksportuje dane z programu SQL Server do usługi Azure Blob Storage. Najpierw włącz eksport za pomocą PolyBase. Następnie utwórz tabelę zewnętrzną dla miejsca docelowego przed wyeksportowaniem do niej danych.

-- Enable INSERT into external table  
sp_configure 'allow polybase export', 1;  
reconfigure  
  
-- Create an external table.
CREATE EXTERNAL TABLE [dbo].[FastCustomers2009] (  
      [FirstName] char(25) NOT NULL,
      [LastName] char(25) NOT NULL,
      [YearlyIncome] float NULL,
      [MaritalStatus] char(1) NOT NULL  
)  
WITH (  
      LOCATION='/old_data/2009/customerdata',  
      DATA_SOURCE = HadoopHDP2,  
      FILE_FORMAT = TextFileFormat,  
      REJECT_TYPE = VALUE,  
      REJECT_VALUE = 0  
);  

-- Export data: Move old data to Hadoop while keeping it query-able via an external table.  
INSERT INTO dbo.FastCustomer2009  
SELECT T.* FROM Insured_Customers T1 JOIN CarSensor_Data T2  
ON (T1.CustomerKey = T2.CustomerKey)  
WHERE T2.YearMeasured = 2009 and T2.Speed > 40;  

Eksportowanie programu PolyBase za pomocą tej metody może spowodować utworzenie wielu plików.

Wyświetlanie obiektów PolyBase w programie SSMS

W programie SSMS tabele zewnętrzne są wyświetlane w osobnym folderze Tabele zewnętrzne. Zewnętrzne źródła danych i zewnętrzne formaty plików znajdują się w podfolderach pod Zasoby Zewnętrzne.

obiekty PolyBase w programie SSMS

Następne kroki

Aby uzyskać więcej samouczków dotyczących tworzenia zewnętrznych źródeł danych i tabel zewnętrznych w różnych źródłach danych, odwołaj się do referencji PolyBase Transact-SQL.

Zapoznaj się z dodatkowymi sposobami używania i monitorowania technologii PolyBase w następujących artykułach: