【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://[email protected]/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://[email protected]/transformed_data')\
        .save()

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

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

sql 复制代码
SELECT * FROM parquet.`abfss://[email protected]/transformed_data`

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

相关推荐
试着2 天前
【新技术】微软 Azure Test Impact Analyzer (TIA) 全面解析
测试工具·microsoft·azure·测试覆盖率
weixin_307779133 天前
Azure Data Factory ETL设计与调度最佳实践
数据仓库·性能优化·云计算·azure·etl
珠峰下的沙砾6 天前
如何将 Azure Active Directory (Azure AD) 作为 SAML IdP 对接到 Keycloak
microsoft·flask·azure
weixin_307779138 天前
实现Azure Synapse Analytics安全地请求企业内部API返回数据
开发语言·python·云计算·azure
weixin_307779139 天前
实现Azure Function安全地请求企业内部API返回数据
开发语言·python·云计算·azure
weixin_3077791312 天前
Azure Synapse Dedicated SQL pool里大型表对大型表分批合并数据的策略
数据仓库·sql·microsoft·azure
office大师姐21 天前
微软 SC-900 认证-考核Azure 和 Microsoft 365中的安全、合规和身份管理(SCI)概念
安全·microsoft·云计算·azure
{⌐■_■}24 天前
【Kubernetes】Kubernetes 在云平台(AWS EKS、GCP GKE、Azure AKS)的使用有何不同
kubernetes·azure·aws
csdn_aspnet25 天前
使用 .NET 9 和 Azure 构建云原生应用程序:有什么新功能?
microsoft·云原生·azure
Elastic 中国社区官方博客1 个月前
Elasticsearch:使用 Azure AI 文档智能解析 PDF 文本和表格数据
大数据·人工智能·elasticsearch·搜索引擎·pdf·全文检索·azure