【Azure 架构师学习笔记】- Azure Databricks (14) -- 搭建Medallion Architecture part 2

本文属于【Azure 架构师学习笔记】系列

本文属于【Azure Databricks】系列。

接上文 【Azure 架构师学习笔记】- Azure Databricks (13) -- 搭建Medallion Architecture part 1

前言

上文搭建了ADB 与外部的交互部分,本篇搭建ADB 内部配置来满足medallion 架构。

Volumes

相对于直接使用external location, 使用Volumes更加具有安全性和可扩展性,因为volume中不包含具体的路径,在编码时只需要指定volume名字,就如变量一样,哪怕external location的路径改变了,只需要修改volume和external location的映射关系即可,不需要修改代码。另外也避免了具体路径的暴露,加强了安全性。

Volumnes分为两类:managed和external。 managed 建立在UC schema创建时所在的托管区域,也就是说不需要指定具体路径。本质上他们就是一个指针,指向UC 管理的存储区域。

external volume 则是一个链接,指向使用storeage credential连接的外部路径(这里为ADLS),但是也由UC 管控。

bash 复制代码
CREATE EXTERNAL VOLUME dev_sales.sources.landing
LOCATION 'abfss://<container>@<storage-account>.dfs.core.windows.net/'

上图为Databricks UC 的层次结构图,可以看到Volume是在最底层,所以创建volume时,需要先创建schema(Catalog在前面已经创建过了)。

如果你有MetaStore admin,就可以创建新的catalog,比如上面命令中的"dev_sales"

  • Managed Tables
    存储成delta table,由Databricks管理。不建议使用Databricks之外的工具操作这些表。同时他们的位置由GUID来定义,所以使用外部工具将很难定位、标识具体的表。
  • External Tables
    基于external location创建的表。

Managed table安全、受UC控制、但限制在UC内部;external table 灵活,支持多种源,但不受UC控制。所以选择时需要权衡。同时这些如果在创建时没有指定具体路径,那么自动继承自所属的schema, 而如果schema在创建时也没有指定路径,则schema会继承所属catalog的路径。

来自于Databricks官网的示意图:添加链接描述

Bronze to Silver

下面先准备一个excel,这里把第一列用"-"来连接两个字母,例子比较随意,只是用来演示而已。

把excel转成parquet(非必要)之后,上传到ADLS 的Bronze container中。

使用下面的python代码读取文件,如果提示需要安装某些依赖包,则按需求安装即可。

python 复制代码
from pyspark.sql import SparkSession

# 初始化 Spark 会话(确保集群已附加到 UC)
spark = SparkSession.builder.getOrCreate()

# 通过 abfss 路径读取 Parquet
parquet_path = "abfss://bronze@medallionadls01.dfs.core.windows.net/uc_source.parquet"
df = spark.read.parquet(parquet_path)

# 显示数据
display(df)

结果如下:

数据处理

下面模拟进行数据的处理, 把第一列截取"-"前的数据,结果如下图:

python 复制代码
df = df.withColumn('a',F.split(df['a'],'-')[0])
df.display()

使用下面代码把结果保存到Silver container:

python 复制代码
df.write.format('parquet')\
    .mode('append')\
        .option('path','abfss://silver@medallionadls01.dfs.core.windows.net/transformed_data')\
        .save()

保存后可以在ADLS 上查看,但是它并不是按照单个文件存储:

可以在ADB 中使用下面SQL 命令查询保存的文件:

sql 复制代码
SELECT * FROM parquet.`abfss://silver@medallionadls01.dfs.core.windows.net/transformed_data`

关于从Silver到Gold, 更多的就是一些业务逻辑的处理上。整个Medallion 架构的流程大致如下:

相关推荐
编码者卢布3 天前
【Azure APIM】通过 API Management 公开API为 MCP Server 的试验 (二)
microsoft·flask·azure
编码者卢布4 天前
【Azure APIM】通过 API Management 公开现有 MCP Server 的试验 (一)
microsoft·flask·azure
立心者06 天前
Sdcb Chats .. 发布,彻底移除 Azure.AI.OpenAI 专用包
人工智能·flask·azure
韭菜炒鸡肝天6 天前
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
microsoft·flask·azure
国际云,接待11 天前
Azure Front Door WAF实战:托管规则、限速与日志查询
microsoft·网络安全·云计算·azure·front door
编码者卢布16 天前
【Azure Policy】Policy修正任务为Azure资源添加诊断日志报错问题的调查
microsoft·flask·azure
编码者卢布18 天前
【Azure APIM】APIM的诊断日志与Application Insights的日志是否可以串联为一个端到端的日志链路呢?
python·flask·azure
MicrosoftReactor22 天前
技术速递|基于 OpenClaw、MCP 和 Azure Container Apps 构建自主 Microsoft Teams 智能体
microsoft·agent·azure·teams·mcp
编码者卢布23 天前
【Azure Application Insights】公网白名单应用如何使用 Application Insights 可用性测试?
flask·azure·可用性测试
IT大白鼠1 个月前
CVE-2026-7531 Azure Linux MariaDB PQC 内存破坏漏洞详解
linux·mariadb·azure·cve-2026-7531