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

相关推荐
Azure DevOps6 小时前
Azure DevOps Service:连接到Microsoft Entra(AAD)
运维·microsoft·azure·devops
Azure DevOps7 小时前
Azure DevOps Server 2022.2 补丁(Patch 3)
运维·microsoft·azure·devops
office大师姐2 天前
微软AI900认证备考全攻略:开启AI职业进阶之路
人工智能·microsoft·ai·自然语言处理·微软·azure
Azure DevOps2 天前
Azure DevOps Server用户使用GithubCopilot
运维·microsoft·azure·devops
發糞塗牆3 天前
【Azure 架构师学习笔记】- Azure Databricks (13) -- 搭建Medallion Architecture part 1
azure·azuredatabricks
Monee..3 天前
【azure openai】用tts实现语音对话【demo】
python·azure·语音助手
怒放de生命20104 天前
springai系列(二)从0开始搭建和接入azure-openai实现智能问答
microsoft·flask·azure
weixin_3077791315 天前
Azure Synapse Dedicated SQL Pool统计指定表中各字段的空值、空字符串或零值比例
数据仓库·sql·云计算·azure
發糞塗牆15 天前
【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建
azure·azuredatabricks