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')
我正在尝试使用逻辑应用程序从 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')