使用 Azure Data Factory 或 Azure Synapse Analytics,將資料複製到 Azure Databricks Delta Lake 以及從中複製資料

適用於:Azure Data Factory Azure Synapse Analytics

本文概述如何在 Azure Data Factory 和 Azure Synapse 中使用複製活動,將資料複製到 Azure Data Lake Store 以及從中複製資料。 本文是根據複製活動一文,該文提供複製活動的一般概觀。

支援的功能

下列活動支援此Azure Databricks Delta Lake 連接器:

通常,此服務支援具有下列功能的 Delta Lake,以符合您的各種需求。

  • 複製活動支援 Azure Databricks Delta Lake 連接器,將資料從任何支援的來源資料存放區複製到 Azure Databricks Delta Lake 資料表,以及從 Delta Lake 資料表複製到任何支援的接收資料存放區。 其會利用 Databricks 叢集來執行資料移動。請參閱必要條件一節中的詳細資料。
  • 對應資料流程支援 Azure 儲存體上的一般 Delta 格式 作為來源和接收器,來讀取和寫入無程式碼 ETL 的 Delta 檔案,並在受控 Azure Integration Runtime上執行。
  • Databricks 活動支援在 Delta Lake 上協調以程式碼為中心的 ETL 或機器學習工作負載。

必要條件

若要使用此 Azure Databricks Delta Lake 連接器,您必須在 Azure Databricks 中設定叢集。

  • 若要將資料複製到 Delta Lake,複製活動會叫用 Azure Databricks 叢集,從 Azure 儲存體讀取資料,而此 Azure 儲存體是您的原始來源或暫存區域,服務會先透過內建暫存複製將來源資料寫入其中。 若要深入了解,請參閱 Delta Lake 即接收器
  • 同樣地,若要從 Delta Lake 複製資料,複製活動會叫用 Azure Databricks 叢集,將資料寫入至 Azure 儲存體,這是您原始接收器或暫存區域,服務會從中繼續透過內建暫存複製將資料寫入至最終接收器。 若要深入了解,請參閱 Delta Lake 即來源

Databricks 叢集必須有權存取 Azure Blob 或 Azure Data Lake Storage Gen2 帳戶、用於來源/接收器/暫存的儲存體容器/檔案系統,以及您要在其中寫入 Delta Lake 資料表的容器/檔案系統。

  • 若要使用 Azure Data Lake Storage Gen2,您可以在 Databricks 叢集上將服務主體設定為 Apache Spark 設定的一部分。 請遵循直接使用服務主體存取中的步驟。

  • 若要使用 Azure Blob 儲存體,您可以在 Databricks 叢集上將儲存體帳戶存取金鑰SAS 權杖設定為 Apache Spark 設定的一部分。 請遵循使用 RDD API 存取 Azure Blob 儲存體中的步驟。

在複製活動執行期間,如果您設定的叢集已終止,服務會自動將其啟動。 如果您使用撰寫 UI 撰寫管線,針對資料預覽之類的作業,您需要具有即時叢集,因為服務將不會代表您啟動叢集。

指定叢集設定

  1. 在 [叢集模式] 下拉式清單中,選取 [標準]。

  2. 在 [Databricks Runtime 版本] 下拉式清單中,選取 Databricks Runtime 版本。

  3. 將下列屬性新增至 Spark 設定,以開啟自動最佳化

    spark.databricks.delta.optimizeWrite.enabled true
    spark.databricks.delta.autoCompact.enabled true
    
  4. 根據您的整合和調整需求來設定叢集。

如需叢集設定詳細資料,請參閱設定叢集

開始使用

若要透過管線執行複製活動,您可以使用下列其中一個工具或 SDK:

使用 UI 建立 Azure Databricks Delta Lake 的連結服務

使用下列步驟,在 Azure 入口網站 UI 中建立 Azure Databricks Delta Lake 的連結服務。

  1. 瀏覽至 Azure Data Factory 或 Synapse 工作區中的 [管理] 索引標籤,並選取 [連結服務],然後按一下 [新增]:

  2. 搜尋 Delta,然後選取 Azure Databricks Delta Lake 連接器。

    Screenshot of the Azure Databricks Delta Lake connector.

  3. 設定服務詳細資料、測試連線,然後建立新的連結服務。

    Screenshot of configuration for an Azure Databricks Delta Lake linked service.

連接器設定詳細資料

下列各節提供屬性的相關詳細資料,這些屬性會定義 Azure Databricks Delta Lake 特定的項目。

