【发布时间】:2017-12-02 01:19:32
【问题描述】:
跨单个文件的 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 语句进行过滤,但目录结构的重点是减少不需要的读取(事务)并且仅定位根据所述文件本身的日期进行查询所需的特定目录。
【问题讨论】:
-
您是否尝试过使用 {date:MM}{date:dd}{date:yyyy},然后在下一个 SELECT 语句中使用“日期”虚拟列进行过滤?您的工作实际上应该识别过滤器并仅读取所需的文件夹...
-
我刚刚遇到了一个使用虚拟列的示例。我只是不确定这是否只会基于“WHERE date >= DateTime.Parse("2017-11-01")”来读取目录/文件。如果它只读取需要的内容,而不是所有 YYYY 数据,那将是很好的,也是我问题的答案!如果 USQL 中不存在系统时间函数,我显然可以使用脚本生成日期。
-
它应该根据虚拟列上的过滤器对输入集进行分区消除,并且只读取需要的内容...
标签: azure azure-data-lake u-sql