Вставить новые строки, продолжить существующий набор строк row_number count - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь выполнить некую операцию upsert в U-SQL, где я каждый день извлекаю данные из файла и сравниваю их с данными вчерашних дней, которые хранятся в таблице в хранилище озера данных.

Я создал столбец идентификаторов в таблице в DL, используя row_number (), и именно этот «счетчик» я хочу продолжить при добавлении новых строк в старый набор данных.Например, последняя вставленная строка в таблице DL может выглядеть следующим образом:

ID | Column1    | Column2
---+------------+---------
10 | SomeValue  |    1

Я хочу, чтобы в следующих строках были следующие восходящие идентификаторы

11 | SomeValue  |   1 
12 | SomeValue  |   1 

Как мне убедиться, чтоВ следующих X строках счетчик идентификаторов продолжает увеличиваться так, что каждая из следующих строк увеличивает столбец идентификатора на 1 больше, чем последний?

1 Ответ

0 голосов
/ 21 сентября 2018

Вы можете использовать ROW_NUMBER, а затем добавить его к максимальному значению из исходной таблицы (то есть, используя CROSS JOIN и MAX).Простая демонстрация техники:

DECLARE @outputFile string = @"\output\output.csv";

@originalInput =
    SELECT *
    FROM ( VALUES
        ( 10, "SomeValue 1", 1 )
        ) AS x ( id, column1, column2 );


@newInput =
    SELECT *
    FROM ( VALUES
        ( "SomeValue 2", 2 ),
        ( "SomeValue 3", 3 )
        ) AS x ( column1, column2 );


@output =
    SELECT id, column1, column2
    FROM @originalInput

    UNION ALL

    SELECT (int)(x.id + ROW_NUMBER() OVER()) AS id, column1, column2
    FROM @newInput
            CROSS JOIN ( SELECT MAX(id) AS id FROM @originalInput ) AS x;


OUTPUT @output
TO @outputFile
USING Outputters.Csv(outputHeader:true);

Мои результаты:

Results

Вам нужно быть осторожным, если исходная таблицапусто и добавьте некоторые дополнительные условия / проверки нуля, но я оставлю это на ваше усмотрение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...