Sdílet prostřednictvím


SqlPackage s daty v souborech Parquet (náhled)

Tento článek popisuje podporu SqlPackage pro interakci s daty uloženými ve službě Azure Blob Storage, která je ve formátu Parquet. Pro SQL Server 2022 a Azure SQL Managed Instance je v režimu Preview dostupná podpora pro extrakci a publikování s daty v souborech Parquet uložených v Azure Blob Storage v SqlPackage 162.1.176 a vyšší. Azure SQL Database a SQL Server 2019 a starší nejsou podporované. Akce importu a exportu jsou nadále dostupné pro SQL Server, azure SQL Managed Instance a Azure SQL Database. Podpora souborů Parquet ve službě Azure Blob Storage je nadále obecně dostupná pro Azure Synapse Analytics.

S extraktem se schéma databáze (soubor.dacpac) zapíše do místního klienta, na kterém běží SqlPackage, a data se zapíšou do Azure Blob Storage ve formátu Parquet. Data se ukládají do jednotlivých složek s názvy dvoudílných tabulek. CETAS se používá k zápisu souborů ve službě Azure Blob Storage.

Při publikování se schéma databáze (soubor.dacpac) načítá z místního klienta, na kterém běží SqlPackage, a data se čtou nebo zapisují do služby Azure Blob Storage ve formátu Parquet.

V databázích SQL hostovaných v Azure nabízejí operace extrakce a publikování se soubory Parquet vyšší výkon při operacích importu a exportu s .bacpac soubory v mnoha scénářích.

Výpis (export dat)

K exportu dat z databáze do služby Azure Blob Storage se použije akce SqlPackage extrakt s následujícími vlastnostmi:

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

Pro zajištění přístupu databáze ke kontejneru úložiště objektů blob je použit klíč účtu úložiště. Schéma databáze (soubor .dacpac) je zapsáno do místního klienta, na kterém běží SqlPackage, a data se zapisuje do služby Azure Blob Storage ve formátu Parquet.

Parametr /p:AzureStorageRootPath je volitelný, což nastaví kořenovou cestu úložiště v rámci kontejneru. Bez této vlastnosti se cesta ve výchozím nastavení použije jako servername/databasename/timestamp/. Data se ukládají do jednotlivých složek s názvy dvoudílných tabulek. Počet souborů vytvořených pro tabulku závisí na maxDOP a dostupných jádrech SQL v době exportu.

Nakonec vlastnost /p:TableData určuje, které tabulky mají export dat. Zadejte název tabulky s nebo bez hranatých závorek obklopujících části názvu ve formátu schema_name.table_identifier. Tuto vlastnost lze zadat vícekrát, aby bylo možné označit více tabulek.

Příklad

Následující příklad extrahuje databázi s názvem databasename ze serveru s názvem yourserver do místního souboru s názvem databaseschema.dacpac v aktuálním adresáři. Data se zapisuje do kontejneru s názvem containername v účtu úložiště s názvem storageaccount pomocí klíče účtu úložiště s názvem storageaccountkey. Data se zapíšou do výchozí cesty servername/databasename/timestamp/ v kontejneru.

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

Další příklady dostupných typů ověřování najdete v části Extrakce SqlPackage.

Publikování (import dat)

Pokud chcete importovat data ze souborů Parquet v Azure Blob Storage do databáze, použije se akce SqlPackage publikování s následujícími vlastnostmi:

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

Přístup k publikování je možné autorizovat prostřednictvím klíče účtu úložiště nebo tokenu sdíleného přístupového podpisu (SAS). Schéma databáze (soubor .dacpac) se načítá z místního klienta, na kterém běží SqlPackage, a data se čtou ze služby Azure Blob Storage ve formátu Parquet.

Příklad

Následující příklad publikuje databázi s názvem databasename na server s názvem yourserver z místního souboru s názvem databaseschema.dacpac v aktuálním adresáři. Data se čtou z kontejneru s názvem containername v účtu úložiště s názvem storageaccount pomocí klíče účtu úložiště s názvem storageaccountkey. Data se čtou z jednotlivých složek pro každou tabulku pod cestou yourserver/databasename/10-19-2023_11-09-56/ v kontejneru.

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/"

Další příklady dostupných typů ověřování vizte v části SqlPackage publish.

Omezení

Polybase

Polybase se vyžaduje pro operace SqlPackage se soubory Parquet. Pomocí následujícího dotazu můžete zkontrolovat, jestli je polybase povolená:

// 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)

Možná budete muset povolit Polybase nebo Polybase export. Povolení PolyBase ve službě Azure SQL Managed Instance vyžaduje použití PowerShell nebo Azure CLI. Před provedením změn konfigurace doporučujeme vyhodnotit, jestli je povolení PolyBase pro vaše prostředí vhodné.

Tabulky a datové typy

Datové typy podporované CETAS podporují operace extrakce a publikování se soubory Parquet.

Účetní tabulky jsou povolené pro operace extrakce a publikování s použitím souborů Parquet.

Data uložená pomocí funkce Always Encrypted se nepodporují pro operace extrakce a publikování se soubory Parquet.

Kontrola nepodporovaných typů databáze se provádí před extrahováním do Parquet by SqlPackage, ale databázi můžete rychle prozkoumat pomocí T-SQL. Následující ukázkový dotaz vrátí sadu výsledků typů a tabulek s typy, které nejsou podporovány pro zápis do souborů Parquet.

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'
)

Další kroky