首页 文章

U-SQL Azure Data Lake Analytics按日期搜索文件

提问于
浏览
0

我有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}

Problem :自定义提取器执行速度很慢 . 我在Data Lake中有很多文件,处理需要15个小时,每次运行需要600美元 . 太慢而且太贵了 .

我只需要从不超过90天的文件中提取新数据 . 如何使用文件模式,文件日期修改或任何其他技术过滤掉旧文件?

2 回答

  • 0

    您可以利用Azure数据工厂中的GetMetadata活动来检索文件的lastModifiedTime .

    参考文献:Get metadata activity in Azure Data Factory

    还有一篇关于增量复制的相关文章:

    Azure data factory | incremental data load from SFTP to Blob

  • 0

    您可以使用 DateTime.Now.AddDays 方法,尽管这实际上是否过滤掉了所有文件(我认为)取决于您的自定义提取器,例如

    //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个,但如上所述,我不确定这是否适用于您的自定义提取器 .

    Local results

相关问题