将 ETL 管道迁移到 Azure Databricks
本文介绍将其他数据系统上运行的提取、转换、加载 (ETL) 管道迁移到 Azure Databricks 所需的工作。 如果你要迁移 Apache Spark 代码,请参阅根据 Azure Databricks 改编现有的 Apache Spark 代码。
有关从企业数据仓库迁移到湖屋的一般信息,请参阅将数据仓库迁移到 Databricks 湖屋。 有关用于从 Parquet 迁移到 Delta Lake 的信息,请参阅将 Parquet 数据湖迁移到 Delta Lake。
是否可以在 Azure Databricks 上运行 Hive 管道?
大多数 Hive 工作负载只需经过轻微的重构即可在 Azure Databricks 上运行。 Databricks Runtime 支持的 Spark SQL 版本允许许多 HiveQL 构造。 请参阅 Apache Hive 兼容性。 默认情况下,Azure Databricks 包含一个 Hive 元存储。 大多数 Hive 迁移需要解决几个主要问题:
- 需要更新 Hive SerDe 以使用 Azure Databricks 本机文件编解码器。 (将 DDL 从
STORED AS
更改为USING
以使用 Azure Databricks SerDe。) - Hive UDF 必须作为库安装到群集,或重构到本机 Spark。 由于 Hive UDF 已在 JVM 中,因此它们可为许多工作负载提供足够的性能。 请参阅哪些 UDF 最高效?。
- 应更改表的目录结构,因为 Azure Databricks 使用的分区与 Hive 不同。 请参阅何时对 Azure Databricks 上的表进行分区。
如果你选择在初始迁移期间将表更新到 Delta Lake,有许多 DDL 和 DML 语句不受支持。 其中包括:
ROWFORMAT
SERDE
OUTPUTFORMAT
INPUTFORMAT
COMPRESSION
STORED AS
ANALYZE TABLE PARTITION
ALTER TABLE [ADD|DROP] PARTITION
ALTER TABLE RECOVER PARTITIONS
ALTER TABLE SET SERDEPROPERTIES
CREATE TABLE LIKE
INSERT OVERWRITE DIRECTORY
LOAD DATA
- 在
TRUNCATE TABLE
中使用PARTITION (part_spec)
指定目标分区
是否可以在 Azure Databricks 上运行 SQL ETL 管道?
将其他系统中的 SQL 工作负载迁移到 Azure Databricks 通常只需经过轻微的重构,具体取决于源代码中使用特定于系统的协议的程度。 Azure Databricks 将 Delta Lake 用作默认表格式,因此默认情况下,创建的表附带事务保证。
Spark SQL 基本上与 ANSI 兼容,但可能存在一些行为差异。 请参阅 Databricks Data Intelligence 平台与企业数据仓库有何不同?。
由于数据系统倾向于以不同的方式配置外部数据访问,因此重构 SQL ETL 管道的大部分工作可能是配置对这些数据源的访问,然后更新逻辑以使用这些新连接。 Azure Databricks 提供了用于连接到多个数据源进行引入的选项。
是否可以在 Azure Databricks 上运行 dbt ETL 管道?
Azure Databricks 提供与 dbt 的本机集成,你只需进行轻微的重构即可利用现有的 dbt 脚本。
Delta Live Tables 提供优化的 Databricks 本机声明性 SQL 语法,用于创建、测试和部署管道。 虽然可以在 Azure Databricks 上利用 dbt,但对 Delta Live Tables 进行少量代码重构可能会降低在 Azure Databricks 上运行管道的总成本。 请参阅什么是增量实时表?。
是否可以将无服务器云函数迁移到 Azure Databricks?
由于自定义无服务器云函数的扩展性和多样性,我们难以提供通用的建议,但这些函数的最常见用例之一是等待文件或数据出现在某个位置或消息队列中,然后相应地执行某项操作。 虽然 Azure Databricks 不支持基于云条件触发工作负载的复杂逻辑,但你可以将结构化流式处理与作业结合使用,以增量方式处理数据。
使用自动加载程序从云对象存储进行优化的数据引入。 结构化流式处理可以准实时处理流式处理源中的数据。
是否可以从 Azure Databricks 上的其他数据系统运行语法?
以除 SQL、Apache Spark 或 Hive 以外的语言定义的 ETL 管道在 Azure Databricks 上运行之前可能需要经过大幅的重构。 Azure Databricks 提供了帮助客户从目前使用的大多数数据系统迁移的体验,并可能提供资源来帮助你快速开始迁移。