在 Microsoft Fabric 中的 OneLake 不借助 Spark 創(chuàng)建 Delta 表格
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://XXX@onelake.dfs.fabric.microsoft.com/raw.Lakehouse/Tables/movies", df, storage_options=storage_options)
# write_deltalake用于将DataFrame写入Delta Lake,此处abfss表示使用Azure Blob Storage的文件系统,XXX@onelake.dfs.fabric.microsoft.com是存储的路径,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。
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章