rob*_*ber 5 azure-data-factory
我设置了一个 DataFactory 管道,用于获取 Azure Data Lake Storage Gen2 中的文件列表,然后使用 ForEach 循环迭代每个文件。
我使用“获取元数据”活动来生成文件列表,其输出的参数是“子项目”。
我想确保列表(子项目)始终按名称顺序排序。我的问题是子项目的默认排序方法是什么,或者我可以手动排序吗?
谢谢
"name": "GetMetadata",
"description": "",
"type": "GetMetadata",
"dependsOn": [
{
"activity": "Execute Previous Activity",
"dependencyConditions": [
"Succeeded"
]
}
],
"policy": {
"timeout": "7.00:00:00",
"retry": 0,
"retryIntervalInSeconds": 30,
"secureOutput": false,
"secureInput": false
},
"userProperties": [],
"typeProperties": {
"dataset": {
"referenceName": "Folder",
"type": "DatasetReference"
},
"fieldList": [
"childItems"
]
}
},
Run Code Online (Sandbox Code Playgroud)
我实施了以下解决方案来克服在不使用 Azure Functions 的情况下获取元数据默认排序顺序的问题:
您可以在下面找到:
3. 查找活动的配置
将 Get Metadata 活动的输出转换为 ForEach 活动的输入的 T-SQL 存储过程。
ALTER PROCEDURE Tech.spSortBlobMetadata
@Json NVARCHAR(MAX)
, @SortOder VARCHAR(5) = 'DESC'
, @Debug INT = 0
AS
/***************************************************************************
EXEC Tech.spSortBlobMetadata
'[{"name":"dt=2020-06-17","type":"Folder"},{"name":"dt=2020-06-18"}]'
, 'DESC'
, 1
***************************************************************************/
BEGIN
DECLARE
@sqlTransform NVARCHAR(MAX) = 'SELECT *
FROM OPENJSON(@Json) WITH(name NVARCHAR(200) ''$.name'', type NVARCHAR(50) ''$.type'')
ORDER BY name ' + @SortOder
IF @Debug = 0
BEGIN
EXEC sp_executesql
@sqlTransform
, N'@Json nvarchar(max)'
, @json = @json
END
ELSE
BEGIN
SELECT @sqlTransform
END
END
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6644 次 |
| 最近记录: |