Dela via


SqlPackage med data i Parquet-filer (förhandsversion)

Den här artikeln beskriver SqlPackage-stöd för interaktion med data som lagras i Azure Blob Storage i Parquet-format. För SQL Server 2022 och Azure SQL Managed Instance finns förhandsversionsstöd för att extrahera och att publicera med data i Parquet-filer i Azure Blob Storage tillgängligt i och med SqlPackage version 162.1.176 och senare. Azure SQL Database och SQL Server 2019 och tidigare stöds inte. Åtgärderna importera och exportera fortsätter att vara tillgängliga för SQL Server, Azure SQL Managed Instance och Azure SQL Database. Stöd för Parquet-filer i Azure Blob Storage är fortfarande allmänt tillgängligt för Azure Synapse Analytics.

Med extraheraskrivs databasschemat (.dacpac fil) till den lokala klienten som kör SqlPackage och data skrivs till Azure Blob Storage i Parquet-format. Data lagras i enskilda mappar namngivna med tvådelade tabellnamn. CETAS- används för att skriva filerna i Azure Blob Storage.

Med publicering avläses databasschemat (.dacpac fil) från den lokala klienten som kör SqlPackage och data läses från eller skrivs till Azure Blob Storage i Parquet-format.

I SQL-databaser som finns i Azure ger extraherings-/publiceringsåtgärderna med Parquet-filer bättre prestanda jämfört med import-/exportåtgärder med .bacpac filer i många scenarier.

Extrahera (exportera data)

För att exportera data från en databas till Azure Blob Storage används åtgärden SqlPackage extrahera med följande egenskaper:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageKey eller /p:AzureSharedAccessSignatureToken

Åtkomst för databasen för åtkomst till bloblagringscontainern auktoriseras via en lagringskontonyckel. Databasschemat (.dacpac-filen) skrivs till den lokala klienten som kör SqlPackage och data skrivs till Azure Blob Storage i Parquet-format.

Parametern /p:AzureStorageRootPath är valfri och anger lagringsrotsökvägen i containern. Utan den här egenskapen är sökvägen som standard servername/databasename/timestamp/. Data lagras i enskilda mappar namngivna med tvådelade tabellnamn. Antalet filer som skapas per tabell beror på MAXDOP och tillgängliga SQL-kärnor vid tidpunkten för exporten.

Slutligen anger egenskapen /p:TableData vilka tabeller som har sina data exporterade. Ange tabellnamnet med eller utan hakparenteser som omger namndelarna i formatet schema_name.table_identifier. Den här egenskapen kan anges flera gånger för att indikera flera tabeller.

Exempel

I följande exempel extraheras en databas med namnet databasename från en server med namnet yourserver till en lokal fil med namnet databaseschema.dacpac i den aktuella katalogen. Data skrivs till en container med namnet containername i ett lagringskonto med namnet storageaccount med hjälp av en lagringskontonyckel med namnet storageaccountkey. Data skrivs till standardsökvägen för servername/databasename/timestamp/ i containern.

SqlPackage /Action:Extract /SourceServerName:yourserver /SourceDatabaseName:databasename /TargetFile:databaseschema.dacpac /p:AzureStorageBlobEndpoint=https://storageaccount.blob.core.windows.net /p:AzureStorageContainer=containername /p:AzureStorageKey=storageaccountkey

Se SqlPackage-extrahering för fler exempel på tillgängliga autentiseringstyper.

Publicera (importera data)

Om du vill importera data från Parquet-filer i Azure Blob Storage till en databas används åtgärden SqlPackage publicera med följande egenskaper:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageRootPath
  • /p:AzureStorageKey eller /p:AzureSharedAccessSignatureToken

Åtkomst för publicering kan auktoriseras via en lagringskontonyckel eller en SAS-token (signatur för delad åtkomst). Databasschemat (.dacpac-filen) läss från den lokala klienten som kör SqlPackage och data läss från Azure Blob Storage i Parquet-format.

Exempel

I följande exempel publiceras en databas med namnet databasename till en server med namnet yourserver från en lokal fil med namnet databaseschema.dacpac i den aktuella katalogen. Data läss från en container med namnet containername i ett lagringskonto med namnet storageaccount med hjälp av en lagringskontonyckel med namnet storageaccountkey. Data läss från enskilda mappar per tabell under sökvägen yourserver/databasename/10-19-2023_11-09-56/ i containern.

SqlPackage /Action:Publish /SourceFile:databaseschema.dacpac /TargetServerName:yourserver /TargetDatabaseName:databasename /p:AzureStorageBlobEndpoint=https://storageaccount.blob.core.windows.net /p:AzureStorageContainer=containername  /p:AzureStorageKey=storageaccountkey /p:AzureStorageRootPath="yourserver/databasename/10-19-2023_11-09-56/"

Se SqlPackage publicera för fler exempel på tillgängliga autentiseringstyper.

Begränsningar

Polybase

Polybase krävs för SqlPackage-åtgärder med Parquet-filer. Följande fråga kan användas för att kontrollera om Polybase är aktiverat:

// configuration_id = 16397 is 'allow polybase export'
// configuration_id = 16399 is 'polybase enabled'
SELECT configuration_id, value_in_use FROM sys.configurations
WHERE configuration_id IN (16397, 16399)

Du kan behöva aktivera Polybase eller Polybase export. För att aktivera Polybase på Azure SQL Managed Instance krävs PowerShell eller Azure CLI. Vi rekommenderar att du utvärderar om det är rätt att aktivera Polybase för din miljö innan du gör konfigurationsändringar.

Tabell- och datatyper

Datatyper som stöds av CETAS- stöds för extrahering och publicering av operationer i Parquet-filer.

Transaktionsregistertabeller är aktiverade för att extrahera och publicera åtgärder med Parquet-filer.

Data som lagras med Always Encrypted stöds inte för operationer för att extrahera och publicera med Parquet-filer.

Att kontrollera databasen efter typer som inte stöds görs innan du extraherar till Parquet av SqlPackage, men du kan snabbt undersöka databasen med T-SQL. Följande exempelfråga returnerar en resultatuppsättning av typer och tabeller med typer som inte stöds för att skriva till Parquet-filer.

SELECT DISTINCT C.DATA_TYPE, C.TABLE_SCHEMA, C.TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES T
INNER JOIN INFORMATION_SCHEMA.COLUMNS C
    ON T.TABLE_SCHEMA = C.TABLE_SCHEMA 
    AND T.TABLE_NAME = C.TABLE_NAME
    AND T.TABLE_TYPE = 'BASE TABLE'
WHERE C.DATA_TYPE NOT IN (
    'binary',
    'varbinary',
    'char',
    'varchar',
    'nchar',
    'nvarchar',
    'smalldate',
    'smalldatetime',
    'date',
    'datetime',
    'datetime2',
    'datetimeoffset',
    'time',
    'decimal',
    'numeric',
    'float',
    'real',
    'bigint',
    'tinyint',
    'smallint',
    'int',
    'bigint',
    'bit',
    'money',
    'smallmoney',
    'uniqueidentifier'
)

Nästa steg