在 teradata 14 中收集统计信息 - 不允许在同一组列上具有不同列排序的多个统计信息
Posted
技术标签:
【中文标题】在 teradata 14 中收集统计信息 - 不允许在同一组列上具有不同列排序的多个统计信息【英文标题】:collect stats in teradata 14 - Multiple statistics with different column ordering on the same set of columns are not allowed 【发布时间】:2012-11-20 16:49:39 【问题描述】: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 语句和主索引中的列顺序必须相同。
...
有没有其他方法可以让它们在不改变列顺序的情况下工作???
谢谢...
【问题讨论】:
【参考方案1】:使用 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。
【讨论】:
感谢您的回复罗。我担心的是,我的逻辑在我自己的环境和分期中都运行良好。但是当我将相同的代码投入生产时,它会因给定的错误而失败。是因为任何 Teradata 环境设置吗? teradata 的数据设备对于生产和测试是不同的。 您在每个环境中运行的是什么版本的 Teradata? 我正在使用 Teradata 14 进行测试和生产。 如果两个环境都在运行 Teradata 14,那么如果您不在同一组列上以不同的顺序使用命名的多列统计信息集合,我预计会看到错误 3706。应该与环境设置无关。当您在 PROD 中收到错误后收集它们时,TEST 中是否可能不存在这些统计信息。【参考方案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);
然后使用您喜欢的顺序再次收集。
【讨论】:
以上是关于在 teradata 14 中收集统计信息 - 不允许在同一组列上具有不同列排序的多个统计信息的主要内容,如果未能解决你的问题,请参考以下文章
Nebula Graph 特性讲解——RocksDB 统计信息的收集和展示