Partilhar via


SqlPackage com dados em ficheiros Parquet (pré-visualização)

Este artigo aborda o suporte do SqlPackage para interagir com dados armazenados no Armazenamento de Blobs do Azure que estão no formato Parquet.

Com a extração de , o esquema de banco de dados (arquivo.dacpac) é gravado no cliente local que executa o SqlPackage e os dados são gravados no Azure Blob Storage no formato Parquet. Os dados são armazenados em pastas individuais nomeadas com nomes de tabela de duas partes. CREATE EXTERNAL TABLE AS SELECT (CETAS) é usado para fazer a gravação dos arquivos no Armazenamento de Blobs do Azure.

Com a publicação , o esquema da base de dados (ficheiro.dacpac) é lido a partir do cliente local que executa o SqlPackage, e os dados são lidos ou escritos no Armazenamento de Blobs do Azure no formato Parquet.

Para o SQL Server 2022 e a Instância Gerenciada SQL do Azure, o suporte em pré-visualização para extrair e publicar com dados em arquivos Parquet no Armazenamento de Blobs do Azure está disponível no SqlPackage a partir da versão 162.1.176. Para o Banco de Dados SQL do Azure, o suporte de visualização para publicação está disponível em SqlPackage 170.1.61 e superior. Não há suporte para o SQL Server 2019 e versões anteriores. As ações de importação e exportação continuam disponíveis para o SQL Server, a Instância Gerenciada SQL do Azure e o Banco de Dados SQL do Azure. O suporte para arquivos Parquet no Armazenamento de Blobs do Azure continua a estar geralmente disponível para o Azure Synapse Analytics.

Em bancos de dados SQL hospedados no Azure, as operações de extração/publicação com arquivos Parquet oferecem melhor desempenho em relação às operações de importação/exportação com arquivos .bacpac em muitos cenários.

Extrair (exportar dados)

Para exportar dados de um banco de dados para o Armazenamento de Blobs do Azure, a ação de extração SqlPackage é usada com as seguintes propriedades:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureSharedAccessSignatureToken ou /p:AzureStorageKey (sem suporte para uso com o SQL Server)

Captura de tela de Resumo da extração de dados de um banco de dados com um arquivo .dacpac gravado em um ambiente SqlPackage e os dados da tabela gravados no Armazenamento de Blobs do Azure em arquivos parquet.

O acesso ao banco de dados para acessar o contêiner de armazenamento de blob é autorizado por meio de uma chave de conta de armazenamento. O esquema de banco de dados (arquivo .dacpac) é gravado no cliente local que executa o SqlPackage e os dados são gravados no Armazenamento de Blobs do Azure no formato Parquet.

O parâmetro /p:AzureStorageRootPath é opcional, o que define o caminho da raiz de armazenamento dentro do contêiner. Sem essa propriedade, o caminho assume como padrão servername/databasename/timestamp/. Os dados são armazenados em pastas individuais nomeadas com nomes de tabela de duas partes. O número de arquivos criados por tabela depende do MAXDOP e dos núcleos SQL disponíveis no momento da exportação.

Finalmente, a propriedade /p:TableData especifica quais tabelas têm seus dados exportados. Especifique o nome da tabela com ou sem os colchetes ao redor das partes do nome no formato schema_name.table_identifier. Esta propriedade pode ser especificada várias vezes para indicar várias tabelas.

Example

O exemplo a seguir extrai um banco de dados chamado databasename de um servidor chamado yourserver para um arquivo local chamado databaseschema.dacpac no diretório atual. Os dados são gravados em um contêiner chamado containername em uma conta de armazenamento chamada storageaccount usando uma chave de conta de armazenamento chamada storageaccountkey. Os dados são gravados no caminho padrão de servername/databasename/timestamp/ no contêiner.

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

Consulte SqlPackage extract para obter mais exemplos de tipos de autenticação disponíveis.

Publicar (importar dados)

Para importar dados de ficheiros Parquet no Armazenamento de Blobs do Azure para uma base de dados, utiliza-se a ação publish do SqlPackage com as seguintes propriedades:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageRootPath
  • /p:AzureSharedAccessSignatureToken ou /p:AzureStorageKey (sem suporte para uso com o SQL Server)

O acesso para publicação pode ser autorizado por meio de uma chave de conta de armazenamento ou um token de assinatura de acesso compartilhado (SAS). O esquema de banco de dados (arquivo .dacpac) é lido do cliente local que executa o SqlPackage e os dados são lidos do Armazenamento de Blobs do Azure no formato Parquet.

Example

O exemplo a seguir publica um banco de dados chamado databasename para um servidor chamado yourserver de um arquivo local chamado databaseschema.dacpac no diretório atual. Os dados são lidos de um contêiner chamado containername em uma conta de armazenamento chamada storageaccount usando uma chave de conta de armazenamento chamada storageaccountkey. Os dados são lidos de pastas individuais para cada tabela no caminho yourserver/databasename/10-19-2023_11-09-56/ no contêiner.

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

Consulte SqlPackage publish para obter mais exemplos de tipos de autenticação disponíveis.

Limitations

PolyBase

Para SQL Server e Azure SQL Managed Instance, o PolyBase é necessário para operações SqlPackage com arquivos Parquet. A consulta a seguir pode ser usada para verificar se o PolyBase está habilitado:

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

Talvez seja necessário habilitar a exportação do PolyBase ou do PolyBase. Habilitar o PolyBase na Instância Gerenciada SQL do Azure requer PowerShell ou CLI do Azure. Você deve avaliar se habilitar o PolyBase é adequado para seu ambiente antes de fazer alterações de configuração.

Tabela e tipos de dados

A maioria dos tipos de dados são suportados para extração e publicação em arquivos Parquet. Tabelas com tipos de dados sem suporte resultam na exportação dos dados para o arquivo .dacpac em vez do formato Parquet. Os seguintes tipos de dados são suportados e gravados em arquivos Parquet no Armazenamento de Blobs do Azure:

  • 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

As tabelas contábeis são habilitadas para operações de extração e publicação com arquivos Parquet.

Os dados armazenados com Always Encrypted não são suportados para operações de extração e publicação com arquivos Parquet.

Você pode examinar seu banco de dados com T-SQL para detetar tipos de dados que seriam gravados no .dacpac arquivo em vez de em arquivos Parquet gravados diretamente no Armazenamento de Blobs do Azure. A consulta de exemplo a seguir retorna um conjunto de resultados com tipos e tabelas cujos tipos não são suportados para escrever em arquivos 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'
);