azure - SSIS:如何枚举 Azure 存储中的文件并将每个文件加载到 SQL Server
问题描述
我想做一些看似简单的事情,但我并没有太多的快乐。我想使用为 Foreach Azure Blob 枚举器配置的 For Each Loop 容器构建一个 SSIS 包,以遍历我的存储容器中的文件。我可以让循环确实循环遍历所有文件。当我尝试使用“Azure Blob Source”数据流组件加载每个文件时,问题就出现了。似乎无法为“Azure Blob 源”数据流组件提供应该来自 Foreach Azure Blob 枚举器的 Blob 名称。这会导致“Azure Blob 源”数据流组件在枚举器循环遍历容器中的所有文件时一遍又一遍地加载设置为其“Blob 名称”的同一文件。
解决方案
我通过执行以下操作解决了这个问题。首先,您必须从存储在包作用域变量中的 Azure Blob 枚举器中获取 Blob 名称。
我创建了一个名为 FilePath 的用户变量,它在 blob 容器中循环加载每个 blob 名称。在 foreach 循环容器中,我放置了一个包含“Azure Blob Source”组件的数据流任务。Azure Blob Source 组件将从指定的文本文件加载数据。当您设置组件时,您以您正在加载的格式指定示例文本文件的名称,以便定义它的导入方式。当“Azure Blob 源”组件位于 Azure Blob 枚举器中时,您会希望在枚举容器中为它提供每个 blob 的名称。
您可以通过在数据流组件级别设置表达式来做到这一点。您需要设置一个条件公式来为“Blob 名称”提供一个值,即使枚举器未在运行,否则您将遇到错误,指出 Blob 名称没有值。
@[User::FilePath] == "" ? "example.dat" : @[User::FilePath]
逻辑表明,如果用户变量 FilePath 没有分配值,只需使用假文件名以避免 Azure Blob 源中没有 Blob 名称的错误,但是如果枚举器提供名称,则使用用户中提供的名称: :文件路径
推荐阅读
- go - 通过强制转换或类型断言改变结构
- c# - 如何在 C sharp api 中获取 OpenID 连接流中的令牌?
- php - 如何在codeigniter中插入多个复选框值
- php - 如何使日期格式在所有环境中保持一致
- objective-c - popViewControllerAnimated 后 NSString 为 nil
- python - 仅从 BeautifulSoup 获取数字而不是整个 div
- gatsby - 采购 MDX 文件以编程方式在 Gatsby 中创建投资组合页面
- python - 运行 ls 程序时出错:SavedModel 文件不存在于:在此处键入您的模型目录/{saved_model.pbtxt|saved_model.pb}
- html - 在 html 中显示文本文件中的文本
- firebase - 从 firebase-React-Native 渲染的问题