Partager via


SqlPackage avec des données dans des fichiers Parquet (préversion)

Cet article traite de la prise en charge par SqlPackage de l’interaction avec les données stockées dans Stockage Blob Azure au format Parquet.

Avec l'extraction , le schéma de base de données (fichier.dacpac) est écrit sur le client local exécutant SqlPackage et les données sont écrites dans Azure Blob Storage au format Parquet. Les données sont stockées dans des dossiers individuels nommés avec des noms de table en deux parties. CREATE EXTERNAL TABLE AS SELECT (CETAS) est utilisé pour écrire les fichiers dans le stockage Blob Azure.

Avec publication, le schéma de base de données (fichier .dacpac) est lu à partir du client local exécutant SqlPackage, et les données sont lues ou écrites dans le stockage Blob d'Azure au format Parquet.

Pour SQL Server 2022 et Azure SQL Managed Instance, le support en préversion pour extraire et publier avec des données dans des fichiers Parquet dans le Stockage Blob Azure est disponible dans SqlPackage 162.1.176 et versions ultérieures. Pour Azure SQL Database, la prise en charge en préversion pour la publication est disponible dans SqlPackage 170.1.61 et versions ultérieures. SQL Server 2019 et versions antérieures n’est pas pris en charge. Les actions d’importation et d’exportation continuent d’être disponibles pour SQL Server, Azure SQL Managed Instance et Azure SQL Database. La prise en charge des fichiers Parquet dans le Stockage Blob Azure continue d’être généralement disponible pour Azure Synapse Analytics.

Dans les bases de données SQL hébergées dans Azure, les opérations d’extraction/publication avec des fichiers Parquet offrent des performances améliorées par rapport aux opérations d’importation/exportation avec des fichiers .bacpac dans de nombreux scénarios.

Extraire (exporter des données)

Pour exporter des données d’une base de données vers stockage Blob Azure, l’action d’extraction SqlPackage est utilisée avec les propriétés suivantes :

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureSharedAccessSignatureToken ou /p:AzureStorageKey (non pris en charge pour une utilisation avec SQL Server)

Capture d’écran du résumé de l’extraction de données d’une base de données avec un fichier .dacpac écrit dans un environnement SqlPackage et les données de table écrites dans Azure Blob Storage sous forme de fichiers Parquet.

L’accès de la base de données au conteneur de stockage d’objets blob est autorisé par le biais d’une clé de compte de stockage. Le schéma de base de données (fichier.dacpac) est écrit dans le client local exécutant SqlPackage et les données sont écrites dans stockage Blob Azure au format Parquet.

Le paramètre /p:AzureStorageRootPath est facultatif, qui définit le chemin racine de stockage dans le conteneur. Sans cette propriété, le chemin d’accès par défaut est servername/databasename/timestamp/. Les données sont stockées dans des dossiers individuels nommés avec des noms de table en deux parties. Le nombre de fichiers créés par table dépend des cœurs MAXDOP et SQL disponibles au moment de l’exportation.

Enfin, la propriété /p:TableData spécifie quelles tables ont leurs données exportées. Spécifiez le nom de la table avec ou sans crochets entourant les parties de nom au format schema_name.table_identifier. Cette propriété peut être spécifiée plusieurs fois pour indiquer plusieurs tables.

Example

L’exemple suivant extrait une base de données nommée databasename à partir d’un serveur nommé yourserver dans un fichier local nommé databaseschema.dacpac dans le répertoire actif. Les données sont écrites dans un conteneur nommé containername dans un compte de stockage nommé storageaccount à l’aide d’une clé de compte de stockage nommée storageaccountkey. Les données sont écrites dans le chemin d’accès par défaut de servername/databasename/timestamp/ dans le conteneur.

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

Consultez l’extrait sqlPackage pour obtenir d’autres exemples de types d’authentification disponibles.

Publier (importer des données)

Pour importer des données à partir de fichiers Parquet dans Stockage Blob Azure vers une base de données, l’action de publication SqlPackage est utilisée avec les propriétés suivantes :

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageRootPath
  • /p:AzureSharedAccessSignatureToken ou /p:AzureStorageKey (non pris en charge pour une utilisation avec SQL Server)

L’accès à la publication peut être autorisé via une clé de compte de stockage ou un jeton de signature d’accès partagé (SAP). Le schéma de base de données (fichier.dacpac) est lu à partir du client local exécutant SqlPackage et les données sont lues à partir du stockage Blob Azure au format Parquet.

Example

L’exemple suivant publie une base de données nommée databasename sur un serveur nommé yourserver à partir d’un fichier local nommé databaseschema.dacpac dans le répertoire actif. Les données sont lues à partir d’un conteneur nommé containername dans un compte de stockage nommé storageaccount à l’aide d’une clé de compte de stockage nommée storageaccountkey. Les données sont lues depuis des dossiers individuels par table sous le chemin yourserver/databasename/10-19-2023_11-09-56/ dans le conteneur.

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

Consultez la publication de SqlPackage pour obtenir d’autres exemples de types d’authentification disponibles.

Limitations

PolyBase

Pour SQL Server et Azure SQL Managed Instance, PolyBase est nécessaire pour les opérations SqlPackage avec des fichiers Parquet. La requête suivante peut être utilisée pour vérifier si PolyBase est activé :

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

Vous devrez peut-être activer PolyBase ou l’exportation PolyBase. L’activation de PolyBase sur Azure SQL Managed Instance nécessite PowerShell ou Azure CLI. Vous devez évaluer si l’activation de PolyBase convient à votre environnement avant d’apporter des modifications de configuration.

Types de tables et de données

La plupart des types de données sont compatibles avec les opérations d’extraction et de publication pour les fichiers Parquet. Les tables avec des types de données non pris en charge entraînent l’exportation des données vers le fichier .dacpac au lieu du format de Parquet. Les types de données suivants sont pris en charge et sont écrits dans des fichiers Parquet sur Azure Blob Storage.

  • char
  • varchar
  • nchar
  • nvarchar
  • text
  • ntext
  • decimal
  • numeric
  • float
  • real
  • bit
  • tinyint
  • smallint
  • int
  • bigint
  • smallmoney
  • money
  • smalldate
  • smalldatetime
  • date
  • datetime
  • datetime2
  • datetimeoffset
  • time
  • uniqueidentifier
  • timestamp
  • rowversion
  • binary
  • varbinary
  • image
  • xml
  • json
  • vector

Les tables de registre sont activées pour les opérations d’extraction et de publication avec des fichiers Parquet.

Les données stockées avec Always Encrypted ne sont pas prises en charge pour les opérations d’extraction et de publication avec des fichiers Parquet.

Vous pouvez examiner votre base de données avec T-SQL pour détecter les types de données qui seraient susceptibles d'être écrits dans le fichier .dacpac au lieu de fichiers Parquet écrits directement dans le stockage Blob Azure. L’exemple de requête suivant retourne un jeu de résultats de types et de tables avec des types non pris en charge pour l’écriture dans des fichiers 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',
    'tinyint',
    'smallint',
    'int',
    'bigint',
    'bit',
    'money',
    'smallmoney',
    'uniqueidentifier',
    'timestamp',
    'rowversion',
    'text',
    'ntext',
    'image',
    'xml',
    'json',
    'vector'
);