单个文件中有很多很好的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 回答
玛雅是对的 . 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)