【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 Developer】通过 API 获取 Azure VM 信息实践指南 Part 2(Azure China)
python·flask·azure
liuqs3326 天前
AWS、Azure接连宕机后,“云存储”的这个软肋被重新摆上台面
云计算·azure·aws
编码者卢布11 天前
【Azure Key Vault】资源组被误删后,如何恢复 Azure Key Vault?
microsoft·flask·azure
宝桥南山18 天前
Azure - 检查一下是否需要在Microsoft Extra ID中配置Passkeys认证方法
microsoft·微软·sass·azure
mit6.82420 天前
AKS--Azure Managed Kubernetes
kubernetes·flask·azure
编码者卢布1 个月前
【Azure APIM】通过 API Management 公开API为 MCP Server 的试验 (二)
microsoft·flask·azure
编码者卢布1 个月前
【Azure APIM】通过 API Management 公开现有 MCP Server 的试验 (一)
microsoft·flask·azure
立心者01 个月前
Sdcb Chats .. 发布,彻底移除 Azure.AI.OpenAI 专用包
人工智能·flask·azure
韭菜炒鸡肝天1 个月前
【App Service】在Azure环境中如何查看App Service实例当前的网络连接情况呢?
microsoft·flask·azure
国际云,接待1 个月前
Azure Front Door WAF实战:托管规则、限速与日志查询
microsoft·网络安全·云计算·azure·front door