我已将源和奖章阶段加载到他们自己工作区的湖屋中,以实现可扩展性并尝试从一开始就保持整洁。我现在的处境是,在笔记本中,能够从源中提取数据,对其运行一些 SQL,并将其加载到图层中,这将非常有用。非常标准的简单转换步骤。
我可以将这些 Lakehouse 添加到我的笔记本中,以便它们都在那里被引用,但我无法从任何不是该笔记本默认值的 Lakehouse 中获取数据。如果我们无法从中获取数据,为什么还要添加它呢?这是即将发生的事情还是我做错了什么?
当我从 Lakehouse 中的表中选择“加载数据”(该表不是笔记本的默认值)时,它会自动填充单元格,从注释开始:
# With Spark SQL, Please run the query onto the lakehouse which is from the same workspace as the current default lakehouse.
df = spark.sql("SELECT * FROM SilverLayerLakehouse.myTable LIMIT 10")
display(df)
尝试运行该单元会产生错误:
AnalysisException: Table or view not found: SilverLayerLakehouse.myTable; line 1 pos 14; 'GlobalLimit 10 +- 'LocalLimit 10 +- 'Project [*] +- 'UnresolvedRelation [SilverLayerLakehouse, myTable], [], false
如果我将其切换为默认值,它运行良好,但我需要从源加载并存储在 silver 中,中间有一些 SQL。对于“一个湖”,我假设我的数据在任何地方都可见,这就是其背后的整个想法,但我似乎无法让我的笔记本从不同工作区的湖中读取任何内容?我是否遗漏了什么,或者这将是进一步的功能?
首选方法是在 Notebook 所在的工作区中创建一个新的 Lakehouse,并为远程 Lakehouse 中的表创建快捷方式。
或者,您可以使用绝对路径来引用另一个工作区中的表。在 URI 中使用 WorkspaceID 和 Lakehouse ID,如下所示
df = spark.read.format("Delta").load("abfss://<Workspace GUID>@onelake.dfs.fabric.microsoft.com/<Lakehouse GUID>/Tables/SUPPLIER")
参见 https://learn.microsoft.com/en-us/fabric/onelake/onelake-access-api