2

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 语句和主索引中的列顺序必须相同。

...

有没有其他方法可以让它们在不改变列顺序的情况下工作???

谢谢...

4

2 回答 2

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 统计的其他注意事项。Carrie Ballinger 还在此处简要介绍了 Teradata 14 Statistics 增强功能。

于 2012-11-20T19:29:27.103 回答
2

出现此错误是因为订单中已经收集了统计信息

calendar_date、retail_outlet_number、base_product_number

您不能以不同的顺序收集同一列的统计信息。所以如果你想按你想要的顺序收集,即

calendar_date、base_product_number、retail_outlet_number

您必须首先使用 DROP stats

DROP STATS ON TEST COLUMN(calendar_date, retail_outlet_number, base_product_number);

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

于 2013-02-13T09:41:14.440 回答