USQL嵌套查询性能

USQL nested query performance

我有一个 USQL 查询,它 运行 单独针对托管 table 中的 400M 记录很好。 但是在开发过程中,我不想一直 运行 它针对所有记录,所以我弹出一个 where 子句, 运行 它用于一小部分数据,它在大约 2分钟(@5 个 AU),将结果写入我的数据湖中的 tsv。 对此很满意。

但是,我现在想将其用作第二次查询和进一步处理的来源。 所以我用原来的 USQL (减去 where 子句)创建了一个视图。 然后测试一个新脚本:

'Select * from MyView WHERE <my original test filter>'.

现在我期待它与原始原始查询大约同时执行。但是我只用了 4 分钟,只完成了计划的 10%,然后取消了——有些不对劲。

没有阅读工作图表的专家,但是... 原始脚本以 2* 'Extract Combine partition' 开始,两者都读取了数百 MB,我在保存的视图上的 select 读取了超过 100GB !! 所以在这个阶段根本没有考虑 where 子句。

显然,这表明我对 DLA 在幕后的工作方式知之甚少!

有人能帮我理解 (a) 发生了什么以及 (b) 获得我需要的行为的前进道路吗?

目前正在尝试使用存储过程将第一个结果存储在 table 中,然后针对该结果调用第二个查询 - 但与 'traditional' SQL 服务器相比似乎太过分了?!?

感谢所有指点和提示! 非常感谢

原始基础查询:

CREATE VIEW IF NOT EXISTS Play.[M3_CycleStartPoints]
AS

//@BASE = 
SELECT ROW_NUMBER() OVER (PARTITION BY A.[CTNNumber] ORDER BY A.[SeqNo]) AS [CTNCycleNo], A.[CTNNumber], A.[SeqNo], A.[BizstepDescription], A.[ContainerStatus], A.[FillStatus]
FROM 
 [Play].[RawData] AS A
 LEFT OUTER JOIN
     (
        SELECT [CTNNumber],[SeqNo]+1 AS [SeqNo],[FillStatus],[ContainerStatus],[BizstepDescription]
        FROM [Play].[RawData] 
        WHERE    [FillStatus] == "EMPTY" AND [AssetUsage] == "CYLINDER"
     ) AS B
           ON A.[CTNNumber] == B.[CTNNumber] AND A.[SeqNo] == B.[SeqNo]
WHERE (
        (A.[FillStatus] == "FULL" AND 
         A.[AssetUsage] == "CYLINDER" AND 
         B.[CTNNumber] == A.[CTNNumber]
        ) OR (
         A.[SeqNo] == 1 
        )
      );

      //AND A.[CTNNumber] == "BE52XH7";   
      //Only used to test when running script as stand-alone & output to tsv

第二次查询

SELECT *
FROM [Play].[M3_CycleStartPoints]
WHERE [CTNNumber] == "BE52XH7";

好的,我想我明白了,或者至少部分明白了。

Table 值函数 http://www.sqlservercentral.com/articles/U-SQL/146839/

允许将参数传递给视图并return结果。

仍然有兴趣找到一些有关此主题的阅读材料 material。 来自 T-SQL 的世界,似乎有一些根本的差异我仍然被绊倒。