azure - U-SQL Azure Data Lake Analytics 按日期搜索文件
问题描述
我有 U-SQL 脚本,它使用文件模式在 Azure Data Lake 中查找文件并从中提取一些数据:
DECLARE @input_file string = @"\data\{*}\{*}\{*}.avro";
@data = EXTRACT
Column1 string,
Column2 double
FROM @input_file
USING new MyExtractors.AvroExtractor();
文件模式是:
data/{Namespace}-{EventHub}-{PartitionId}/{Year}-{Month}-{Day}/{Hour}-{Minute}-{Second}
问题:自定义提取器执行速度非常慢。我在数据湖中有很多文件,处理需要 15 小时,每次运行成本为 600 美元。太慢而且太贵。
我只需要从不超过 90 天的文件中提取新数据。如何使用文件模式、文件修改日期或任何其他技术过滤掉旧文件?
解决方案
您可以使用 的.AddDays
方法DateTime.Now
,尽管这是否真的过滤掉所有文件(我认为)取决于您的自定义提取器,例如
//DECLARE @input_file string = @"\data\{*}\{*}\{*}.csv";
DECLARE @input_file string = @"\data\{Namespace}-{EventHub}-{PartitionId}\{xdate:yyyy}-{xdate:MM}-{xdate:dd}\{Hour}-{Minute}-{Second}.csv";
// data/{Namespace}-{EventHub}-{PartitionId}/{Year}-{Month}-{Day}/{Hour}-{Minute}-{Second}
@input =
EXTRACT Column1 string,
Column2 double,
xdate DateTime,
Namespace string,
EventHub string,
PartitionId string,
Hour int,
Minute int,
Second int
FROM @input_file
USING Extractors.Csv();
//USING new MyExtractors.AvroExtractor();
@output =
SELECT Column1,
Column2
FROM @input
WHERE xdate > DateTime.Now.AddDays(-90);
OUTPUT @output
TO "/output/output.csv"
USING Outputters.Csv();
在我使用 .Csv 进行的简单测试中,这可以将输入流从 4 个流减少到 3 个流,但如前所述,我不确定这是否适用于您的自定义提取器。
推荐阅读
- c# - WebUtility.HtmlEncode 和 AntiXssEncoder.HtmlEncode 有什么区别?
- optaplanner - OptaPlanner 日志求解器相变
- javascript - 如何通过ajax处理更改数据库中的布尔字段?
- database - PostgreSQL - MVCC(多版本并发控制) - 何时获取实际锁?
- node.js - 使用 multer 将文件上传到 S3 存储桶期间的 CRC32 检查
- testing - 当所有测试都完成运行时,我如何调用一个函数?
- apache-spark - GeoMesa Spark 无法使用 UDF 函数
- r - 具有相同颜色(特征)的 R igraph 集群节点
- python-3.x - 如何创建上下文菜单以删除 qtableview python 内部的行
- php - 导航到 Wordpress 中的新页面时无法清除 WooComerce 购物车