【问题标题】:How to Parameterize USQL input files without using ADF如何在不使用 ADF 的情况下参数化 USQL 输入文件
【发布时间】:2017-08-18 08:13:34
【问题描述】:

我在 ADLS 中有一个格式为年/月/日的输入文件夹,例如:2017/07/11。我想将此输入文件夹作为参数传递给我的 usql 脚本。我没有使用 ADF。我不想从 Usql 脚本中生成当前日期,因为我不确定输入文件夹是否是当前日期。如何有效地做到这一点?

我想到的一种方法是在我的所有输入文件夹都上传到 ADLS 帐户之后上传“完成”文件,并且“完成”文件将包含日期。但我无法使用该日期来形成我的输入数据路径。请帮忙。

【问题讨论】:

标签: azure-data-lake u-sql


【解决方案1】:

假设您的文件夹结构中有多个 csv 文件(结构为 yyyy/MM/dd),并且您想要提取特定日期文件夹中的所有文件。您可以通过两种方式来实现(取决于您是否需要具有精确的日期时间语义,或者您是否可以使用路径 concat)。

先路径concat示例:

DECLARE EXTERNAL @folder = "2017/07/11"; // Script parameter with default value. 
                                         // You can specify the value also with constant-foldable expression on Datetime.Now.

DECLARE @path = "/constantpath/"+@folder+"/{*.csv}";

@data = EXTRACT I int, s string // or whatever your schema is...
        FROM @path
        USING Extractors.Csv();
...

下面是带有文件集虚拟列的示例:

DECLARE EXTERNAL @date = "2017/07/11"; // Script parameter with default value. 
                                         // You can specify the value also with constant-foldable expression on Datetime.Now and string serialization (I am not sure if the ADF parameter model supports DateTime values).

DECLARE @path = "/constantpath/{date:yyyy}/{date:MM}/{date:dd}/{*.csv}";

@data = EXTRACT I int, s string // or whatever your schema is...
              , date DateTime // virtual column for the date pattern
        FROM @path
        USING Extractors.Csv();

// Now apply the requested filter to reduce the files to the requested set
@data = SELECT * FROM @data WHERE date == DateTime.Parse(@date);
...

在这两种情况下,您都可以通过 ADF 参数化模型传递参数,并且您可以决定按照 Bob 的建议将代码包装到 U-SQL 存储过程或 TVF 中。

【讨论】:

    猜你喜欢
    • 2014-02-02
    • 2022-10-12
    • 2016-12-07
    • 1970-01-01
    • 2017-02-20
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多