【问题标题】:How to delete row from a heap with a batch size 10000如何从批量大小为 10000 的堆中删除行
【发布时间】:2019-03-11 09:26:59
【问题描述】:

不支持-

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。

【问题讨论】:

  • 您的语法似乎没问题。也许是 MyTable 中的触发器?顺便说一句,它说第 4 行,它是您正在执行的完整代码吗?
  • 是的,这是我正在执行的唯一语句。并且没有触发器。
  • 不支持我用 top 删除的错误。 docs.microsoft.com/en-us/sql/t-sql/statements/…

标签: sql-delete azure-sql-data-warehouse


【解决方案1】:

根据the documentation,Azure SQL 数据仓库目前不支持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 ]  ) ]  
[; ]  

但是您可以编写类似效果的脚本,例如此示例改编自 this example 以按日期删除:

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

【讨论】:

  • 感谢您的回复。但问题是我的表中每个日期没有固定数量的记录。这是我认为的另一种解决方案,但我需要一种通用方法,无论 id 列/日期列如何,我都可以一次删除 10,000 行。
  • 如果没有其他东西可以过滤或分组为 10,000 个块,这可能会很棘手。您能否发布其余的架构以及表中记录数的想法等?
猜你喜欢
  • 2021-02-20
  • 1970-01-01
  • 2013-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-23
  • 2020-02-20
  • 2020-01-08
相关资源
最近更新 更多