带有 Parquet 文件中数据的 SqlPackage(预览版)

本文介绍与以 Parquet 格式存储在 Azure Blob 存储的数据进行交互的 SqlPackage 支持。 对于 SQL Server 2022 和 Azure SQL 托管实例,SqlPackage 162.1.176 及以上版本提供在 Azure Blob 存储中对存储在 Parquet 文件中的数据进行“提取”和“发布”的预览支持。 不支持 Azure SQL 数据库和 SQL Server 2019 及更早版本。 可继续对 SQL Server、Azure SQL 托管实例和 Azure SQL 数据库进行导入导出操作。 Azure Blob 存储对 Parquet 文件的支持继续适用于 Azure Synapse Analytics

借助提取,数据库架构(.dacpac 文件)将写入运行 SqlPackage 的本地客户端,数据将以 Parquet 格式写入 Azure Blob 存储。 数据存储在由两部分构成的表名称命名的单个文件夹中。 CETAS 用于将文件写入 Azure Blob 存储。

借助发布,数据库架构(.dacpac 文件)从运行 SqlPackage 的本地客户端读取,数据以 Parquet 格式从 Azure Blob 存储读取或写入 Azure Blob 存储。

在 Azure 托管的 SQL 数据库中,对 Parquet 文件的提取/发布操作在很多场景中提高了 .bacpac 文件的导入/导出操作性能。

提取(导出数据)

若要将数据从数据库导出到 Azure Blob 存储,SqlPackage 提取操作与以下属性一起使用:

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

数据库访问 Blob 存储容器的访问权限是通过存储帐户密钥授权的。 数据库架构(.dacpac 文件)将写入运行 SqlPackage 的本地客户端,数据将以 Parquet 格式写入 Azure Blob 存储。

参数 /p:AzureStorageRootPath 是可选的,该参数可在容器中设置存储根路径。 如果没有此属性,路径将默认为 servername/databasename/timestamp/。 数据存储在由两部分构成的表名称命名的单个文件夹中。 每个表创建的文件数取决于导出时的 MAXDOP 和可用 SQL 核心。

最后,属性 /p:TableData 指定导出哪些表的数据。 请按 schema_name.table_identifier 格式指定表名,不一定要使用括号来括住名称部分。 可以多次指定此属性以指示多个表。

示例

下面的示例将数据库 databasename 从服务器 yourserver 提取到当前目录中的本地文件 databaseschema.dacpac。 数据将使用存储帐户密钥 storageaccountkey 写入存储帐户 storageaccount 中名为 containername 的容器中。 数据将写入容器中 servername/databasename/timestamp/ 的默认路径。

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

有关可用身份验证类型的更多示例,请参阅 SqlPackage 提取

发布(导入数据)

若要将数据从 Azure Blob 存储中的 Parquet 文件导入到数据库,SqlPackage 发布操作与以下属性一起使用:

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

可以通过存储帐户密钥或共享访问签名 (SAS) 令牌来授权发布访问权限。 数据库架构(.dacpac 文件)从运行 SqlPackage 的本地客户端读取,数据以 Parquet 格式从 Azure Blob 存储读取。

示例

下面的示例将数据库 databasename 从当前目录中的本地文件 databaseschema.dacpac 发布到服务器 yourserver。 使用存储帐户密钥 storageaccountkey 从存储帐户 storageaccount 中名为 containername 的容器读取数据。 从容器中路径 yourserver/databasename/10-19-2023_11-09-56/ 下每个表的各个文件夹中读取数据。

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

有关可用身份验证类型的更多示例,请参阅 SqlPackage 发布

限制

Polybase

对 Parquet 文件的 SqlPackage 操作需要 Polybase。 如果启用了 Polybase,可以使用以下查询检查:

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

可能需要启用 PolybasePolybase 导出。 在 Azure SQL 托管实例上启用 Polybase 需要 PowerShell 或 Azure CLI。 建议在进行配置更改之前评估环境是否适合启用 Polybase。

表和数据类型

对 Parquet 文件的提取和发布操作支持 CETAS 支持的数据类型。

为对 Parquet 文件进行提取和发布操作启用了账本表。

使用 Always Encrypted 存储的数据不支持对 Parquet 文件的提取和发布操作。

后续步骤