Azure:如何编写路径以使用 Azure 逻辑应用程序从时间序列分区文件夹中获取文件

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

我正在尝试使用逻辑应用程序从 Azure blob 存储中检索 csv 文件。 我在参数中设置了 azure 存储资源管理器路径,在获取 blob 内容操作中我正在使用该参数。

在参数中,我将值设置为:

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')

因此在 运行 时间内,此路径应形成为:

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

但在执行过程中操作失败并显示以下错误消息

{
  "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"
}

所以我的问题是:如何写路径从时间序列分区路径中获取数据。

你不应该在参数中使用它,当你在参数中使用这一行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')时,它的类型是String,它会被逻辑应用程序识别为String , 则该功能不会生效。

并且你需要在concat()中包含容器名称,另外,不需要使用string(int()),因为utcNow()substring()都return String.

要解决此问题,请直接在 Blob 选项中使用下面的行,我的容器名称是 container1.

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

更新:

如@Stark 的回答中所述,如果您想从左侧删除前导 0。

您可以将它从字符串转换为 int,然后再将其转换回字符串。

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')

Joy Wang 的回答部分正确。
逻辑应用程序中的 Parameters 只会将值视为字符串,无法识别任何函数,例如 concat()。
concat函数的正确使用方法是使用表达式。

我的解决方案是:

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')