将Python与独立管道配合使用

可以在笔记本中使用 Python 创建和刷新独立的物化视图和流式表。 在 Python 笔记本中编写管道,并使用 spark.sql() 运行它们。 这样就可以与其他基于Python的笔记本工作流一起管理独立管道。

独立管道的 Python 源代码需要连接到无服务器通用计算的笔记本。 不能使用Python从 Databricks SQL 仓库创建或刷新独立管道,因为仓库运行 SQL 语句,而不是Python笔记本。 若要改用 SQL 仓库,请参阅 “使用独立具体化视图 ”和 “使用独立流式处理表”。

Important

在无服务器通用计算上通过笔记本创建和刷新独立物化视图及流式表目前处于 Beta 阶段,并且仅在部分区域可用。 请参阅 笔记本电脑

要求

若要使用 Python 创建和刷新独立管道,您需要一个连接到基于 Databricks Runtime 18.1 或更高版本的无服务器通用计算的笔记本。 有关要求的完整列表,包括区域可用性和权限,请参阅 Notebooks

工作原理

在Python笔记本中,将从 Databricks SQL 仓库运行的相同语句传递给 spark.sql()。 独立物化视图和流式表的语法完全相同;区别仅在于提交语句的方式。 与仓库一样,每个 CREATEREFRESH 语句都运行无服务器管道来处理操作。

默认情况下,会话spark在Azure Databricks笔记本中可用,因此无需导入。

创建具体化视图

以下示例从基表 mv1 创建具体化视图 base_table1

spark.sql("""
  CREATE OR REPLACE MATERIALIZED VIEW mv1
  AS SELECT
    date,
    sum(sales) AS sum_of_sales
  FROM base_table1
  GROUP BY date
""")

有关完整 CREATE MATERIALIZED VIEW 详细信息(例如计划和触发式刷新),请参阅创建具体化视图

创建流表

以下示例从raw_data表创建流式表sales

spark.sql("""
  CREATE OR REFRESH STREAMING TABLE sales
  AS SELECT product, price FROM STREAM raw_data
""")

有关完整 CREATE STREAMING TABLE 详细信息(包括使用自动加载器加载文件和计划任务),请参阅使用独立流式表

刷新具体化视图或流式表

使用 REFRESH 语句,利用其数据源中的最新数据更新独立表:

spark.sql("REFRESH MATERIALIZED VIEW mv1")
spark.sql("REFRESH STREAMING TABLE sales")

在无服务器常规计算中,刷新是同步的。 不支持异步刷新( ASYNC 关键字)。 请参阅 无服务器常规计算

参数化语句

若要将Python代码中的值传递到语句而不是硬编码,请在 SQL 中使用命名参数标记,并通过args参数spark.sql()提供其值。 对于字面值,请直接使用诸如 :min_sales 之类的标记。 仅当参数是对象名称(如表、视图或架构)时,才会包装标记 IDENTIFIER() ,因为标识符不能替换为纯字符串值。

以下示例将物化视图名称和筛选值都参数化:

mv_name = "main.sales.regional_sales"
min_sales = 1000

spark.sql("""
  CREATE OR REPLACE MATERIALIZED VIEW IDENTIFIER(:mv)
  AS SELECT
    region,
    sum(sales) AS sum_of_sales
  FROM base_table1
  WHERE sales > :min_sales
  GROUP BY region
""", args={
  "mv": mv_name,
  "min_sales": min_sales,
})

有关详细信息,请参阅 参数标记IDENTIFIER 子句

运行其他语句

您可以在 Python 笔记本中将任何独立的物化视图或流式表语句传递给 spark.sql() 来运行,包括用于安排刷新、修改表或删除表的语句。 若要了解如何使用具体化视图和流式处理表(包括 SQL 语法),请参阅使用独立具体化视图和使用独立流式处理表

Limitations

在无服务器常规计算上创建的独立具体化视图和流式处理表具有额外的限制,例如不支持异步刷新,也不支持每表成本归因。 有关完整列表,请参阅 无服务器常规计算

其他资源