在复制 activity 期间或在 blob 数据集中指定名称时将日期时间动态附加到文件名
Dynamically Append datetime to filename during copy activity or when specifying name in blob dataset
我正在将文件保存到数据工厂 V2 中的 blob 存储,当我指定要保存到的位置时,我正在调用文件(例如)file1,它在 blob 中保存为 file1,没问题。但是我可以使用动态内容功能将日期时间附加到文件名,使其类似于 file1_01-07-2019_14-30-00 吗?(1 月 7 日 14:30:00 以防阅读起来很尴尬)。或者,我可以将 webhook activity 的结果(文件名)输出到下一个 activity(函数)吗?
谢谢。
您可以添加数据集参数,例如 WindowStartTime,其格式为 2019-01-10T13:50:04.279Z。然后你会得到类似下面的动态文件名:
@concat('file1_', formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss')).
要在副本中使用 activity 您还需要添加管道参数。
一旦你设置了副本 activity 并且 select 你将 blob 数据集作为接收器,你需要为 WindowStartTime 输入一个值,这可以只是一个时间戳,例如1900-01-01T13:00:00Z 或者您可以将管道参数放入其中。
如果您正在设置计划触发器,那么拥有一个参数可能会更有帮助,因为您将能够在触发器运行时输入此 WindowStartTime 时间戳。为此,您可以使用@trigger().scheduledTime 作为触发器参数WindowStartTime 的值。
https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipeline-execution-triggers#trigger-type-comparison
如果不直接编辑复制管道 JSON 文件,我无法使它工作(2018 年末 - 可能不再需要)。您需要复制管道中的动态代码 JSON 和数据集中定义的设置以设置文件名参数。
在数据集中为文件夹路径 and/or 文件名定义 'Parameters'(单击“+ 新建”并给它们任意名称)例如sourceFolderPath, sourceFileName.
然后在 'Connection' 下的数据集中,在 'File path' 定义中包含以下内容:
@dataset().sourceFolderPath 和 @dataset().sourceFileName 在“/”的任一侧
(见下方截图)
在复制管道中单击管道 window 右上角的 'Code' 并在要由动态文件名定义的 'blob' 对象下查找以下代码 -如果不包含 'parameters' 代码,请将其添加到 JSON 并单击 'Finish' 按钮 - 'inputs'、'outputs' 或两者都可能需要此代码取决于您在流程中引用的动态文件 - 下面是一个示例,其中输出在文件夹路径和文件名中都包含日期参数(日期由触发器参数设置):
"inputs": [
{
"referenceName": "tmpDataForImportParticipants",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "StgParticipants",
"type": "DatasetReference",
"parameters": {
"sourceFolderPath": {
"value": <derived value of folder path>,
"type": "Expression"
},
"sourceFileName": {
"value": <derived file name>,
"type": "Expression"
}
}
}
]
文件夹路径的派生值可能类似于以下内容 - 这导致指定 blobContainer 中的文件夹路径 yyyy/mm/dd:
"blobContainer/@{formatDateTime(pipeline().parameters.windowStart,'yyyy')}/@{formatDateTime(pipeline().parameters.windowStart,'MM')}/@{formatDateTime(pipeline().parameters.windowStart,'dd')}"
或者它可以被硬编码,例如"blobContainer/directoryPath" - 不要在定义的开头或结尾包含“/”
派生文件名可能类似于以下内容:
"@concat(string(pipeline().parameters.'_',formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss'))>,'.txt')"
您可以包含触发器设置的任何参数,例如通过包含 pipeline().parameters.
的 ID 值、帐户名称等
Dynamic Dataset Parameters example
Dynamic Dataset Connection example
我正在将文件保存到数据工厂 V2 中的 blob 存储,当我指定要保存到的位置时,我正在调用文件(例如)file1,它在 blob 中保存为 file1,没问题。但是我可以使用动态内容功能将日期时间附加到文件名,使其类似于 file1_01-07-2019_14-30-00 吗?(1 月 7 日 14:30:00 以防阅读起来很尴尬)。或者,我可以将 webhook activity 的结果(文件名)输出到下一个 activity(函数)吗?
谢谢。
您可以添加数据集参数,例如 WindowStartTime,其格式为 2019-01-10T13:50:04.279Z。然后你会得到类似下面的动态文件名: @concat('file1_', formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss')).
要在副本中使用 activity 您还需要添加管道参数。
一旦你设置了副本 activity 并且 select 你将 blob 数据集作为接收器,你需要为 WindowStartTime 输入一个值,这可以只是一个时间戳,例如1900-01-01T13:00:00Z 或者您可以将管道参数放入其中。
如果您正在设置计划触发器,那么拥有一个参数可能会更有帮助,因为您将能够在触发器运行时输入此 WindowStartTime 时间戳。为此,您可以使用@trigger().scheduledTime 作为触发器参数WindowStartTime 的值。 https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipeline-execution-triggers#trigger-type-comparison
如果不直接编辑复制管道 JSON 文件,我无法使它工作(2018 年末 - 可能不再需要)。您需要复制管道中的动态代码 JSON 和数据集中定义的设置以设置文件名参数。
在数据集中为文件夹路径 and/or 文件名定义 'Parameters'(单击“+ 新建”并给它们任意名称)例如sourceFolderPath, sourceFileName.
然后在 'Connection' 下的数据集中,在 'File path' 定义中包含以下内容: @dataset().sourceFolderPath 和 @dataset().sourceFileName 在“/”的任一侧 (见下方截图)
在复制管道中单击管道 window 右上角的 'Code' 并在要由动态文件名定义的 'blob' 对象下查找以下代码 -如果不包含 'parameters' 代码,请将其添加到 JSON 并单击 'Finish' 按钮 - 'inputs'、'outputs' 或两者都可能需要此代码取决于您在流程中引用的动态文件 - 下面是一个示例,其中输出在文件夹路径和文件名中都包含日期参数(日期由触发器参数设置):
"inputs": [
{
"referenceName": "tmpDataForImportParticipants",
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "StgParticipants",
"type": "DatasetReference",
"parameters": {
"sourceFolderPath": {
"value": <derived value of folder path>,
"type": "Expression"
},
"sourceFileName": {
"value": <derived file name>,
"type": "Expression"
}
}
}
]
文件夹路径的派生值可能类似于以下内容 - 这导致指定 blobContainer 中的文件夹路径 yyyy/mm/dd:
"blobContainer/@{formatDateTime(pipeline().parameters.windowStart,'yyyy')}/@{formatDateTime(pipeline().parameters.windowStart,'MM')}/@{formatDateTime(pipeline().parameters.windowStart,'dd')}"
或者它可以被硬编码,例如"blobContainer/directoryPath" - 不要在定义的开头或结尾包含“/”
派生文件名可能类似于以下内容:
"@concat(string(pipeline().parameters.'_',formatDateTime(dataset().WindowStartTime, 'MM-dd-yyyy_hh-mm-ss'))>,'.txt')"
您可以包含触发器设置的任何参数,例如通过包含 pipeline().parameters.
的 ID 值、帐户名称等Dynamic Dataset Parameters example
Dynamic Dataset Connection example