連結服務屬性

此 Azure Databricks Delta Lake 連接器支援下列驗證類型。 如需詳細資料,請參閱對應章節。

存取權杖

以下是 Azure Databricks Delta Lake 連結服務支援的屬性:

屬性 描述 必要
type type 屬性必須設定為 AzureDatabricksDeltaLake
網域 指定 Azure Databricks 工作區 URL,例如 https://adb-xxxxxxxxx.xx.azuredatabricks.net
clusterId 指定現有叢集的叢集識別碼。 其應該是已建立的互動式叢集。
您可以在 Databricks 工作區 -> [叢集] -> [互動式叢集名稱] -> [設定] -> [標記] 找到互動式叢集的叢集識別碼。 深入了解
accessToken 服務需要有存取權杖才能向 Azure Databricks 進行驗證。 存取權杖必須由 Databricks 工作區產生。 有關尋找存取權杖的詳細步驟可在這裡找到。
connectVia 用來連線到資料存放區的整合執行階段。 如果您的資料存放區位於私人網路,則可使用 Azure 整合執行階段或自我裝載整合執行階段。 如果未指定,則會使用預設的 Azure 整合執行階段。

範例︰

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "accessToken": {
                "type": "SecureString", 
                "value": "<access token>"
          	}
        }
    }
}

系統指派的受控識別驗證

若要深入了解系統指派的 Azure 資源受控識別,請參閱 系統指派的 Azure 資源受控識別

若要使用系統指派的受控識別驗證,請遵循下列步驟來授與權限:

  1. 複製與資料處理站或 Synapse 工作區一起產生的受控識別物件識別碼,藉此擷取受控識別資訊

  2. 在 Azure Databricks 中授與受控識別正確的權限。 一般而言,您必須在 Azure Databricks 的存取控制 (IAM) 中,至少將參與者角色授與系統指派的受控識別。

以下是 Azure Databricks Delta Lake 連結服務支援的屬性:

屬性 描述 必要
type type 屬性必須設定為 AzureDatabricksDeltaLake
網域 指定 Azure Databricks 工作區 URL,例如 https://adb-xxxxxxxxx.xx.azuredatabricks.net Yes
clusterId 指定現有叢集的叢集識別碼。 其應該是已建立的互動式叢集。
您可以在 Databricks 工作區 -> [叢集] -> [互動式叢集名稱] -> [設定] -> [標記] 找到互動式叢集的叢集識別碼。 深入了解
Yes
workspaceResourceId 指定 Azure Databricks 的工作區資源識別碼。
connectVia 用來連線到資料存放區的整合執行階段。 如果您的資料存放區位於私人網路,則可使用 Azure 整合執行階段或自我裝載整合執行階段。 如果未指定,則會使用預設的 Azure 整合執行階段。

範例︰

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "workspaceResourceId": "<workspace resource id>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

使用者指派的受控識別驗證

若要深入了解使用者指派的 Azure 資源受控識別,請參閱使用者指派的受控識別

若要使用使用者指派的受控識別驗證,請遵循下列步驟:

  1. 在您的 Azure Databricks 中建立一或多個使用者指派的受控識別,並授與權限。 一般而言,您必須在 Azure Databricks 的存取控制 (IAM) 中,至少將參與者角色授與使用者指派的受控識別。

  2. 將一或多個使用者指派的受控識別指派給 Data Factory 或 Synapse 工作區,並為每個使用者指派的受控識別建立認證

以下是 Azure Databricks Delta Lake 連結服務支援的屬性:

屬性 描述 必要
type type 屬性必須設定為 AzureDatabricksDeltaLake
網域 指定 Azure Databricks 工作區 URL,例如 https://adb-xxxxxxxxx.xx.azuredatabricks.net Yes
clusterId 指定現有叢集的叢集識別碼。 其應該是已建立的互動式叢集。
您可以在 Databricks 工作區 -> [叢集] -> [互動式叢集名稱] -> [設定] -> [標記] 找到互動式叢集的叢集識別碼。 深入了解
Yes
認證 將使用者指派的受控識別指定為認證物件。 Yes
workspaceResourceId 指定 Azure Databricks 的工作區資源識別碼。
connectVia 用來連線到資料存放區的整合執行階段。 如果您的資料存放區位於私人網路,則可使用 Azure 整合執行階段或自我裝載整合執行階段。 如果未指定,則會使用預設的 Azure 整合執行階段。

範例︰

