U-SQL作业以动态名称查询多个表

时间:2018-08-13 15:25:07

标签: sql azure-sql-database azure-data-lake u-sql

我们面临的挑战是以下挑战:

  • 在Azure SQL数据库中,我们有多个表,这些表具有以下表名:table_num其中num只是一个整数。这些表是动态创建的,因此表的数量可以变化。 (从表_1,表_2到表_N)所有表具有相同的列。

  • 作为U-SQL脚本文件的一部分,我们希望对所有这些表执行相同的查询,并使用所有这些查询的组合结果生成输出csv文件。

我们尝试了几件事:

  • U-SQL不允许循环,因此我们考虑在Azure SQL数据库中创建一个视图,该视图将使用某种游标来组合所有表。然后,U-SQL文件将查询该视图(使用外部源)。但是,只能通过函数在Azure SQL数据库中创建视图,而函数不能执行动态SQL甚至不能调用存储过程...

  • 我们没有找到直接从U-SQL调用外部数据源存储过程的方法

  • 我们不想每次添加新表时都更新U-SQL作业...

例如,是否可以通过自定义提取器在U-SQL中执行此操作?还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

我能想到的一种解决方案是使用Azure Data Factory (v2)来协助实现这一目标。

您可以使用以下活动创建管道:

  1. Lookup activity配置为执行存储过程
  2. For Each activity使用output of the lookup activity作为来源
    1. 使用U-Sql Activity作为子项,执行您的U-Sql脚本,该脚本将单个表(For Each活动的项)的输出写入blob或datalake
  3. 将步骤2.1中的Copy Activitymerges the blobs添加到一个最终的Blob中。

如果您很少或没有使用ADF v2的经验,请记住花一些时间来了解它,但是一旦您学会了,您就不会后悔。拥有GUI来创建管道是一个不错的收获。

编辑:正如@wBob提到的另一种(容易得多)的解决方案是,以某种方式创建一个包含所有行的表,因为所有动态生成的表都具有相同的架构。例如,您可以创建一个存储过程来填充此表。