首页 文章

如何定义日期范围,然后在USQL中查询复杂文件集?

提问于
浏览
1

单个文件中有很多很好的USQL示例 . 但是,您如何复制一个非常常见的数据处理示例,在该示例中,您希望获取当前系统时间,从该时间减去X天数并根据该结果查询一组数据?对于SQL示例:

SELECT * FROM MyTable
WHERE Date >= CAST(GETDATE() AS DATE) - 30
AND Date <= CAST(GETDATE() AS DATE) - 1

在上面的例子中,我的日期是我的文件位置,例如:

'yyyy' | 'MM' | 'DD' | Filename.csv

-- Example path
/MyDirectory/2017/12/01/SomeData.csv

因此,USQL中是否有一种方法可以使用Azure Data Lake Analytics执行类似操作,但使用文件位置而不是使用“{date:yyyy} / {date:MM} / {date:dd} /”表达式查询所有内容?

如果那是不可能的,那么至少指定一个范围如下:

"/MyDirectory/2017/{10-12}/{1-30}/{filename:*}.csv"

我可以将所有文件组合到一个目录中,并使用数据中的自然日期字段在提取器之后使用SELECT语句进行过滤,但目录结构的要点是减少不需要的读取(事务)并且仅针对需要的特定目录对于基于所述文件本身的日期的查询 .

1 回答

  • 3

    玛雅是对的 . U-SQL语言参考中有一些示例,更具体地说是EXTRACT Expression (U-SQL) . 请参阅"Multiple directories with multiple files"下的示例 . 以下是对该示例的一些修改,似乎满足您的要求 .

    1)缺少示例 DECLARE @dir string = "/Samples/Data/AmbulanceData/";
    2)修改 DECLARE @file_set_path2 以阅读 DECLARE @file_set_path2 string = @dir + "{date:yyyy}/{date:MM}/{date:dd}/vehicle{vid}_{*}.csv";
    3.对于您的过滤器,您可以使用 WHERE date >= DateTime.Now.AddDays(-30) AND date <= DateTime.Now.AddDays(-1)

相关问题