gpt4 book ai didi

java - 将一组列从一个表复制到另一个表

转载 作者:行者123 更新时间:2023-12-02 08:38:30 25 4
gpt4 key购买 nike

我的要求是从表中读取一些列集。源表有许多 - 大约 20-30 个数字列,我只想从源表中读取一组这些列,并继续将这些列的值附加到目标表。我的数据库是Oracle,编程语言是JDBC/Java。

源表非常动态 - 频繁发生插入和删除它。而在目标表中,我希望将数据保留至少 30天。我的设置描述如下 -数据库是Oracle。源表中的行数 = 2000 万行 30 列目标表中的行数 = 3 亿行,2-3 列

这些列都是数字。

我正在考虑不打开普通的 JDBC 连接并传输数据,考虑到表格的大小,这可能会非常慢。我正在尝试使用一些方法转储源表的选定列类似于 sql -

SQL> spool on
SQL> select c1,c5,c6 from SRC_Table;
SQL> spool off

然后使用SQLLoader将数据加载到目标数据库中。

源表存储时间序列数据,并且数据会在 2 天内从源表中清除/删除。它是 OLTP 环境的一部分。目标表具有较长的保留期 - 可以存储 30 天的数据,并且它是 OLAP 环境的一部分。因此,源表上的 View ( View 仅从源表中选择一组列)在此环境中不起作用。欢迎对此方法提出任何建议或评论意见。

编辑我的表已分区。复制数据最简单的方法是交换网络表之间的分区

*ALTER TABLE <table_name>
EXCHANGE PARTITION <partition_name>
WITH TABLE <new_table_name>
<including | excluding> INDEXES
<with | without> VALIDATION
EXCEPTIONS INTO <schema.table_name>;*

但是由于我的源表和目标表有不同的列,所以我认为交换分区不起作用。

最佳答案

Shamik,好的,您正在使用 OLTP 数据加载 OLAP 数据库。

可接受的延迟是多少?您的 OLAP 在人们明天早上进入办公室之前是否需要今天的数据,或者是否更接近实时。

说插入内容“频繁”并没有任何意义。我们中的一些人习惯了每秒数千次交易 - 对于其他人来说每秒 1 次就已经很多了。

你说有很多数据。同样的想法。我读过人们的帖子,他们有包含几百万条记录的巨大表。我有一个包含数千亿条记录的表。再次如此。真实的数字非常有帮助。

不要使用 Schwern 建议的触发器。如果您认为插入量很大,则意味着您可能在该区域遇到了问题。触发只会让事情变得更糟。

Oracle 提供了许多不同的选择来将数据从 OLTP 获取到 OLAP。不要重新发明轮子,而是使用已经写好的东西。 Oracle Streams 正是为了完成这项工作而诞生的。您可以使用 Oracle AQ 滚动自己的流。您可以使用数据库更改通知或更改数据捕获来捕获插入的行,而无需触发器。

这是一个极其常见的问题,因此我列出了 4 种旨在解决该问题的技术。

高级排队流变更数据捕获数据库更改通知

开始用谷歌搜索这些术语,然后带着有关这些术语的问题回来。你会比从头开始构建自己的或使用触发器更好。

关于java - 将一组列从一个表复制到另一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/521278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com