Как удалить строку из кучи с размером партии 10000 - PullRequest
1 голос
/ 11 марта 2019

Не поддерживается-

DELETE TOP(10000) FROM dataArchival.MyTable 
    WHERE DateLocal BETWEEN '2018-03-01' AND '2018-10-01'

delete dataArchival.MyTable
from dataArchival.MyTable d,#myTemp d2
where d.DateLocal=d2.DateLocal

delete d from dataArchival.MyTable d
(
 SELECT
        *,
        RN = ROW_NUMBER() OVER(ORDER BY (SELECT NULL))
    FROM dataArchival.MyTable
    where DateLocal  BETWEEN '2018-03-01' AND '2018-10-01'
)A where A.RN <=10000

И ofcource CTE и @@ rowcount также не поддерживаются.

1 Ответ

0 голосов
/ 11 марта 2019

Согласно документации Хранилище данных SQL Azure не поддерживает TOP(n) с DELETE на данный момент:

-- Syntax for Azure SQL Data Warehouse and Parallel Data Warehouse  
DELETE FROM [database_name . [ schema ] . | schema. ] table_name    
    [ WHERE <search_condition> ]   
    [ OPTION ( <query_options> [ ,...n ]  ) ]  
[; ]  

Однако вы можете написать сценарий для аналогичного эффекта, напримерэтот пример адаптирован из этого примера для удаления по дате:

CREATE TABLE #tmp
WITH ( 
DISTRIBUTION = ROUND_ROBIN
)
AS
SELECT
    ROW_NUMBER() OVER( ORDER BY ( SELECT NULL ) ) AS rowId,
    DateLocal
FROM ( SELECT DISTINCT DateLocal FROM dataArchival.MyTable ) x;


DECLARE @sql_code NVARCHAR(4000) = 'DELETE dataArchival.MyTable WHERE DateLocal = @p1'
DECLARE @nbr_statements INT = ( SELECT COUNT(*) FROM #tmp ),
        @i INT = 1;


WHILE   @i <= @nbr_statements
BEGIN
    DECLARE @p1 DATE = ( SELECT DateLocal FROM #tmp WHERE rowId = @i );
    EXEC    sp_executesql @sql_code, N'@p1 DATE', @p1
    SET     @i +=1;
END

Вы можете легко изменить этот пример для удаления партиями по 10 000, если удаление по дате неудовлетворительно.Здесь есть еще один пример группового удаления:

https://docs.microsoft.com/en-us/azure/sql-data-warehouse/sql-data-warehouse-develop-best-practices-transactions#minimize-logging-with-small-batches

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