您如何定义一个日期范围,然后在 USQL 中查询一个复杂的文件集?
How do you define a date range and then query across a complex file set in USQL?
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 语句进行过滤,但目录结构的要点是减少不需要的读取(交易)并且仅针对基于所述文件本身的日期进行查询所需的特定目录。
玛雅是正确的。
在 U-SQL Language Reference 中有示例,更具体地说在 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)
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 语句进行过滤,但目录结构的要点是减少不需要的读取(交易)并且仅针对基于所述文件本身的日期进行查询所需的特定目录。
玛雅是正确的。 在 U-SQL Language Reference 中有示例,更具体地说在 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)