{
    "name": "AzureDatabricksDeltaLakeLinkedService",
    "properties": {
        "type": "AzureDatabricksDeltaLake",
        "typeProperties": {
            "domain": "https://adb-xxxxxxxxx.xx.azuredatabricks.net",
            "clusterId": "<cluster id>",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            },
            "workspaceResourceId": "<workspace resource id>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

資料集屬性

如需可用來定義資料集的區段和屬性完整清單,請參閱資料集一文。

以下是 Azure Databricks Delta Lake 資料集支援的屬性。

屬性 描述 必要
type 資料集的 type 屬性必須設定為 AzureDatabricksDeltaLakeDataset
[資料庫] 資料庫的名稱。 否 (來源);是 (接收器)
資料表 Delta 資料表的名稱。 否 (來源);是 (接收器)

範例︰

{
    "name": "AzureDatabricksDeltaLakeDataset",
    "properties": {
        "type": "AzureDatabricksDeltaLakeDataset",
        "typeProperties": {
            "database": "<database name>",
            "table": "<delta table name>"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "linkedServiceName": {
            "referenceName": "<name of linked service>",
            "type": "LinkedServiceReference"
        }
    }
}

複製活動屬性

如需可用來定義活動的區段和屬性完整清單,請參閱管線一文。 本節提供 Azure Databricks Delta Lake 來源和接收器所支援的屬性清單。

Delta Lake 即來源

若要從 Azure Databricks Delta Lake 複製資料,複製活動 source 區段中支援下列屬性。

屬性 描述 必要
type 複製活動來源的 type 屬性必須設定為 AzureDatabricksDeltaLakeSource
查詢 指定 SQL 查詢來讀取資料。 針對時間移動控制項,請遵循下列模式:
- SELECT * FROM events TIMESTAMP AS OF timestamp_expression
- SELECT * FROM events VERSION AS OF version
No
exportSettings 用來從 Delta 資料表擷取資料的進階設定。 No
exportSettings 底下:
類型 export 命令的類型,設定為 AzureDatabricksDeltaLakeExportCommand Yes
dateFormat 使用日期格式將日期類型格式化為字串。 自訂日期格式遵循日期時間模式中的格式。 如果未指定,其會使用預設值 yyyy-MM-dd No
timestampFormat 使用時間戳記格式將時間戳記類型格式化為字串。 自訂日期格式遵循日期時間模式中的格式。 如果未指定,其會使用預設值 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX] No

從 Delta Lake 直接複製

如果您的接收資料存放區和格式符合本節所述的準則,您可以使用複製活動,直接從 Azure Databricks Delta 資料表複製到接收器。 該服務會檢查設定,並在不符合下列準則時讓複製活動執行失敗:

  • 接收器連結服務Azure Blob 儲存體Azure Data Lake Storage Gen2。 帳戶憑證應在 Azure Databricks 叢集設定中預先設定。若要深入了解,請參閱必要條件

  • 接收器資料格式Parquet分隔符號文字Avro,具有下列設定,並指向資料夾而非檔案。

    • 針對 Parquet 格式,壓縮轉碼器為 nonesnappygzip
    • 針對分隔符號文字格式:
      • rowDelimiter 是任何單一字元。
      • compression 可以是 nonebzip2gzip
      • 不支援 encodingName UTF-7。
    • 針對 Avro 格式,壓縮轉碼器為 nonedeflatesnappy
  • 在複製活動來源中,未指定 additionalColumns

  • 如果將資料複製到分隔符號文字,則在複製活動接收器中,fileExtension 必須是 ".csv"。

  • 在複製活動對應中,不會啟用類型轉換。

範例︰

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

從 Delta Lake 暫存複製

當您的接收資料存放區或格式不符合直接複製準則時,如上一節所述,請使用過渡 Azure 儲存體執行個體啟用內建暫存複製。 分段複製功能也能提供更好的輸送量。 服務會將資料從 Azure Databricks Delta Lake 匯出至暫存儲存體,然後將資料複製到接收器,最後從暫存儲存體中清除暫存資料。 如需使用暫存複製資料的詳細資料,請參閱暫存複製

若要使用此功能,請建立 Azure Blob 儲存體連結服務Azure Data Lake Storage Gen2 連結服務,將儲存體帳戶稱為過渡暫存。 然後,在複製活動中指定 enableStagingstagingSettings 屬性。

注意

暫存儲存體帳戶憑證應在 Azure Databricks 叢集設定中預先設定。若要深入了解,請參閱必要條件

範例︰

"activities":[
    {
        "name": "CopyFromDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Delta lake input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "AzureDatabricksDeltaLakeSource",
                "sqlReaderQuery": "SELECT * FROM events TIMESTAMP AS OF timestamp_expression"
            },
            "sink": {
                "type": "<sink type>"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingStorage",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

Delta Lake 即接收器

若要將資料複製到 Azure Databricks Delta Lake,複製活動 sink 區段中支援下列屬性。

屬性 描述 必要
type 複製活動接收器的 type 屬性,設定為 AzureDatabricksDeltaLakeSink Yes
preCopyScript 指定一個供複製活動在每次執行時,將資料寫入到 Databricks Delta 資料表前執行的 SQL 查詢。 範例:VACUUM eventsTable DRY RUN您可以使用此屬性來清除預先載入的資料,或新增截斷資料表或 Vacuum 資料表。 No
importSettings 用來將資料寫入 Delta 資料表的進階設定。 No
importSettings 底下:
類型 import 命令的類型,設定為 AzureDatabricksDeltaLakeImportCommand Yes
dateFormat 使用日期格式將字串格式化為日期類型。 自訂日期格式遵循日期時間模式中的格式。 如果未指定,其會使用預設值 yyyy-MM-dd No
timestampFormat 使用時間戳記格式將字串格式化為時間戳記類型。 自訂日期格式遵循日期時間模式中的格式。 如果未指定,其會使用預設值 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX] No

直接複製到 Delta Lake

如果您的來源資料存放區和格式符合本節所述的準則,您可以使用複製活動,直接從來源複製到 Azure Databricks Delta Lake。 該服務會檢查設定,並在不符合下列準則時讓複製活動執行失敗:

  • 來源連結服務Azure Blob 儲存體Azure Data Lake Storage Gen2。 帳戶憑證應在 Azure Databricks 叢集設定中預先設定。若要深入了解,請參閱必要條件

  • 來源資料格式Parquet分隔符號文字Avro,具有下列設定,並指向資料夾而非檔案。

    • 針對 Parquet 格式,壓縮轉碼器為 nonesnappygzip
    • 針對分隔符號文字格式:
      • rowDelimiter 是預設值,或任何單一字元。
      • compression 可以是 nonebzip2gzip
      • 不支援 encodingName UTF-7。
    • 針對 Avro 格式,壓縮轉碼器為 nonedeflatesnappy
  • 在複製活動來源中:

    • wildcardFileName 只包含萬用字元 *,但不包含 ?,而且未指定 wildcardFolderName
    • 未指定 prefixmodifiedDateTimeStartmodifiedDateTimeEndenablePartitionDiscovery
    • additionalColumns 未指定。
  • 在複製活動對應中,不會啟用類型轉換。

範例︰

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink",
                "sqlReadrQuery": "VACUUM eventsTable DRY RUN"
            }
        }
    }
]

