Запись SQL в запрос U-SQL

Может ли кто-нибудь помочь мне в написании этого ниже SQL на языке U-SQL, используемом в Azure Data Lake.

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

Я не нахожу функцию DATEPART в U-SQL. Работа Azure Data Analytics дает мне ошибку.


person Midhun Murali    schedule 28.01.2016    source источник


Ответы (2)


U-SQL не предоставляет встроенных функций T-SQL, за исключением нескольких (например, LIKE). См. 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 (возможно, вам нужно преобразовать его в двойное, если вы хотите нецелочисленное значение).

person Michael Rys    schedule 29.01.2016

Для всех, кто ищет реализацию, упомянутую Майклом. Это как ниже

@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();
person Midhun Murali    schedule 29.01.2016