收集teradata 14中的统计信息 - 不允许在同一组列上使用不同列排序的多个统计信息

时间:2012-11-20 16:49:39

标签: teradata

Teradata 14(由TC提供)可能会引起人们的注意。

使用如下定义的表:

CREATE TABLE test( 
CALENDAR_DATE DATE FORMAT 'YY/MM/DD' NOT NULL           
,RETAIL_OUTLET_NUMBER INTEGER NOT NULL   
,BASE_PRODUCT_NUMBER INTEGER NOT NULL      
) 
PRIMARY INDEX (calendar_date, retail_outlet_number, base_product_number)

此SQL将失败:

COLLECT STATS test COLUMN(
calendar_date, base_product_number, retail_outlet_number); 

错误消息:

  

3706:语法错误:不允许在同一组列上使用不同列排序的多个统计信息

可是:

COLLECT STATS test COLUMN(
calendar_date, retail_outlet_number, base_product_number);

会好的。

现在,在collect stats语句和主索引中,列的顺序必须相同。

...

还有其他方法可以让它们无需更改列顺序???

...谢谢

2 个答案:

答案 0 :(得分:3)

使用Teradata 14,您可以通过明确命名来解决多列统计信息的问题:

COLLECT STATISTICS
 COLUMN (Calendar_Date, Base_Product_Number, Retail_Outlet_Number) AS Stats_CalDate_ProdNum_RtlNum
     ON test;

后续的回忆可以使用:

完成
COLLECT STATISTICS COLUMN Stats_CalDate_ProdNum_RtlNum ON test;

Teradata客户可以通过Teradata @ Your Service或您的CSR获得一本橙皮书,解释了这一点以及Teradata 14 Statistics的其他注意事项。 Carrie Ballinger还简要介绍了Teradata 14 Statistics增强功能here

答案 1 :(得分:2)

此错误即将发生,因为已按顺序收集统计信息

  

calendar_date,retail_outlet_number,base_product_number

您无法在不同订单中的相同列上收集统计信息。所以,如果你想按照你想要的顺序收集,即

  

calendar_date,base_product_number,retail_outlet_number

您必须先使用

进行DROP统计
DROP STATS ON TEST COLUMN(calendar_date, retail_outlet_number, base_product_number);

然后使用您的首选订单再次收集。