【问题标题】:Configure dynamic number of parameters in Azure Data Factory Pipeline based on intervals?根据间隔在 Azure 数据工厂管道中配置动态参数数量?
【发布时间】:2016-08-17 10:35:18
【问题描述】:

我们的用例需要通过 Azure 数据工厂将可配置的输入传递给 U-SQL 脚本。 我们正在评估可行性,并且需要根据活动的时间片间隔自动传递给 U-SQL 脚本的变量数量。

例如,如果 U-SQL 脚本每 4 小时运行一次,则它需要从 4 个不同的文件中读取数据,每小时一个。如果将间隔更改为 5 小时,我们需要自动执行此操作,以便自动读取 5 个不同的文件,而无需更新 U-SQL 脚本。

文件路径将采用以下格式: 来源\YYYY-MM-DD\hh.csv

数据工厂或数据湖提供的当前设施和功能集是否可以实现这种动态性? 或者是否有解决方法,以便数据工厂管道的部署可以自动化?

【问题讨论】:

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


    【解决方案1】:

    如果文件具有相同的架构,您可以使用 U-SQL 中的文件集功能,如下所示:

    DECLARE @begin_date DateTime = DateTime.Parse("....");
    DECLARE @end_date DateTime = DateTime.Parse("....");
    
    @data = 
      EXTRACT filedate DateTime, // insert rest of your schema
      FROM "/Source/{filedate:yyyy}-{filedate:MM}-{filedate:dd}/{filedate:hh}.csv"
      USING Extractors.Csv();
    
    @data = 
      SELECT * 
      FROM @data
      WHERE filedate BETWEEN @begin_date AND @end_date;
    
    // ... rest of script ...
    

    上面的代码只会访问满足filedate谓词的文件,不会读取其他文件。

    然后您使用 ADF 的参数化功能来参数化 @begin_date@end_date 以提供您想要的间隔。

    【讨论】:

    • 是指从源中提取所有数据并过滤所需的时间间隔吗?
    • 表示从指定区间内提取所有数据。谓词实际上将用于仅访问满足谓词的文件......上面添加以使其清楚。
    • 我使用了上面的代码并指定了以下间隔:WHERE filedate BETWEEN Convert.ToDateTime("2016-08-17T06") AND Convert.ToDateTime("2016-08-17T10"); “2016-08-17”文件夹包含 18 个文件及以上代码,应该读取 06 到 10 之间的文件。但是当我运行我的工作时,它会尝试提取源文件夹中存在的所有文件。
    • 我们只支持一些用于常量折叠和分区/文件消除的表达式。看起来Convert.ToDateTime 目前不会导致文件删除。请改用DateTime.Parse。我也提出了将Convert on constants 添加到支持的表达式的请求。
    • 只有 Tayyab 可以做到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 2019-02-12
    • 2019-07-03
    • 1970-01-01
    • 1970-01-01
    • 2019-10-24
    • 2018-05-12
    相关资源
    最近更新 更多