U-Sql视图通过排名合并重复项

时间:2018-04-03 15:31:43

标签: azure azure-data-lake u-sql

我的数据位于多个文件中,其命名约定为{year} / {month} / {date},它们具有重复项(每天记录可能每天更新的delta)。

我想创建一个视图,它将返回包含重复/压缩重复项的记录。 将对重复项进行排名,并且仅返回与每个主键对应的最新更新记录。

但是在视图中使用行集似乎不受支持。基本上是这样的:

CREATE VIEW viewname AS 

@sourcedata  = EXTRACT  //schema
from //filenamePattern (regex)
using Extractors.TSV()

@sourceData =  SELECT *,
       ROW_NUMBER() OVER(PARTITION BY primary_Key ORDER BY timestamp DESC) AS RowNumber FROM @SourceData;

SELECT //schema
from @sourceData WHERE RowNumber == 1

所以当我这样做时

select * from viewname

我直接从底层文件中获取合并数据。怎么做到这一点?

2 个答案:

答案 0 :(得分:1)

视图中可能有多个EXTRACT语句与UNION语句堆叠在一起,隐式删除重复项。但是,您是否有任何特殊原因需要使用视图?这将限制您的选项,因为您必须在视图的限制内进行编码(例如,它们不能参数化)。您还可以使用表值函数,存储过程或仅使用普通旧脚本。这将为您提供更多选项,尤其是在重复数据删除逻辑很复杂的情况下。一个简单的例子:

DROP VIEW IF EXISTS vw_removeDupes;

CREATE VIEW vw_removeDupes
    AS

EXTRACT someVal int
FROM "/input/input59a.txt"
USING Extractors.Tsv()

UNION

EXTRACT someVal int
FROM "/input/input59b.txt"
USING Extractors.Tsv();

答案 1 :(得分:0)

我认为它可以通过表值函数来解决。你尝试过使用它吗?

https://msdn.microsoft.com/en-us/azure/data-lake-analytics/u-sql/u-sql-functions