azure blob文件夹路径中的自定义日期

时间:2018-03-26 05:41:48

标签: azure blob azure-data-factory azure-blob-storage

我已经查看了一些有关如何在创建azure blob时指定自定义文件夹路径的帖子和文档(使用azure数据工厂)。

官方文件:

https://docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-azure-blob-connector#using-partitionedBy-property

论坛帖子:

https://dba.stackexchange.com/questions/180487/datafactory-tutorial-blob-does-not-exist

我已经成功地将索引文件夹放入日期,但是我无法做的是放入递增/递减的日期文件夹。

我尝试使用$$ Text.Format(如下所示),但它给出了编译错误 - > Text.Format不是有效的blob路径。

    "folderPath": "$$Text.Format('MyRoot/{0:yyyy/MM/dd}/', Date.AddDays(SliceEnd,-2))",

我尝试使用PartitionedBy部分(如下所示),但它也给出了编译错误 - >只有SliceStart和SliceEnd是“date”的有效选项

    {
"name": "MyBlob",
"properties": {
    "published": false,
    "type": "AzureBlob",
    "linkedServiceName": "MyLinkedService",
    "typeProperties": {
        "fileName": "MyTsv.tsv",
        "folderPath": "MyRoot/{Year}/{Month}/{Day}/",
        "format": {
            "type": "TextFormat",
            "rowDelimiter": "\n",
            "columnDelimiter": "\t",
            "nullValue": ""
        },
        "partitionedBy": [
            {
                "name": "Year",
                "value": {
                    "type": "DateTime",
                    "date": "Date.AddDays(SliceEnd,-2)",
                    "format": "yyyy"
                }
            },
            {
                "name": "Month",
                "value": {
                    "type": "DateTime",
                    "date": "Date.AddDays(SliceEnd,-2)",
                    "format": "MM"
                }
            },
            {
                "name": "Day",
                "value": {
                    "type": "DateTime",
                    "date": "Date.AddDays(SliceEnd,-2)",
                    "format": "dd"
                }
            }
        ]
    },
    "availability": {
        "frequency": "Day",
        "interval": 1
    },
    "external": false,
    "policy": {}
}

任何指针都表示赞赏!

编辑Adam的回复:

我还根据Adam的建议直接在FileName中使用了文件夹结构,如下面的论坛帖子所示:

Windows Azure: How to create sub directory in a blob container

我在下面的样本中使用它。

     "typeProperties": {
        "fileName": "$$Text.Format('{0:yyyy/MM/dd}/MyBlob.tsv', Date.AddDays(SliceEnd,-2))",
        "folderPath": "MyRoot/",
        "format": {
            "type": "TextFormat",
            "rowDelimiter": "\n",
            "columnDelimiter": "\t",
            "nullValue": ""
        },        

它不会产生编译错误,也不会在部署期间出错。但它在执行期间抛出错误!!

运行时错误是--->活动错误:ScopeJobManager:PrepareScopeScript,不支持的非结构化流格式'.adddays(sliceend,-2))',无法转换为非结构化流。

我认为问题在于FileName可用于创建文件夹但不能用于动态文件夹名称,只能用于静态文件夹名称。

1 个答案:

答案 0 :(得分:0)

你应该使用以下约定创建一个blob:“foldername / myfile.txt”,这样你也可以在该foldername下追加额外的blob。我建议检查这个帖子:Windows Azure: How to create sub directory in a blob container,它可以帮助你解决这个问题。