我正在 MS Fabric 层内研究不同的架构设置,并构建一些标准化流程。 我陷入困境的一个领域是将数据从多步骤管道中的笔记本移动到数据仓库的最佳方法是什么。 基本前提是:
原始数据从不同来源摄取到湖屋中。
数据使用第二代数据转换集进行转换,并放置在银色湖屋中。
来自 Silver Lakehouse 的数据被提取到笔记本中,并通过 Python 或 R 中的一组分析组件进行处理。
从这里看来,将处理后的数据帧驱动到黄金仓库进行最终存储和最后一英里消耗似乎存在局限性。
尝试确定最佳模型是否是使用笔记本中的代码直接推送到数据仓库或将数据推送回不同的 silver Lakehouse 表,然后添加另一个管道组件以从 Lakehouse 到仓库或其他东西?
代码方面的担忧是我们的数据公民构建数据流的管道更加困难。
从笔记本到数据仓库似乎没有一个好的过渡方式。
好处是你可以编写T-SQL
INSERT INTO ... SELECT
从lakehouse中提取数据并将其插入到仓库中,并且性能也很合理 - 参见这个示例
CREATE TABLE [research_warehouse].[dbo].[cases_by_continent]
AS
SELECT
FROM [cases_lakehouse].[dbo].[bing_covid-19_data] cases
INNER JOIN [reference_warehouse].[dbo].[bing_covid-19_data] reference
ON cases.[iso3] = reference.[countrycode];
问题可能是,如何触发 T-SQL 查询,特别是如果您的银色转换位于 Fabric 笔记本中。我在这个问题中处理了这个问题 - 如何在 python 笔记本中从 Lakehouse 加载到仓库。
简而言之,您需要从笔记本建立 ODBC 连接,这将需要一些设置(请参阅该问题的答案)。
为了使这个湖屋-仓库转移更容易,我将其构建到我的Fabric库中。使用该库,您的代码可以是这样的
import bifabrik as bif
# service principal used for authentication
bif.config.security.servicePrincipalClientId = '56712345-1234-7890-abcd-abcd12344d14'
# secret of the service principal stored in Key Vault
bif.config.security.keyVaultUrl = 'https://kv-contoso.vault.azure.net/'
bif.config.security.servicePrincipalClientSecretKVSecretName = 'contoso-clientSecret'
bif.config.destinationStorage.destinationWarehouseName = 'WH_GOLD'
bif.config.destinationStorage.destinationWarehouseConnectionString = 'dxtxxxxxxbue.datawarehouse.fabric.microsoft.com'
# run this SparkSQL in the lakehouse and save it as
# [WH_GOLD].[dbo].[HolidayCountsYearly] in the warehouse
bif.fromSql('''
SELECT countryOrRegion `CountryOrRegion`
,YEAR(date) `Year`
,COUNT(*) `PublicHolidayCount`
FROM LH_SILVER.publicholidays
GROUP BY countryOrRegion
,YEAR(date)
''').toWarehouseTable('HolidayCountsYearly').run()
这里有详细的设置和配置选项(如果有些东西不起作用,请告诉我,谢谢:))