Dela via


Konfigurera PolyBase för åtkomst till externa data i Azure Blob Storage

gäller för: SQL Server (endast Windows) Stöds inte. Azure SQL Database Stöds inte. Azure Synapse Analytics Stöds inte. Analytics Platform System (PDW)

Artikeln beskriver hur du använder PolyBase på en SQL Server-instans för att fråga externa data i Azure Blob Storage.

Förutsättningar

Om du inte har installerat PolyBase kan du läsa PolyBase-installation. Installationsartikeln förklarar kraven.

SQL Server 2022

I SQL Server 2022 (16.x) konfigurerar du dina externa datakällor så att de använder nya anslutningsappar när du ansluter till Azure Storage. Tabellen nedan sammanfattar ändringen:

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

Konfigurera Azure Blob Storage-anslutning

Konfigurera först SQL Server PolyBase att använda Azure Blob Storage.

  1. Kör sp_configure med hadoop-anslutning inställd på en Azure Blob Storage-provider. Information om hur du hittar värdet för providers finns i PolyBase Connectivity Configuration. Som standard är Hadoop-anslutningen inställd på 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. Starta om SQL Server med hjälp av services.msc. Att starta om SQL Server startar om följande tjänster:

    • SQL Server PolyBase Datatransporttjänst
    • SQL Server PolyBase-motor

    stoppa och starta PolyBase-tjänster i services.msc

  1. Starta om SQL Server med hjälp av services.msc. Genom att starta om SQL Server startas följande tjänster om:

    • SQL Server PolyBase Data Movement Service
    • SQL Server PolyBase-motor

    stoppa och starta om PolyBase-tjänster i services.msc

Konfigurera en extern tabell

Om du vill använda frågor för att hämta data från din Hadoop-datakälla, måste du definiera en extern tabell som ska användas i Transact-SQL-frågor. Följande steg beskriver hur du konfigurerar den externa tabellen.

  1. Skapa en huvudnyckel i databasen. Huvudnyckeln krävs för att kryptera hemligheten för autentiseringsuppgifter.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Skapa en databasomfattande autentiseringsuppgift för Azure Blob Storage. IDENTITY kan vara vad som helst eftersom det inte används.

    -- 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. Skapa en extern datakälla med CREATE EXTERNAL DATA SOURCE. Observera att när du ansluter till Azure Storage via wasb[s]-anslutningsappen måste autentiseringen göras med en lagringskontonyckel, inte med en signatur för delad åtkomst (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. Skapa ett externt filformat med SKAPA EXTERNT FILFORMAT.

    -- 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. Skapa en extern tabell som pekar på data som lagras i Azure Storage med CREATE EXTERNAL TABLE. I det här exemplet innehåller den externa datan bilsensordata; LOCATION kan inte vara /, men /Demo/ behöver inte ha funnits tidigare.

    -- 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. Skapa statistik i en extern tabell.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    
  1. Skapa en huvudnyckel i databasen. Huvudnyckeln krävs för att kryptera hemligheten för autentiseringsuppgifter.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Skapa en databasomfattande autentiseringsuppgift för Azure Blob Storage med hjälp av en signatur för delad åtkomst (SAS); IDENTITY kan vara vad som helst eftersom det inte används.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH
    IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>' ;
    
  3. Skapa en extern datakälla med CREATE EXTERNAL DATA SOURCE. Observera att när du ansluter till Azure Storage via WASB-anslutningsprogrammet, autentisering med en signatur för delad åtkomst (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. Skapa ett externt filformat med SKAPA EXTERNT FILFORMAT.

    -- 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. Skapa en extern tabell som pekar på data som lagras i Azure Storage med CREATE EXTERNAL TABLE. I det här exemplet innehåller den externa datan bilsensordata; LOCATION kan inte vara /, men /Demo/ behöver, i det här exemplet, inte ha funnits tidigare.

    -- 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. Skapa statistik i en extern tabell.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

PolyBase-frågor

Det finns tre funktioner som PolyBase passar för:

  • Ad hoc-frågor mot externa tabeller.
  • Importerar data.
  • Exportera data.

Följande frågor ger exempel med fiktiva bilsensordata.

Ad hoc-frågor

Följande ad hoc-fråga kopplar samman relationella data med Hadoop-data. Den väljer kunder som kör snabbare än 35 mph och ansluter till strukturerade kunddata som lagras i SQL Server med bilsensordata som lagras i 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)  

Importera data med PolyBase

Följande fråga importerar externa data till SQL Server. Det här exemplet importerar data för snabba drivrutiner till SQL Server för att göra mer djupgående analys. För att förbättra prestandan utnyttjar den columnstore-teknik.

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;  

Exportera data med PolyBase

Följande fråga exporterar data från SQL Server till Azure Blob Storage. Aktivera först PolyBase-export. Skapa sedan en extern tabell för målet innan du exporterar data till den.

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

PolyBase-export med den här metoden kan skapa flera filer.

Visa PolyBase-objekt i SSMS

I SSMS visas externa tabeller i en separat mapp externa tabeller. Externa datakällor och externa filformat finns i undermappar under externa resurser.

PolyBase-objekt i SSMS-

Nästa steg

Fler handledningar om hur du skapar externa datakällor och externa tabeller för olika datakällor finns i PolyBase Transact-SQL referens.

Utforska fler sätt att använda och övervaka PolyBase i följande artiklar: