将过滤器与日期时间函数一起放在分区列上时不考虑分区

2020-08-19 05:36发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我有一张表,上面已经添加了哈希范围分区。 在时间戳字段上创建范围分区。 下面是我创建分区的方式-

更改 表TABLE_NAME

PARTITION BY

哈希(GUID)分区1,

RANGE 年份 TIMESTAMP_COLUMN ))

PARTITION VALUE ='2018',

PARTITION VALUE ='2019',

PARTITION 值=" 2020",

其他部分);

现在,当我在同一TIMESTAMP_COLUMN上使用日期时间函数" YEAR"查询此表时,分区未查看特定的分区ID。 它正在所有分区中查找(检查相同的解释计划后就知道了)。

下面是我正在执行的查询-

SELECT PRODUCT_ID,最大值(TIMESTAMP_COLUMN)为最新时间

TABLE_NAME

所在年份( TIMESTAMP_COLUMN )> ='2019'

按PRODUCT_ID分组;

为什么有这种方式工作? 它不应该只考虑2019、2020和OTHERS分区吗? 还是我在这里做错了什么?

这是说明计划中显示的OPERATOR_DETAILS-

OPERATOR_DETAILS

TABLE_NAME.PRODUCT_ID,最大值(TABLE_NAME.TIMESTAMP_COLUMN)

组:TABLE_NAME.PRODUCT_ID,集合:MAX(TABLE_NAME.TIMESTAMP_COLUMN)

过滤条件:EXTRACT(TABLE_NAME的年份。TIMESTAMP_COLUMN)> = 2019

此致

Prachi

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我有一张表,上面已经添加了哈希范围分区。 在时间戳字段上创建范围分区。 下面是我创建分区的方式-

更改 表TABLE_NAME

PARTITION BY

哈希(GUID)分区1,

RANGE 年份 TIMESTAMP_COLUMN ))

PARTITION VALUE ='2018',

PARTITION VALUE ='2019',

PARTITION 值=" 2020",

其他部分);

现在,当我在同一TIMESTAMP_COLUMN上使用日期时间函数" YEAR"查询此表时,分区未查看特定的分区ID。 它正在所有分区中查找(检查相同的解释计划后就知道了)。

下面是我正在执行的查询-

SELECT PRODUCT_ID,最大值(TIMESTAMP_COLUMN)为最新时间

TABLE_NAME

所在年份( TIMESTAMP_COLUMN )> ='2019'

按PRODUCT_ID分组;

为什么有这种方式工作? 它不应该只考虑2019、2020和OTHERS分区吗? 还是我在这里做错了什么?

这是说明计划中显示的OPERATOR_DETAILS-

OPERATOR_DETAILS

TABLE_NAME.PRODUCT_ID,最大值(TABLE_NAME.TIMESTAMP_COLUMN)

组:TABLE_NAME.PRODUCT_ID,集合:MAX(TABLE_NAME.TIMESTAMP_COLUMN)

过滤条件:EXTRACT(TABLE_NAME的年份。TIMESTAMP_COLUMN)> = 2019

此致

Prachi

付费偷看设置
发送
1条回答
木偶小白
1楼 · 2020-08-19 06:17.采纳回答

HANA的分区修剪功能非常简单(也可以说"简单")...

您的查询将要求HANA识别

-YEAR( )中分区定义中的表达式与您的查询中的表达式相同,可以直接进行比较。 不是这种情况。

-HANA可以做的是将时间戳值与时间戳分区进行比较。 显然,它无法将时间戳值上的函数与用于将数据分发到分区的函数进行比较。

因此,当您将查询更改为例如

 SELECT时
    PRODUCT_ID,最大值为(TIMESTAMP_COLUMN),为LATEST_TIMESTAMP
 从
    TABLE_NAME
 哪里
  TIMESTAMP_COLUMN> =时间戳'01 .01.2019'
 GROUP BY PRODUCT_ID; 

您会发现该分区的修剪工作正常。

认为"哦,分区子句中有一个函数-我可以简单地使用 在我的查询中使用相同的函数,HANA会理解"事实并非如此。

分区表达式的处理方式与常规SQL函数/表达式不同。 这也可能就是为什么不能将任意函数用作分区函数的原因。

一周热门 更多>