共用方式為


將Hive中繼存放區元數據從 Azure Synapse 遷移至 Fabric

Hive 中繼存放區 (HMS) 移轉的初始步驟牽涉到決定您要傳輸的資料庫、數據表和數據分割。 不需要移轉所有專案;您可以選取特定資料庫。 識別要移轉的資料庫時,請務必確認是否有受控或外部Spark數據表。

如需 HMS 考慮,請參閱 Azure Synapse Spark 與 Fabric 之間的差異。

注意

或者,如果您的 ADLS Gen2 包含 Delta 數據表,您可以在 ADLS Gen2 中建立 Delta 數據表的 OneLake 快捷方式。

必要條件

選項 1:將 HMS 匯出和匯入 Lakehouse 中繼存放區

請遵循下列重要步驟進行移轉:

  • 步驟 1:從來源 HMS 導出元數據
  • 步驟 2:將元數據匯入 Fabric Lakehouse
  • 移轉後步驟:驗證內容

注意

腳本只會將 Spark 目錄物件複製到 Fabric Lakehouse。 假設數據已經複製(例如,從倉儲位置複製到 ADLS Gen2),或可用於 Managed 和外部數據表(例如,透過快捷方式—偏好)複製到 Fabric Lakehouse。

步驟 1:從來源 HMS 導出元數據

步驟 1 的重點在於將元數據從來源 HMS 匯出至 Fabric Lakehouse 的 [檔案] 區段。 此程式如下所示:

  • 1.1) 將 HMS 元數據匯出筆記本 匯入 Azure Synapse 工作區。 此筆記本 會查詢和匯出資料庫、數據表和數據分割的 HMS 元數據至 OneLake 中的中繼目錄(尚未包含的函式)。 此文稿會使用 Spark 內部目錄 API 來讀取目錄物件。

  • 1.2) 在第一個命令中設定參數 ,以將元數據信息匯出至中繼記憶體 (OneLake)。 下列代碼段是用來設定來源和目的地參數。 請務必以您自己的值取代它們。

    
    // Azure Synapse workspace config
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    var DatabaseNames = "<db1_name>;<db2_name>"
    var SkipExportTablesWithUnrecognizedType:Boolean = false
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    
  • 1.3) 執行所有筆記本命令 ,將目錄對象匯出至 OneLake。 一旦儲存格完成,就會建立中繼輸出目錄下的這個資料夾結構。

    Screenshot showing HMS export in OneLake.

步驟 2:將元數據匯入 Fabric Lakehouse

步驟 2 是從中繼記憶體匯入到 Fabric Lakehouse 的實際元數據時。 此步驟的輸出是將所有 HMS 元數據(資料庫、數據表和數據分割)移轉。 此程式如下所示:

  • 2.1) 在 Lakehouse 的 [檔案] 區段 內建立快捷方式。 此快捷方式必須指向來源 Spark 倉儲目錄,稍後會用來取代 Spark 受控數據表。 請參閱指向 Spark 倉儲目錄的快捷方式範例:

    • Azure Synapse Spark 倉儲目錄的快捷方式路徑: abfss://<container>@<storage_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/warehouse
    • Azure Databricks 倉儲目錄的快捷方式路徑: dbfs:/mnt/<warehouse_dir>
    • HDInsight Spark 倉儲目錄的快捷方式路徑: abfss://<container>@<storage_name>.dfs.core.windows.net/apps/spark/warehouse
  • 2.2) 將 HMS 元數據匯入筆記本 匯入至您的 Fabric 工作區。 匯 入此筆記本 ,以從中繼記憶體匯入資料庫、數據表和數據分割物件。 此腳本會使用 Spark 內部目錄 API,在 Fabric 中建立目錄物件。

  • 2.3) 在第一個命令中設定參數 。 在 Apache Spark 中,當您建立受控數據表時,該數據表的數據會儲存在 Spark 本身所管理的位置,通常是在 Spark 的倉儲目錄中。 確切的位置是由Spark決定。 這與外部數據表形成對比,您可以在其中指定位置和管理基礎數據。 當您移轉 Managed 數據表的元數據時,元數據仍然包含指向舊 Spark 倉儲目錄的原始位置資訊。 因此,針對 Managed 數據表, WarehouseMappings 會使用步驟 2.1 中建立的快捷方式來執行取代作業。 所有來源受控數據表都會使用此腳本轉換成外部數據表。 LakehouseId 是指在包含快捷方式的步驟 2.1 中建立的 Lakehouse。

    
    // Azure Synapse workspace config
    var ContainerName = "<container_name>"
    var StorageName = "<storage_name>"
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    var ShortcutName = "<warehouse_dir_shortcut_name>"
    
    var WarehouseMappings:Map[String, String] = Map(
        f"abfss://${ContainerName}@${StorageName}.dfs.core.windows.net/synapse/workspaces/${SynapseWorkspaceName}/warehouse"-> f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ShortcutName}"
    )
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    var DatabasePrefix = ""
    var TablePrefix = ""
    var IgnoreIfExists = true
    
    
  • 2.4) 執行所有 Notebook 命令 ,以從中繼路徑匯入目錄物件。

注意

匯入多個資料庫時,您可以為每個資料庫建立一個 Lakehouse(此處所使用的方法),或 (ii) 將所有數據表從不同的資料庫移至單一 Lakehouse。 針對後者,所有已移轉的數據表可以是 <lakehouse>.<db_name>_<table_name>,您必須據以調整匯入筆記本。

步驟 3:驗證內容

步驟 3 是您驗證已成功移轉元數據的位置。 請參閱不同的範例。

您可以執行下列命令來檢視匯入的資料庫:

%%sql
SHOW DATABASES

您可以執行下列命令來檢查 Lakehouse (database) 中的所有資料表:

%%sql
SHOW TABLES IN <lakehouse_name>

您可以執行下列命令來檢視特定資料表的詳細資料:

%%sql
DESCRIBE EXTENDED <lakehouse_name>.<table_name>

或者,所有匯入的數據表都會顯示在每個 Lakehouse 的 Lakehouse 總管 UI 數據表區段中。

Screenshot showing HMS metadata imported in the lakehouse.

其他考量

  • 延展性:此處的解決方案是使用內部 Spark 類別目錄 API 進行匯入/匯出,但不會直接連線到 HMS 以取得目錄物件,因此如果目錄很大,解決方案就無法正常調整。 您必須使用 HMS DB 來變更匯出邏輯。
  • 數據精確度:沒有隔離保證,這表示如果Spark計算引擎在執行移轉筆記本時對中繼存放區進行並行修改,可以在 Fabric Lakehouse 中導入不一致的數據。