Я использую эти два запроса для вставки данных сначала в таблицу с уточненными транзакциями из дампа транзакций, а затем удаляет возможные дубликаты.TSQL Вставка и удаление дубликатов, улучшающих производительность запросов
INSERT INTO [dbo].[Transactions_Refined]
SELECT
Client_ID,
Customer_ID,
Transaction_ID,
SUM(try_parse(value_sold AS numeric(18,2))) AS value_sold,
SUM(try_parse(quantity AS numeric(18,4))) AS quantity,
subclass,
article,
try_parse(Transaction_Date AS Datetime) AS Transaction_Date,
Store_ID
FROM
[dbo].[Transaction_Dump]
GROUP BY
Client_ID, Customer_ID, Transaction_ID,
try_parse(Transaction_Date AS Datetime),
subclass, article, Store_ID ;
WITH cte AS
(
SELECT
*,
row_number() OVER(PARTITION BY Client_ID, Customer_ID, Transaction_ID, value_sold, quantity, subclass, article
ORDER BY Client_ID, Customer_ID, Transaction_ID, value_sold, quantity, subclass, article) AS [rn]
FROM
[dbo].[Transactions_Refined]
WHERE
Client_ID IN (SELECT DISTINCT [Client_ID]
FROM [dbo].[Transaction_Dump]))
DELETE cte
WHERE [rn] > 1 ;
Я хотел бы ускорить процесс. Есть идеи? Я думаю об использовании внешнего соединения.
Is Transaction_Dump таблица, которую вы загружаете из какого-либо текстового файла? Это причина, по которой вы используете TRY_PARSE? Сколько записей обычно содержит? И сколько записей содержит Transactions_Refined? Является ли это совокупной таблицей, к которой вы присоединяетесь и которая постоянно растет? Я вижу, что вы используете ROW_NUMBER для удаления дубликатов ключей, но разве вы не теряете информацию таким образом? –
Замените 'IN DISTINCT' на' EXISTS' –
To: tomislav_t Да, данные поступают из текстового файла, и я разбираю его, потому что мне нужно преобразовать его в правильные форматированные данные. Я не использую SSIS, я использую Azure Data Factory. Да, у меня это есть, я добавляю данные. Нет, я не теряю информацию, которая мне нужна. –