0

谁能指导我用 Azure Data Lake 中使用的 U-SQL 语言编写下面的 SQL

select tt.userId, count(tt.userId) from (SELECT userId,count(userId) as cou
  FROM [dbo].[users]

  where createdTime> DATEADD(wk,-1,GETDATE())

   group by userId,DATEPART(minute,createdTime)/5) tt group by tt.userId

我在 U-SQL 中找不到 DATEPART 函数。Azure 数据分析作业给了我错误。

4

2 回答 2

2

除了少数(如 LIKE)外,U-SQL 不提供 T-SQL 内在函数。有关列表,请参阅https://msdn.microsoft.com/en-us/library/azure/mt621343.aspx

那么如何进行 DateTime 操作呢?您只需使用 C# 函数和方法!

DATEADD(wk, -1, GETDATE())就像DateTime.Now.AddDays(-7) 和 (你的行中DATEPART(minute,createdTime)/5有一个额外)的)是这样的createdTime.Minute/5(如果你想要非整数值,也许你需要将它转换为双精度)。

于 2016-01-29T02:45:10.333 回答
2

对于任何正在寻找迈克尔提到的实现的人。就像下面

@records =
    EXTRACT userId   string,                      
            createdTime DateTime            
    FROM "/datalake/input/data.tsv"
    USING Extractors.Tsv();

 @result =
    SELECT
        userId,       
        COUNT(createdTime) AS userCount
    FROM @records
    WHERE createdTime > DateTime.Now.AddDays(-30)
GROUP BY userId,createdTime.Minute/5;

@result2= SELECT userId,COUNT(userId) AS TotalCount
 FROM @result
 GROUP BY userId;

OUTPUT @result2 
    TO "/datalake/output/data.csv"
USING Outputters.Csv();
于 2016-01-29T12:58:26.657 回答