azure 复制数据-大小写动态路径和文件名接收器

2hh7jdfx  于 2023-05-29  发布在  其他
关注(0)|答案(1)|浏览(142)

我有几个源文件:salesYYYYMMDDfinal.txt,ordersYYYYMMDDedited.txt
我使用单个复制数据活动读取复制命令上的所有文件,源变量为 @{variables('File')}.TXT,文件作为YYYYMMDD变量。
到目前为止,一切都很好。
对于sink,我启用了blob类型,这样它就允许我添加变量作为filepath。
作为sinkFilePath变量,我想用管道表达式构建器创建类似于:
/salesfolder/salesYYYYMMDD.txt
/ordersfolder/ordersYYYYMMDD.txt
因此,根据文件名的一部分,它将决定文件夹,并删除:final,edited,etc from filename.只保留文件类型加上YYYYMMDD.txt
另外,如果能用一种不同的方式来完成,除了管道式的表达,这将对我有很大帮助。谢谢你。

pwuypxnk

pwuypxnk1#

  • 您还需要使用azure数据流来实现您的要求,使其动态工作。首先使用getmetadata活动来获取childitems(您的文件)。

  • 现在,在for each循环中迭代这个返回的数据。在每个循环中,我有一个接受字符串参数的数据流。您必须在每次迭代中将@item().name传递给此数据流。

  • 我已经采取了一个样本文件与一列和1行作为我的源数据集的数据流(你可以采取相同的)。

  • 下面是我用来生成最终文件夹名和最终文件名的数据流JSON。
{
    "name": "dataflow1",
    "properties": {
        "type": "MappingDataFlow",
        "typeProperties": {
            "sources": [
                {
                    "dataset": {
                        "referenceName": "DelimitedText3",
                        "type": "DatasetReference"
                    },
                    "name": "source1"
                }
            ],
            "sinks": [
                {
                    "name": "sink1"
                }
            ],
            "transformations": [
                {
                    "name": "derivedColumn1"
                }
            ],
            "scriptLines": [
                "parameters{",
                "     file as string (\"orders20230521final.csv\")",
                "}",
                "source(output(",
                "          id as string",
                "     ),",
                "     allowSchemaDrift: true,",
                "     validateSchema: false,",
                "     ignoreNoFilesFound: false) ~> source1",
                "source1 derive(final_file = concat(regexSplit($file,regexExtract($file,'(\\\\d{8})'))[1],regexExtract($file,'(\\\\d{8})'),'.csv'),",
                "          dir = concat(regexSplit($file,regexExtract($file,'(\\\\d{8})'))[1],'folder')) ~> derivedColumn1",
                "derivedColumn1 sink(validateSchema: false,",
                "     skipDuplicateMapInputs: true,",
                "     skipDuplicateMapOutputs: true,",
                "     store: 'cache',",
                "     format: 'inline',",
                "     output: true,",
                "     saveOrder: 1) ~> sink1"
            ]
        }
    }
}

  • 选择接收器作为缓存并写入Activity输出。在for each中,在每次迭代之后,您将从此数据流中获得所需的文件夹名称和最终文件名。您可以在复制数据活动的接收路径中使用这些值。
  • “orders20230521final.csv”的输出:

  • “sales20230523edit.csv”的输出:

相关问题