【问题标题】:Teradata drop statistics if statistics exist如果存在统计信息,Teradata 会删除统计信息
【发布时间】:2020-04-09 08:44:57
【问题描述】:

DDL/DML 脚本正在修改表结构,列上存在统计信息会阻止它继续进行。 找到的解决方案是 - 首先删除正在修改/删除的列的统计信息。

但是,如果统计信息不存在,则脚本会在尝试删除这些统计信息时依次中止。

什么是实现“如果统计数据存在丢弃统计数据”逻辑的廉价方法?

【问题讨论】:

  • 这个脚本如何运行,BTEQ?
  • SQL,所以也可以是BTEQ
  • 在 BTEQ 脚本中可能有一个 MAXERROR 导致脚本失败,在这种情况下,您只需在 DROP 之前.SET ERRORLEVEL 3582 severity 0;,这不会导致丢失统计信息失败。或者您首先检查dbc.StatsV 中是否存在统计信息,然后如果没有返回行则跳过收集。
  • @dieter,您能否将您的评论移至答案部分,以便我接受它作为解决方案?

标签: teradata


【解决方案1】:

根据 Dieter 的反馈,这似乎在 SQL*Assistant 中按预期工作:

select * from dbc.StatsV
where tablename='${table_name}'
  and columnName='${column_name}'
;

.IF ACTIVITYCOUNT>0 THEN .GOTO lbl_drop;

select 'Stats not found for column ${column_name}';
.EXIT; 

.LABEL lbl_drop;
select 'Dropping stats for column ${column_name}';
DROP STATISTICS ON ${table_name} COLUMN ${column_name};

【讨论】:

    猜你喜欢
    • 2010-09-06
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 2011-05-08
    相关资源
    最近更新 更多