如MS doc 中所述,您可以使用功能enablePartitionDiscovery
。
来源:分区文件:
源数据集:
刚刚提到了容器名称,并将目录和文件字段留空。我们将WildCard paths
在复制活动中过滤它们。
Copy Activity
根据您的文件路径配置源:
注意:您可以跳过第 4 步,即带有 的附加列$$FILEPATH
,仅供参考。您可以删除此位,因为您已经使用enablePartitionDiscovery
.
对于要选择的单个文件夹,您将进行如下设置。
通配符路径: sink / columnparts / time_period=202105 / *.parquet
对于多个文件夹time_period=202105
,time_period=202106
......如前面的sinp中所见,设置如下。
**
将取代父文件夹中的任何文件夹columnparts
通配符路径: sink / columnparts / ** / *.parquet
分区根路径:这应该指向所有分区文件夹所在的父文件夹。
在我的例子中:sink/columnparts
启用分区发现时必须提供分区根路径。
接收器:可选更新现有表或创建一个新表。
从 SQL DB 中查看: time_period
列保存值202105
time_period=202105/part-00004-fcbe0bf5-2c93-45f5-9bb2-2f9089a3e83a-c000.snappy.parquet
如果您看到此错误:
您有一个未更新的映射!在映射部分,您可以clear
或reset
模式Import schema
再次确定。
就我而言,它是附加列file_path
- 或者 -
$$FILEPATH
是一个保留变量,您不能在表达式生成器或函数中使用它来操作。
相反,如果您可以在复制到 SQL DB 后合并一个步骤,即使用如下存储过程。
where columnpath
包含$$FILEPATH
您已经管理的完整文件路径。StoreParquetTest
是在 SQL 中创建的表sink
CREATE PROCEDURE trimpath
AS
UPDATE StoreParquetTest
SET path = SUBSTRING(path,(CHARINDEX('=',path) + 1), ((CHARINDEX('/',path) - CHARINDEX('=',path) -1)))
GO
现在您可以在复制活动之后使用管道中的存储过程活动。