Согласно документации Хранилище данных 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