Microsoft Fabric 中的 OneLake 提供一个统一的存储层,该存储层会自动随每个 Microsoft Fabric 租户提供。这允许创建具有多个 Microsoft Fabric 数据湖和数据仓库的工作空间,所有数据都会存储在 OneLake 中。OneLake 的底层存储是 Azure Data Lake Storage Gen2 (ADLS Gen2),支持结构化和非结构化数据的存储。OneLake 使用相同的 ADLS Gen2 API 和 SDK,确保与现有 ADLS Gen2 应用程序兼容。这意味着我们可以使用例如 Python 来读取和写入 OneLake 中的数据。
可以通过 OneLake 访问数据,使用与 Windows 文件系统集成的 OneLake 文件管理器,使用户能够像访问本地文件一样探索和访问 Fabric 湖仓和仓库中的数据。如下面的图片所示,你可以通过浏览工作区、湖仓和仓库来访问数据,就像在本地文件中一样。
因为可以直接像操作本地文件系统那样与OneLake进行交互,我决定尝试从本地计算机使用Delta-rs和Microsoft Fabric创建一个Delta表。在另一篇文章中,我讨论了没有Spark的情况下如何使用Delta-rs Python包来处理Delta表。如下面的代码示例所示,一个Python脚本可以通过OneLake将数据保存到Lakehouse中。
import pandas as pd # 导入pandas库,用于数据操作
from deltalake import write_deltalake, DeltaTable # 导入deltalake库,用于Delta Lake操作
import time # 导入time库,用于时间处理
start_time = time.time() # 记录开始时间
df = pd.read_csv("d:\\temp\\title.basics.tsv.gz", low_memory=False, delimiter="\t") # 读取临时文件夹中的压缩TSV文件
write_deltalake( # 将数据写入Delta Lake表
"C:\\Users\\XXXX\\OneLake - Microsoft\\mk_test\\test.Lakehouse\\Tables\\movies" # 指定写入的Delta Lake表路径
, df)
通过导航到 Microsoft Fabric 数据湖并展开表的分类,你应该能看到我们脚本创建的表。它可以像使用 Spark 代码创建的表那样进行探索。哇哦!
查看这些表格没问题,所有数据都显示出来了。
然而,在尝试使用Python和Delta-rs从本地机器读取此表时,我遇到了一个问题。一个错误出现了,但不清楚问题出在OneLake explorer还是Delta-rs。作为替代选择,Delta-rs支持直接从ADLS Gen2读取文件。使用来自Microsoft Fabric的abfss
路径可以允许数据访问。以下是不用OneLake文件浏览器保存数据的代码示例。要运行此代码,请先安装azure-identity
包以进行Azure身份验证。该代码使用默认身份验证,但也可以选择使用服务主体。对于使用默认身份验证,您需要安装Azure CLI并运行az login
命令。
import pandas as pd
# 导入pandas库用于数据处理
from deltalake import write_deltalake, DeltaTable
# 导入deltalake模块中的write_deltalake和DeltaTable类
from azure.identity import DefaultAzureCredential
# 导入DefaultAzureCredential类用于获取Azure认证凭证
# 获取Azure存储的令牌
delta_token = DefaultAzureCredential().get_token("https://storage.azure.com/.default").token
# 此URL用于获取Azure存储的默认令牌
# 设置存储选项,包含令牌和Fabric端点使用标志
storage_options={"bearer_token": delta_token, "use_fabric_endpoint": "true"}
# bearer_token是承载令牌,use_fabric_endpoint表示是否使用Fabric端点
# 读取CSV文件
df = pd.read_csv("d:\\temp\\title.basics.tsv.gz", low_memory=False, delimiter="\t")
# 文件路径为Windows系统的示例路径
# 将数据写入Delta Lake
write_deltalake("abfss://[email protected]/raw.Lakehouse/Tables/movies", df, storage_options=storage_options)
# write_deltalake用于将DataFrame写入Delta Lake,此处abfss表示使用Azure Blob Storage的文件系统,[email protected]是存储的路径,raw.Lakehouse/Tables/movies是目标路径
DeltaTable用于表示Delta Lake中的表,此处未直接使用,但它是write_deltalake操作的基础。
使用 abfss
协议读取文件很简单。我能够从 Lakehouse 读取 Delta 表数据并将其转换为 Pandas 数据帧来展示内容,一切顺利。
虽然还有一些bug,但是使用Python与Microsoft Fabric集成的简便性确实很不错,令人印象深刻。这种开放性使得我们可以访问Microsoft Fabric之外的数据。但是请注意,如果在Azure门户中关闭了Microsoft Fabric的容量,则无法访问数据。在此期间尝试访问会导致如下错误信息:“无法完成此操作,因为当前Fabric容量XXX不可用。”请确保开启Fabric容量以访问数据。
如果你觉得这篇文章有启发性,欢迎通过点击“点赞”按钮或在LinkedIn上点赞来表达你的欣赏。你的支持非常宝贵,谢谢。对于任何问题或建议,欢迎通过LinkedIn联系我LinkedIn。
共同學習,寫下你的評論
評論加載中...
作者其他優質文章