【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 架构的流程大致如下:

相关推荐
编码者卢布20 小时前
【Azure Developer】IIS w3wp.exe 的 -m 参数:一个未被记录的管道模式标识
microsoft·flask·azure
编码者卢布2 天前
【Azure App Service】PHP页面上传文件413错误的解决方案
microsoft·php·azure
weixin_307779137 天前
使用COPY INTO从S3导入CSV文件到Azure Synapse Dedicated SQL Pool表的问题分析与自动化验证方案
sql·自动化·azure
diablobaal8 天前
云计算学习100天-第102天-Azure入门4
学习·云计算·azure
Elastic 中国社区官方博客8 天前
将 Logstash 管道从 Azure Event Hubs 迁移到 Kafka 输入插件
大数据·数据库·elasticsearch·microsoft·搜索引擎·kafka·azure
海兰8 天前
Logstash 从 Azure Event Hubs 插件迁移至 Kafka 插件完整实战指南
kafka·linq·azure
Ashmcracker9 天前
告别手写 Inventory:Terraform 与 Ansible 在 Azure 上的联动,动态清单自动接管云主机
ansible·azure·terraform
Ashmcracker10 天前
Codex Desktop如何接入Azure OpenAI?AI Foundry部署GPT‑5.3‑codex 实操
人工智能·gpt·microsoft·azure
Ashmcracker10 天前
Azure Key Vault 证书如何在 AKS 中同步为 Kubernetes Secret?附权限配置与 YAML 示例
kubernetes·flask·azure
左手厨刀右手茼蒿13 天前
Flutter 三方库 flutter_azure_tts 深度链接鸿蒙全场景智慧语音中枢适配实录:强势加载云端高拟真情感发音合成系统实现零延迟超自然多端协同-适配鸿蒙 HarmonyOS ohos
flutter·harmonyos·azure