我们正在尝试让现有的 SSIS 包与 Azure Blob 存储一起使用。问题是我们动态生成的FolderPath。
我们的文件夹路径是在一个变量中定义的,如下所示:
@[$Package::BlobFolder] + "CATEGORY/" + @[User::FileDate] + "/SUBCATEGORY"
然后我们尝试上传的文件是镶木地板文件,因此在灵活文件目标编辑器中我们有这样的内容:
文件夹路径:(从变量生成)
ourfolderpath/category/08152023/subcategory
文件名称:
ourfilename.parquet
但是,当它运行时,系统会像这样连接两个值:
ourfolderpath/category/08152023/subcategory\ourfilename.parquet
这当然行不通。 有什么想法吗?
注意,这里列出了我们已经尝试过但不起作用的方法。
太平洋标准时间下午 2:30 更新:
首先我想指出,我上面发布的变量表达式只是它们的示例。 真正的要复杂得多(我不知道为什么)
其次,我还想指出,这整件事实际上在生产中是有效的。 我们正在尝试做的是建立一个开发版本,但显然从未完成过。
第三,我们怀疑我们看到的错误可能是错误的,并且不受反斜杠的任何影响。 理论是这样的:
A) 使用哪个斜杠进行串联取决于运行时检测到的环境。 如果它检测到与 Azure Blob 的连接,则使用正斜杠,如果没有,则使用反斜杠(因为这是在 Windows 服务器上)
B) 我们怀疑系统无法连接,因此当错误被写入时,它会用反斜杠写入,因为从未与 Azure 建立过连接,这使得反斜杠看起来像是问题所在,而实际上它完全是另一回事。
这就是我们现在的处境。 不知道为什么连接失败(或者这是否是问题所在)
距离我发布这篇文章已经过去一年零三个月了。 我今天在开会,其他人也遇到了同样的问题。 我用谷歌搜索并在这里找到了我自己的帖子。 我想我现在明白了这个问题。
在 SSIS 中,您可以在多个位置为同一事物设置变量。 例如,您可以创建一个连接管理器(例如到 Azure Blob 存储),然后可以在此处设置连接字符串/密码。
您还可以拥有该连接的应用程序级版本,如果您应该从应用程序级别执行包,这可以覆盖您在本地连接管理器中放置的任何内容。
您还可以拥有更高级别的连接字符串,这些连接字符串仅在生产环境中可用。 事实上,我们拥有所有这些东西。
所以。 当我转到连接管理器并单击“测试”时,它就可以工作。 但是,如果我实际上在本地执行整个应用程序,它会失败,因为它使用下一个最高级别的连接信息,而这些信息恰好在我们的系统中被破坏。
在生产服务器的更高层,这些连接实际上可以工作,这就是为什么该问题不会在生产中崩溃。
无论如何,这是我的理论。还没有人要求我解决这个问题,所以这只是一个理论,但这是我目前能给出的最好解释,我想把它写在这里,以防有人要求我在一年后解决这个问题,我又忘记了。