问题描述
嗨,汤姆,
我有一个要求为现有表创建范围分区。
假设表名是Orders。
该表具有timestamp datatype的Order_Date列,数据在UTC时区。
[我们在文件中以UTC格式获取数据以加载到此表中,并且业务希望保持其状态,因此我们在加载前几天的数据时未在EST时区填充]
企业希望在未来的报告中以EST时区查询此表。我们必须为此表创建分区。所以我们的建议是创建一个虚拟列,它应该有EST时区,数据应该是时间戳格式 (应该与实际列相同),然后在这个虚拟列上创建范围分区。
我正在尝试使用CTAS... 语法创建partitoin表,如下所示
创建表订单 _ 部件
(订单id,
订单日期,
订单 _ 描述,
订单 _ zip,
Order_date_est as (cast(from_tz(订单日期, 'UTC') at time zone 'America/New_York' as timestamp))
)
按范围划分 (订单日期) 间隔 (numtodsinterval(1,“天”))
(分区p_before_2000值小于 (to_date('01-jan-2000 ','dd-mon-yyy')) 表空间ts1 pctfree 0)
表空间ts1 nologging pctfree 0
从订单中选择/* 并行 (8) */ *;
但是上面的代码给我错误 “SQL错误: ORA-01773: 可能未在此创建表中指定列数据类型”
我知道当我们使用cta语法时,我们不应该指定列数据类型。但是不确定如何在创建分区表的同时创建虚拟列。
我可以创建一个具有所有列名和数据类型的分区表,然后运行DML以插入所有数据,如下所示,
插入order_part作为select * 从订单;
但是在这种情况下,我们在原始表中有8000万条记录,因此不确定插入需要多少时间。因此,请建议我什么是完成我的要求的最佳方法。
提前谢谢。
我有一个要求为现有表创建范围分区。
假设表名是Orders。
该表具有timestamp datatype的Order_Date列,数据在UTC时区。
[我们在文件中以UTC格式获取数据以加载到此表中,并且业务希望保持其状态,因此我们在加载前几天的数据时未在EST时区填充]
企业希望在未来的报告中以EST时区查询此表。我们必须为此表创建分区。所以我们的建议是创建一个虚拟列,它应该有EST时区,数据应该是时间戳格式 (应该与实际列相同),然后在这个虚拟列上创建范围分区。
我正在尝试使用CTAS... 语法创建partitoin表,如下所示
创建表订单 _ 部件
(订单id,
订单日期,
订单 _ 描述,
订单 _ zip,
Order_date_est as (cast(from_tz(订单日期, 'UTC') at time zone 'America/New_York' as timestamp))
)
按范围划分 (订单日期) 间隔 (numtodsinterval(1,“天”))
(分区p_before_2000值小于 (to_date('01-jan-2000 ','dd-mon-yyy')) 表空间ts1 pctfree 0)
表空间ts1 nologging pctfree 0
从订单中选择/* 并行 (8) */ *;
但是上面的代码给我错误 “SQL错误: ORA-01773: 可能未在此创建表中指定列数据类型”
我知道当我们使用cta语法时,我们不应该指定列数据类型。但是不确定如何在创建分区表的同时创建虚拟列。
我可以创建一个具有所有列名和数据类型的分区表,然后运行DML以插入所有数据,如下所示,
插入order_part作为select * 从订单;
但是在这种情况下,我们在原始表中有8000万条记录,因此不确定插入需要多少时间。因此,请建议我什么是完成我的要求的最佳方法。
提前谢谢。
专家解答
无论你做什么,你都有问题 .... 因为时区函数不是纯粹的
但这就是说,cta的性能成本与使用直接模式插入几乎相同
-创建表格
-插入/* 追加 */到
SQL> create table order_part 2 ( order_id int, 3 Order_ts timestamp, 4 Order_date_est timestamp as (cast(from_tz(Order_ts, 'UTC') at time zone 'America/New_York' as timestamp)) 5 ); Order_date_est timestamp as (cast(from_tz(Order_ts, 'UTC') at time zone 'America/New_York' as timestamp)) * ERROR at line 4: ORA-54002: only pure functions can be specified in a virtual column expression复制
但这就是说,cta的性能成本与使用直接模式插入几乎相同
-创建表格
-插入/* 追加 */到
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle DataGuard高可用性解决方案详解
孙莹
552次阅读
2025-03-26 23:27:33
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
514次阅读
2025-04-15 17:24:06
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
419次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
416次阅读
2025-04-01 15:56:03
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
415次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
412次阅读
2025-04-01 11:08:44
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
376次阅读
2025-04-20 10:07:02
Oracle 19c RAC更换IP实战,运维必看!
szrsu
357次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
334次阅读
2025-04-17 17:02:24
oracle定时任务常用攻略
virvle
324次阅读
2025-03-25 16:05:19