azureazure-storageazure-logic-appsazure-storage-explorer

Azure : How to write path to get a file from a time series partitioned folder using the Azure logic apps


I am trying to retrieve a csv file from the Azure blob storage using the logic apps. I set the azure storage explorer path in the parameters and in the get blob content action I am using that parameter. Parameter Screenshot

In the Parameters I have set the value as:

concat('Directory1/','Year=',string(int(substring(utcNow(),0,4))),'/Month=',string(int(substring(utcnow(),5,2))),'/Day=',string(int(substring(utcnow(),8,2))),'/myfile.csv')

So during the run time this path should form as:

Directory1/Year=2019/Month=12/Day=30/myfile.csv

but during the execution action is getting failed with the following error message

{
  "status": 400,
  "message": "The specifed resource name contains invalid characters.\r\nclientRequestId: 1e2791be-8efd-413d-831e-7e2cd89278ba",
  "error": {
    "message": "The specifed resource name contains invalid characters."
  },
  "source": "azureblob-we.azconn-we-01.p.azurewebsites.net"
}

So my question is: How to write path to get data from the time series partitioned path.


Solution

  • You should not use that in the parameters, when you use this line concat('Directory1/','Year=',string(int(substring(utcNow(),0,4))),'/Month=',string(int(substring(utcnow(),5,2))),'/Day=',string(int(substring(utcnow(),8,2))),'/myfile.csv') in the parameters, its type is String, it will be recognized as String by logic app, then the function will not take effect.

    And you need to include the container name in the concat(), also, no need to use string(int()), because utcNow() and substring() both return the String.

    To fix the issue, use the line below directly in the Blob option, my container name is container1.

    concat('container1/','Directory1/','Year=',substring(utcNow(),0,4),'/Month=',substring(utcnow(),5,2),'/Day=',substring(utcnow(),8,2),'/myfile.csv')
    

    enter image description here

    enter image description here

    Update:

    As mentioned in @Stark's answer, if you want to drop the leading 0 from the left.

    You can convert it from string to int, then convert it back to string.

    concat('container1/','Directory1/','Year=',string(int(substring(utcNow(),0,4))),'/Month=',string(int(substring(utcnow(),5,2))),'/Day=',string(int(substring(utcnow(),8,2))),'/myfile.csv')