本文概述了如何在管道中使用复制活动来从 Azure Databricks 复制数据及将数据复制到 Azure Databricks。
先决条件
若要使用此 Azure Databricks 连接器,需要在 Azure Databricks 中设置群集。
- 若要将数据复制到 Azure Databricks,复制活动会调用 Azure Databricks 群集从 Azure 存储(原始源或暂存区域)读取数据,服务首先通过内置暂存复制写入源数据。 从 Azure Databricks 作为目标了解更多信息。
- 同样,若要从 Azure Databricks 复制数据,复制活动会启动 Azure Databricks 群集,将数据写入 Azure 存储。这个存储区域可以是最初的目标,也可以是一个暂存区,服务会通过内置的暂存复制功能从这里将数据继续写入最终的目标。 从 Azure Databricks 作为源了解详细信息。
Databricks 群集需要有权访问 Azure Blob 或 Azure Data Lake Storage Gen2 帐户,该帐户既是用于源/目标/暂存的存储容器/文件系统,也需要在其中写入 Azure Databricks 表的容器/文件系统。
若要使用 Azure Data Lake Storage Gen2,你可以在 Databricks 群集上的 Apache Spark 配置中配置服务主体。 根据直接使用服务主体访问中的步骤操作。
若要使用 Azure Blob 存储,你可以在 Databricks 群集上的 Apache Spark 配置中配置存储帐户访问密钥或 SAS 令牌。 按照使用 RDD API 访问 Azure Blob 存储中的步骤进行操作。
在复制活动执行期间,如果你配置的群集已终止,则该服务会自动启动它。 如果你使用创作 UI 来创作管道,则对于数据预览之类的操作,你需要有一个实时群集,该服务不会代表你启动群集。
指定群集配置
在“群集模式”下拉列表中,选择“标准” 。
在“Databricks Runtime 版本”下拉列表中,选择一个 Databricks 运行时版本。
-
spark.databricks.delta.optimizeWrite.enabled true spark.databricks.delta.autoCompact.enabled true 根据集成和缩放需求配置群集。
有关群集配置的详细信息,请参阅配置群集。
支持的配置
有关复制活动下每个选项卡的配置,请分别转到以下部分。
概况
对于 “常规 ”选项卡配置,请转到 “常规”。
来源
复制活动的 “源 ”选项卡下的 Azure Databricks 支持以下属性。
需要以下属性:
连接:从连接列表中选择 Azure Databricks 连接。 如果不存在连接,请创建新的 Azure Databricks 连接。
使用查询:选择 表 或 查询。
在“高级”下,可以指定以下字段:
日期格式:使用日期格式将日期类型设置为字符串。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值
yyyy-MM-dd。时间戳格式:使用时间戳格式将时间戳类型设置为字符串。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]。
从 Azure Databricks 直接复制
如果目标数据存储和格式符合本节中所述的条件,则可以使用复制活动直接从 Azure Databricks 复制到目标。 该服务将检查设置,如果不符合以下条件,复制活动运行将会失败:
目标连接是 Azure Blob 存储或 Azure Data Lake Storage Gen2。 应当在 Azure Databricks 群集配置中预先配置帐户凭据,请从先决条件中了解详细信息。
目标数据格式为 Parquet、DelimitedText 或 Avro,其配置如下,并指向文件夹而不是文件。
- 对于 Parquet 格式,压缩编解码器为 None、 snappy 或 gzip。
- 对于“DelimitedText”格式:
-
rowDelimiter是任意单个字符。 -
compression可以是 None、 bzip2、 gzip。 - 不支持
encodingNameUTF-7。
-
- 对于 Avro 格式,压缩编解码器为 None、 deflate 或 snappy。
如果将数据复制到 DelimitedText,则复制活动接收器
fileExtension中需要为“.csv”。在复制活动映射中,未启用类型转换。
从 Azure Databricks 暂存复制
如上一部分所述,如果接收器数据存储或格式与直接复制条件不匹配,请通过临时的 Azure 存储实例启用内置的暂存复制。 分阶段复制功能还能提供更高的处理吞吐量。 服务将数据从 Azure Databricks 导出到暂存存储,然后将数据复制到目的地存储,最后从暂存存储中清理临时数据。
若要使用此功能,请创建一个将存储帐户称为临时暂存的 Azure Blob 存储 或 Azure Data Lake Storage Gen2 。 然后,在复制活动中指定 enableStaging 和 stagingSettings 属性。
注释
应当在 Azure Databricks 群集配置中预先配置暂存存储帐户凭据,请从先决条件中了解详细信息。
目的地
复制活动的 “目标 ”选项卡下的 Azure Databricks 支持以下属性。
需要以下属性:
连接:从连接列表中选择 Azure Databricks 连接。 如果不存在连接,请创建新的 Azure Databricks 连接。
目录:目录充当 Unity 目录框架中的最高级别容器,它允许将数据组织到数据库和表中。
数据库:从下拉列表中选择数据库或键入数据库。
表:指定要写入数据的表的名称。 从下拉列表中选择该表,或键入表名称。
在“高级”下,可以指定以下字段:
复制前脚本:指定每次运行时,复制活动将数据写入到目标表之前要执行的脚本。 可以使用此属性来清理预加载的数据。
时间戳格式:使用时间戳格式将时间戳类型设置为字符串。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值
yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]。
直接复制到 Azure Databricks
如果源数据存储和格式符合本节中所述的条件,则可以使用复制活动直接从源复制到 Azure Databricks。 该服务将检查设置,如果不符合以下条件,复制活动运行将会失败:
源连接是 Azure Blob 存储或 Azure Data Lake Storage Gen2。 应当在 Azure Databricks 群集配置中预先配置帐户凭据,请从先决条件中了解详细信息。
源数据格式为 Parquet、DelimitedText 或 Avro,其配置如下,并指向文件夹而不是文件。
- 对于 Parquet 格式,压缩编解码器为 None、 snappy 或 gzip。
- 对于“DelimitedText”格式:
-
rowDelimiter为默认值或任意单个字符。 -
compression可以是 None、 bzip2、 gzip。 - 不支持
encodingNameUTF-7。
-
- 对于 Avro 格式,压缩编解码器为 None、 deflate 或 snappy。
在“复制”活动源中:
-
wildcardFileName仅包含通配符*而未包含?,未指定wildcardFolderName。 - 未指定
prefix、modifiedDateTimeStart、modifiedDateTimeEnd和enablePartitionDiscovery。
-
在复制活动映射中,未启用类型转换。
阶段性复制到 Azure Databricks
如上一部分所述,如果源数据存储或格式与直接复制条件不匹配,请通过临时的 Azure 存储实例启用内置的暂存复制。 分阶段复制功能还能提供更高的处理吞吐量。 该服务会自动将数据转换为过渡存储,然后将数据从那里加载到 Azure Databricks 中,以满足数据格式要求。 最后,它会从存储中清理临时数据。
若要使用此功能,请创建一个将存储帐户称为临时暂存的 Azure Blob 存储 或 Azure Data Lake Storage Gen2 。 然后,在复制活动中指定 enableStaging 和 stagingSettings 属性。
注释
应当在 Azure Databricks 群集配置中预先配置暂存存储帐户凭据,请从先决条件中了解详细信息。
映射
对于“映射”选项卡配置,请转到在“映射”选项卡下配置映射。
设置
对于“设置”选项卡配置,请转到“设置”选项卡下的“配置其他设置”。
表摘要
下表包含有关 Azure Databricks 中的复制活动的详细信息。
源信息
| 名称 | DESCRIPTION | 价值 | 必选 | JSON 脚本属性 |
|---|---|---|---|---|
| 连接 | 与源数据存储的连接。 | < 您的 Azure Databricks 连接 > | 是的 | 连接 |
| 使用查询 | 读取数据的方式。 应用“表”以从指定表中读取数据,或应用“查询”以使用查询读取数据。 | • 表 • 查询 |
否 | / |
| 对于 表 | ||||
| 目录 | 目录充当 Unity 目录框架中的最高级别容器,它允许将数据组织到数据库和表中。 | < 您的目录 > | 否(如果为 null,请选择默认目录) | 目录 |
| 数据库 | 用作源的数据库。 | < 你的数据库 > | 否 | 数据库 |
| 表 | 用于读取数据的源数据表。 | < 你的表名称 > | 否 | 表 |
| 对于 查询 | ||||
| 查询 | 指定用于读取数据的 SQL 查询。 对于“按时间顺序查看”控制,请遵循以下模式: - SELECT * FROM events TIMESTAMP AS OF timestamp_expression- SELECT * FROM events VERSION AS OF version |
< 你的查询 > | 否 | 查询 |
| 日期格式 | 将字符串格式化为具有日期格式的日期类型。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值 yyyy-MM-dd。 |
< 日期格式 > | 否 | 日期格式 |
| 时间戳格式 | 将字符串格式化为具有时间戳格式的时间戳类型。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]。 |
< 时间戳格式 > | 否 | 时间戳格式 |
目的地信息
| 名称 | DESCRIPTION | 价值 | 必选 | JSON 脚本属性 |
|---|---|---|---|---|
| 连接 | 与目标数据存储的连接。 | < 您的 Azure Databricks 连接 > | 是的 | 连接 |
| 目录 | 目录充当 Unity 目录框架中的最高级别容器,它允许将数据组织到数据库和表中。 | < 您的目录 > | 否(如果为 null,请选择默认目录) | 目录 |
| 数据库 | 用作目标的数据库。 | < 你的数据库 > | 是的 | 数据库 |
| 表 | 要写入数据的目标数据表。 | < 你的表名称 > | 是的 | 表 |
| 预复制脚本 | 指定在每次运行中将数据写入目标表之前要执行的复制活动的脚本。 可以使用此属性来清理预加载的数据。 | < 你的复制前脚本> | 否 | preCopyScript |
| 时间戳格式 | 将字符串格式化为具有时间戳格式的时间戳类型。 自定义日期格式遵循日期/时间模式中的格式。 如果未指定,则它使用默认值 yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]。 |
< 时间戳格式 > | 否 | 时间戳格式 |