将Azure Blob分区添加到Azure SQL表 [英] Add Azure Blob Partitions to Azure SQL Table

查看:47
本文介绍了将Azure Blob分区添加到Azure SQL表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Azure Blob中对拼图文件进行了分区,并将其复制到Azure SQL。如何将分区名称放入SQL表?

我已经知道如何通过在复制活动(图1和图2)的源数据部分中添加一个额外的列来将完整的文件路径放入SQL表中,但我正在尝试如何将完整的文件路径向下仅表示为分区名(202105)。

在复制活动中的源数据的数据预览中,它显示了仅带有分区名称的time_Period列(图3)。但是,当它在SQL中显示时,它对于所有行都是空的(或者它是完整的文件路径,这取决于我是否在复制活动的源数据部分添加了额外的列)。

图片1:

图2:

图3:

我已尝试在Azure SQL中将Time_Period的数据类型更改为int。我已尝试分析$$FILEPATH,但均未奏效。

我基本上是从头开始,因为我相信有更好的办法。 额外的背景here和可能的here

类似于this

推荐答案

here在MS文档中所述,您可以使用enablePartitionDiscovery功能。

来源:分区文件:

源数据集:

刚才提到了容器名称,并将目录和文件字段留空。我们将在复制活动中使用WildCard paths筛选它们。

根据您的文件路径在Copy Activity中配置源代码:

注意:您可以跳过步骤4,即添加$$FILEPATH一栏,仅供参考。您可以删除此位,因为您已经使用enablePartitionDiscovery获取了Ready列。

对于要拾取的单个文件夹,您需要如下设置。

通配符路径:sink / columnparts / time_period=202105 / *.parquet

对于多个文件夹time_period=202105time_period=202106.....如前面的SINP所示,设置如下。

**将取代父文件夹中的任何文件夹columnparts

通配符路径:sink / columnparts / ** / *.parquet

分区根路径:该路径应指向所有分区文件夹所在的父文件夹。

在我的示例中:sink/columnparts

启用分区发现时必须提供分区根路径。

接收器:可选更新现有表或仅创建新表。

从SQL数据库查看:time_period列保存值202105

time_period=202105/part-00004-fcbe0bf5-2c93-45f5-9bb2-2f9089a3e83a-c000.snappy.parquet

如果您看到此错误:

您的映射未更新!在映射部分中,您可以再次使用clearreset模式和Import schema,以确保这一点。😊

在我的案例中,它是附加栏file_path

--OR--

$$FILEPATH是保留变量,不能在表达式生成器或函数中使用它进行操作。

相反,如果您可以在复制到SQL DB后合并一个步骤,即如下所示使用存储过程。

WHERE列path保存您已经管理过的从$$FILEPATH接收的完整文件路径。StoreParquetTest是在SQL中创建的表sink

CREATE PROCEDURE trimpath
AS
    UPDATE StoreParquetTest
    SET path = SUBSTRING(path,(CHARINDEX('=',path) + 1), ((CHARINDEX('/',path) - CHARINDEX('=',path) -1)))
GO

现在您可以在复制活动之后使用管道中的存储过程活动。

这篇关于将Azure Blob分区添加到Azure SQL表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