无法对DATE列进行最基本的范围分区修剪类型?

2020-08-18 17:16发布

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

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


你好

是否在DATE列上进行分区以进行分区修剪?

但是它应该:

https://help.sap.com/查看器/6b94445c94ae495c83a19646e7c3fd56/2.0.04/zh-CN/8dd866a688ec4914a074727a2c800142.html

2416490-常见问题解答:SAP S/4HANA中的SAP HANA数据老化

有一张桌子:

创建表MYPART(XINTEGER整数

,YDATE DATE

,ZVARCHAR2 VARCHAR(2)

);

...添加主键:

ALTER TABLE MYPART添加约束MYPART主键(XINTEGER

,YDATE);

...在YDATE的DATE列上添加分区

按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY')

...并获得:

在32 ms 321 µs中无法执行"按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY')"。 SAP DBTech JDBC:[2048]:列存储错误:无法更改分区:[2594]常规分区错误;处理分区规范时出错。 值'01 .01.2000'无法转换为整数。


与其他人一起尝试

按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY',其他部分)

...并获得相同的结果:

在35 ms 629 µs内无法执行"按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY',...")。SAP DBTech JDBC:[ 2048]:列存储错误:无法更改分区:[2594]常规分区错误;处理分区规范时出错。值'01 .01.2000'无法转换为整数。

可能认为格式化会有所帮助:

按范围(YDATE)更改表MYPART分区(分区to_DATE('01 .01.2000','DD.MM.YYYY')<=值

...并获得:

无法执行"按范围(YDATE)更改表MYPART分区(分区to_DATE('01 .01.2000','DD.MM.YYYY')<= ..." SAP DBTech JDBC:[257]:sql语法 错误:" to_DATE"附近的语法不正确:第1行col 59(在pos 59)

DATE列上没有范围分区?

最佳马丁

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

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


你好

是否在DATE列上进行分区以进行分区修剪?

但是它应该:

https://help.sap.com/查看器/6b94445c94ae495c83a19646e7c3fd56/2.0.04/zh-CN/8dd866a688ec4914a074727a2c800142.html

2416490-常见问题解答:SAP S/4HANA中的SAP HANA数据老化

有一张桌子:

创建表MYPART(XINTEGER整数

,YDATE DATE

,ZVARCHAR2 VARCHAR(2)

);

...添加主键:

ALTER TABLE MYPART添加约束MYPART主键(XINTEGER

,YDATE);

...在YDATE的DATE列上添加分区

按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY')

...并获得:

在32 ms 321 µs中无法执行"按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY')"。 SAP DBTech JDBC:[2048]:列存储错误:无法更改分区:[2594]常规分区错误;处理分区规范时出错。 值'01 .01.2000'无法转换为整数。


与其他人一起尝试

按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY',其他部分)

...并获得相同的结果:

在35 ms 629 µs内无法执行"按范围(YDATE)更改表MYPART分区(分区'01 .01.2000'<=值<'DD.MM.YYYY',...")。SAP DBTech JDBC:[ 2048]:列存储错误:无法更改分区:[2594]常规分区错误;处理分区规范时出错。值'01 .01.2000'无法转换为整数。

可能认为格式化会有所帮助:

按范围(YDATE)更改表MYPART分区(分区to_DATE('01 .01.2000','DD.MM.YYYY')<=值

...并获得:

无法执行"按范围(YDATE)更改表MYPART分区(分区to_DATE('01 .01.2000','DD.MM.YYYY')<= ..." SAP DBTech JDBC:[257]:sql语法 错误:" to_DATE"附近的语法不正确:第1行col 59(在pos 59)

DATE列上没有范围分区?

最佳马丁

付费偷看设置
发送
4条回答
渐行渐远_HoldOn
1楼 · 2020-08-18 17:57.采纳回答

你好拉尔斯,

谢谢,明白了:

-按天划分的日期格式为YYYYMMDD。
-上面的TO_DATE旨在使DAY格式在语义上正确。

"按天计算"设计旨在最大程度地提高海量数据的性能,
最后应如下所示:

-我想,通过说服解析器/执行计划直接放入某个分区,可以使按日访问的性能最佳。

-一个HANA分区密钥或为我的CALENDAR_TIME添加的任何内容
-批量数据的联接超过了分区密钥。

这将需要:

---->一个HANA SQL SELECT关键字(例如Oracle中的PARTITION)
精确地放入某个分区或还有其他方法吗?
(不能在保留字-SAP帮助门户

-一种识别分区密钥的方法,例如。 从系统视图中查看

两者都有办法吗?

谢谢!

最良好的祝愿

马丁

2楼-- · 2020-08-18 17:47

嗨,马丁,介意选择我的答案作为解决这个问题的最好方法吗?

我为您提供帮助只是出于礼貌。

>

赞赏。

jovirus
3楼-- · 2020-08-18 17:57

分区定义语法不是太灵活。

如果输入这样的日期范围

更改表mypart
 按范围划分(ydate)
 (部分'20190101'<=值<'20200101',
 分区'20200101'<=值<'20210101',
 分区其他);
 

它起作用。

但是不知道为什么"'DD.MM.YYYY'"应该是原始代码中的上限。

关于 最基本的分区-如果您想按年份分区,我建议使用YEAR()函数进行分区。 这样可以更轻松地指定分区。

更改表mypart
 按范围划分(年(ydate))
 (PARTITION值= 2019,
 分区值= 2020,
 分区其他);
 

这里的日期时间格式没有问题。

是的,我完全了解PARTITION子句,只是无法理解您的意思 通过"。 .. drop到特定分区... "。

" 是否可以从特定分区读取?"

现在,此选项的目的不是调整性能,而是提供(相对)低级控制来读取数据的选项。

一个例子是 从表中提取数据,该表中并非所有分区都可以一起加载,或者一个分区根本不可读(例如由于数据损坏)。

作为调整机制,这是垃圾。

>

当一行DBA决定对表进行重新分区时,您将做什么? 重写所有的SQL代码吗?

看看您的测试用例-您正在比较数十毫秒的差异来查看单个执行。

并且在分区修剪优化过程中,运行时不会随数据量扩展,因此很容易在误差范围内。 两种执行计划都表明,数据是从相同的分区中获取的。

有效地,您将动态和自动分区修剪交换为某些东西,只要以最小的方式更改了分区方案,该东西就会立即中断( 并可能产生错误的结果集,因为没人会意识到这一点-不会出现错误消息!),并节省了20毫秒的准备时间...不是一个很好的交换。

一周热门 更多>