Delen via


PolyBase configureren voor toegang tot externe gegevens in Azure Blob Storage

Van toepassing op: SQL Server (alleen Windows) Niet ondersteund. Azure SQL Database Niet ondersteund. Azure Synapse Analytics Niet ondersteund. Analytics Platform System (PDW)

In het artikel wordt uitgelegd hoe u PolyBase op een SQL Server-exemplaar gebruikt om een query uit te voeren op externe gegevens in Azure Blob Storage.

Voorwaarden

Als u PolyBase nog niet hebt geïnstalleerd, raadpleegt u PolyBase-installatie. In het installatieartikel worden de vereisten uitgelegd.

SQL Server 2022

Configureer in SQL Server 2022 (16.x) uw externe gegevensbronnen voor het gebruik van nieuwe connectors wanneer u verbinding maakt met Azure Storage. De onderstaande tabel bevat een overzicht van de wijziging:

Externe gegevensbron Van Aan
Azure Blob Storage wasb[s] ABS
ADLS Gen 2 abfs[s] adls

Azure Blob Storage-connectiviteit configureren

Configureer eerst SQL Server PolyBase voor het gebruik van Azure Blob Storage.

  1. Voer sp_configure uit met hadoop-connectiviteit ingesteld op een Azure Blob Storage-provider. Zie PolyBase-connectiviteitsconfiguratieom de waarde voor providers te vinden. De Hadoop-connectiviteit is standaard ingesteld op 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. Start SQL Server opnieuw met behulp van services.msc. Als u SQL Server opnieuw start, worden deze services opnieuw opgestart:

    • SQL Server PolyBase Data Movement Service
    • SQL Server PolyBase Engine

    PolyBase-services stoppen en starten in services.msc

  1. Start SQL Server opnieuw met behulp van services.msc. Als u SQL Server opnieuw start, worden deze services opnieuw opgestart:

    • SQL Server PolyBase Gegevensverplaatsingsdienst
    • SQL Server PolyBase Engine

    PolyBase-services stoppen en starten vanuit services.msc

Een externe tabel configureren

Als u een query wilt uitvoeren op de gegevens in uw Hadoop-gegevensbron, moet u een externe tabel definiëren die moet worden gebruikt in Transact-SQL query's. In de volgende stappen wordt beschreven hoe u de externe tabel configureert.

  1. Maak een hoofdsleutel in de database. De hoofdsleutel is vereist om het referentiegeheim te versleutelen.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Een databasereferentie maken voor Azure Blob Storage; IDENTITY kan alles zijn omdat deze niet wordt gebruikt.

    -- 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. Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Houd er rekening mee dat bij het maken van verbinding met Azure Storage via de wasb[s]-connector verificatie moet worden uitgevoerd met een opslagaccountsleutel, niet met een Shared Access Signature (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. Maak een externe bestandsindeling met 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. Maak een externe tabel die verwijst naar gegevens die zijn opgeslagen in Azure Storage met CREATE EXTERNAL TABLE. In dit voorbeeld bevatten de externe gegevens autosensorgegevens; LOCATION kan niet / worden, en /Demo/ hoeft, zoals in dit voorbeeld, niet eerder te bestaan.

    -- 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. Statistieken maken voor een externe tabel.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    
  1. Maak een hoofdsleutel in de database. De hoofdsleutel is vereist om het referentiegeheim te versleutelen.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>';  
    
  2. Maak een database-scope credential voor Azure Blob Storage met behulp van een Shared Access Signature (SAS); IDENTITY kan alles zijn omdat deze niet wordt gebruikt.

    CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
    WITH
    IDENTITY = 'SHARED ACCESS SIGNATURE',
    -- Remove ? from the beginning of the SAS token
    SECRET = '<azure_shared_access_signature>' ;
    
  3. Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Houd er rekening mee dat wanneer u via de WASB[s]-connector verbinding maakt met Azure Storage, verificatie met een Shared Access Signature (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. Maak een externe bestandsindeling aan met behulp van 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. Maak een externe tabel die verwijst naar gegevens die zijn opgeslagen in Azure Storage met CREATE EXTERNAL TABLE. In dit voorbeeld bevatten de externe gegevens autosensorgegevens; LOCATION kan niet worden /, maar /Demo/ zoals in dit voorbeeld niet eerder hoeft te bestaan.

    -- 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. Statistieken maken voor een externe tabel.

    CREATE STATISTICS StatsForSensors on CarSensor_Data(CustomerKey, Speed)  
    

PolyBase-queries

Er zijn drie functies waarvoor PolyBase geschikt is:

  • Ad-hocquery's voor externe tabellen.
  • Gegevens importeren.
  • Gegevens exporteren.

De volgende query's bevatten voorbeeldgegevens van fictieve autosensorgegevens.

Ad-hocvragen

De volgende ad-hocquery voegt relationele gegevens samen met Hadoop-gegevens. Het selecteert klanten die sneller rijden dan 35 mph en wordt toegevoegd aan gestructureerde klantgegevens die zijn opgeslagen in SQL Server met autosensorgegevens die zijn opgeslagen in 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)  

Gegevens importeren met PolyBase

Met de volgende query worden externe gegevens geïmporteerd in SQL Server. In dit voorbeeld worden gegevens geïmporteerd voor snelle stuurprogramma's in SQL Server om uitgebreidere analyses uit te voeren. Ter verbetering van de prestaties maakt het gebruik van columnstore-technologie.

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;  

Gegevens exporteren met PolyBase

Met de volgende query worden gegevens geëxporteerd van SQL Server naar Azure Blob Storage. Schakel eerst PolyBase-export in. Maak vervolgens een externe tabel voor de bestemming voordat u er gegevens naar exporteert.

-- 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 met deze methode kan meerdere bestanden maken.

PolyBase-objecten weergeven in SSMS

In SSMS worden externe tabellen weergegeven in een afzonderlijke map Externe tabellen. Externe gegevensbronnen en externe bestandsindelingen bevinden zich in submappen onder Externe resources.

PolyBase-objecten in SSMS-

Volgende stappen

Zie PolyBase Transact-SQL referentievoor meer handleidingen over het maken van externe gegevensbronnen en externe tabellen naar verschillende gegevensbronnen.

Bekijk meer manieren om PolyBase te gebruiken en te bewaken in de volgende artikelen: