U-Sql, как мне присоединиться, не получая декартово произведение - PullRequest
1 голос
/ 19 сентября 2019

У меня есть большой файл со строками для каждого дня для каждого идентификатора.Может быть более одной записи на каждый идентификатор в день, но допустимо только новейшее значение.

DailyValues:

ID int,
date datetime,
version datetime,
value1 float,
value2 float,
value3 float,
value4 float,

I T-SQL Я бы выбрал MAX (версия) и сгруппировал по идентификатору, дате, затем присоединился бы кприменяются значения с крестиком.

select
  B.*
from
(
   Select
     ID,
     Date,
     MAX(Version)
     From DailyValues D1
   group by
     ID,
     Date
) as A
CROSS APPLY (
   select top 1 *
   from DailyValues D2
   where D1.ID = D2.ID
   and D1.Date = D2.Date
   and D1.Version = D2.version
   order Version desc
) as B

Файл слишком большой для меня, чтобы сделать это в T-sql.

Как я могу сделать это в U-sql

1 Ответ

2 голосов
/ 19 сентября 2019

Вы можете сначала извлечь файл CSV в набор строк.После распаковки вы можете выбрать последнюю версию, как указано ниже:

@DailyValues = 
      EXTRACT ID int,
    date datetime,
    version datetime,
    value1 float,
    value2 float,
    value3 float,
    value4 float
       FROM "/Samples/Data/DailyValues.csv"
       USING Extractors.Csv(encoding: Encoding.[ASCII]);

SELECT ID, Date, Version
FROM
(
SELECT ID, Date,Version, ROW_Number() OVER(PARTITION BY ID, Date ORDER BY version DESC) AS rn
FROM @DailyValues) AS t
WHERE t.rn == 1;
...