2017-09-21 94 views
0

我有一个USQL查询可以在管理表中针对400M记录自行运行。 但是在开发过程中,我不想一直对所有记录运行它,所以我弹出一个where子句,运行一小段数据,并在大约2分钟(@ 5 AU)内完成,写出结果到我的数据湖中的tsv。 满意。USQL嵌套查询性能

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

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

现在我期待的是作为最初的原始查询大约在同一时间执行英寸但是,我得到了4分钟,通过计划只有10%,并取消 - 有些不对。

没有专家在阅读工作图,但... 原始脚本开始与2 *'提取组合分区'两个阅读一对夫妇的MB,我保存的视图读取超过100GB! 所以在这个阶段它并没有考虑where子句。

很明显,这表明我很少了解DLA如何在幕后工作!

有人请帮助我了解(a)发生了什么,以及(b)获得我需要的行为的途径?

目前正在玩存储过程来将第一个结果存储在一个表中,然后调用第二个查询 - 但与“传统”SQL Server相比似乎过度使用了!

所有指针&提示赞赏! 非常感谢

原始基础查询:

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"; 
+0

假设您安装了本地模拟器,一个建议可能是从Visual Studio使用本地环境。托管一个缩小的数据集以进行测试,然后使用下拉菜单访问您的实际Azure Data Lake Analytics帐户。我一直都在使用它,并喜欢无缝切换。 – wBob

回答

0

好吧,我想我已经得到了这一点,或至少部分。

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

,以允许参数的传递到一个视图,并返回结果。

虽然仍然希望能够找到一些围绕这个主题的阅读材料。 从T-SQL的世界来看,似乎还有一些根本性的差异,我仍然绊倒。