共用方式為


SqlPackage 與 Parquet 檔案中的資料(預覽)

本文涵蓋 SqlPackage 的支援,可與以 Parquet 格式儲存在 Azure Blob 儲存體中的數據進行互動。 針對 SQL Server 2022 和 Azure SQL 受控實例,SqlPackage 162.1.176 和更高版本提供預覽支援,使得在 Azure Blob Storage 的 Parquet 檔案中可以進行 擷取發行。 不支援 Azure SQL Database 和 SQL Server 2019 和更早版本。 匯入匯出 動作仍可供 SQL Server、Azure SQL 受控實例和 Azure SQL Database 使用。 在 Azure Blob 儲存體中對 Parquet 檔案的支援一直保持一般可用,適用於 Azure Synapse Analytics

使用 擷取時,資料庫架構(.dacpac 檔案)會寫入執行 SqlPackage 的本機用戶端,並以 Parquet 格式將數據寫入 Azure Blob 記憶體。 數據會儲存在具有兩部分數據表名稱的個別資料夾中。 CETAS 可用來在 Azure Blob 記憶體中寫入檔案。

發佈時,資料庫架構(.dacpac 檔案)會從執行 SqlPackage 的本機用戶端讀取,並以 Parquet 格式讀取或寫入至 Azure Blob 記憶體。

在 Azure 裝載的 SQL 資料庫中,使用 Parquet 檔案的擷取/發佈作業在許多情況下比起使用 .bacpac 檔案進行匯入/導出作業能提供更佳的效能。

擷取 (匯出資料)

若要將數據從資料庫匯出至 Azure Blob 記憶體,SqlPackage 擷取 動作會搭配下列屬性使用:

  • /p:AzureStorageBlobEndpoint
  • /p:AzureStorageContainer
  • /p:AzureStorageKey 或 /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 或 /p:AzureSharedAccessSignatureToken

發行的存取權可以透過記憶體帳戶密鑰或共用存取簽章 (SAS) 令牌獲得授權。 資料庫架構 (.dacpac 檔案) 會從執行 SqlPackage 的本機用戶端讀取,並以 Parquet 格式從 Azure Blob 記憶體讀取數據。

下列範例會從目前目錄中名為 databaseschema.dacpac 的本機檔案,將名為 databasename 的資料庫發行至名為 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是否適合您的環境,再進行設定變更。

數據表和數據類型

CETAS 支援的數據類型支援使用 Parquet 檔案進行擷取和發佈作業。

總賬表格已啟用以使用 Parquet 檔案進行擷取和發佈操作。

使用 Always Encrypted 儲存的數據不支援使用 Parquet 檔案進行擷取和發佈作業。

在 SqlPackage 擷取至 Parquet 之前,請先檢查資料庫是否有不支援的類型,但您可以使用 T-SQL 快速檢查資料庫。 下列範例查詢會傳回類型和數據表的結果集,這些類型不支援寫入 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'
)

後續步驟