USQL Custom Extractor - 最新版本

时间:2018-02-20 14:52:51

标签: azure-data-lake u-sql

我有一个datalake,可以在源系统更新时发送数据。这可能导致多个版本的单个项目被多次发送。

在USQL中,我可以检索所有内容,然后对数据集进行分区并获取每个项目的最新版本。

但是,它看起来不像视图中的变量?我希望其他团队能够轻松访问。 e.g。

CREATE VIEW MyDatabase.DataLakeViews.LastestDataVersion
    AS

@output = 
    EXTRACT MyKey string,
            MyData string,
            EventEnqueuedUtcTime DateTime
    FROM @"adl://bwdatalakestore.azuredatalakestore.net/Stream/MGS/pts/sportsbook/betinfo/csv/2017/11/27/{*}.csv"
    USING Extractors.Text(delimiter : '|', skipFirstNRows : 1);

@PartitionedOutput =
    SELECT *,
           ROW_NUMBER() OVER(PARTITION BY MyKey ORDER BY EventEnqueuedUtcTime DESC) AS RowNumber
    FROM @output;

@FinalOutput = 
    SELECT  *
    FROM    @PartitionedOutput
    WHERE   RowNumber == 1;

OUTPUT @FinalOutput
TO "/ReferenceGuide/QSE/Extract/SearchLog_extracted.txt"
USING Outputters.Tsv();

这在视图中不起作用。有没有办法简化这种分区,而不是放入每个查询。

可能是通过自定义提取器实现此目的的一种方法吗?似乎它通过循环遍历每一行来工作,所以可能不适合这里...

1 个答案:

答案 0 :(得分:2)

视图遵循在单个表达式上没有参数的情况下定义的SQL语言。

您想要参数化视图,即table-valued function