暫存複製到 Delta Lake

當您的來源資料存放區或格式不符合直接複製準則時,如上一節所述,請使用過渡 Azure 儲存體執行個體啟用內建暫存複製。 分段複製功能也能提供更好的輸送量。 服務會自動轉換資料,以符合暫存儲存體中的資料格式需求,然後從該處將資料載入至 Delta Lake。 最後,其會清除儲存體中的暫存資料。 如需使用暫存複製資料的詳細資料,請參閱暫存複製

若要使用此功能,請建立 Azure Blob 儲存體連結服務Azure Data Lake Storage Gen2 連結服務,將儲存體帳戶稱為過渡暫存。 然後,在複製活動中指定 enableStagingstagingSettings 屬性。

注意

暫存儲存體帳戶憑證應在 Azure Databricks 叢集設定中預先設定。若要深入了解,請參閱必要條件

範例︰

"activities":[
    {
        "name": "CopyToDeltaLake",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Delta lake output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "AzureDatabricksDeltaLakeSink"
            },
            "enableStaging": true,
            "stagingSettings": {
                "linkedServiceName": {
                    "referenceName": "MyStagingBlob",
                    "type": "LinkedServiceReference"
                },
                "path": "mystagingpath"
            }
        }
    }
]

監視

提供與其他連接器相同的複製活動監視體驗。 此外,因為從 Delta Lake 載入資料和將資料載入至其中是在 Azure Databricks 叢集上執行,所以您可以進一步檢視詳細的叢集記錄監視效能

查閱活動屬性

如需屬性的詳細資訊,請參閱查閱活動

下一步

如需複製活動支援作為來源和接收器的資料存放區清單,請參閱支援的資料存放區和格式