Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Unix shell中分组数据或在Oracle中分组方式_Sql_Oracle_Shell_Unix - Fatal编程技术网

Sql 在Unix shell中分组数据或在Oracle中分组方式

Sql 在Unix shell中分组数据或在Oracle中分组方式,sql,oracle,shell,unix,Sql,Oracle,Shell,Unix,按多列数据分组的最佳和最优化的方法是什么 需要执行操作的数据是400 x 1000万行或行。 我乘以了10,因为我们有10个分区或10个文件,每个分区或文件大约有400m行 问题: 从oracle获取列后,临时表中有10列 在获取的数据上,我需要按一些列进行分组,并添加一些列的总和 选项: 我可以通过在同一查询中使用GROUPBY子句而不是 而不是创建临时表:下面我也得到了参考快照 古老的 我在临时表中获取数据,并确保表分区正确 是这样的,组由变得很快。 我在一个文件中获取数据,并使用awk或

按多列数据分组的最佳和最优化的方法是什么

需要执行操作的数据是400 x 1000万行或行。 我乘以了10,因为我们有10个分区或10个文件,每个分区或文件大约有400m行

问题: 从oracle获取列后,临时表中有10列 在获取的数据上,我需要按一些列进行分组,并添加一些列的总和

选项:

我可以通过在同一查询中使用GROUPBY子句而不是 而不是创建临时表:下面我也得到了参考快照 古老的 我在临时表中获取数据,并确保表分区正确 是这样的,组由变得很快。 我在一个文件中获取数据,并使用awk或 unix/perl命令。 查询:

select /*+ parallel (a,10) */
  customer_type, customer_sub_type, charge_code, cycle,month,
  sum(amount),sum(final_amount)
from htg_customer_data a
where cycle=1
and month=1
and sys_creation_date < to_date('20140131235959', yyyymmddhh24miss)
group by customer_type, customer_sub_type, charge_code, cycle, month

表是按周期和月份划分的,它有10个分区。每行4亿行。以上使用的字段都没有索引。摘录中不需要索引列。

您没有提供完整的信息

通常,在数据库中执行操作比将数据移动到另一个环境要快。这有几个原因:

数据库服务器通常比应用服务器更强大。 数据库引擎可以利用网格计算多处理器、多磁盘 数据库引擎可以智能地优化查询 数据库引擎可以实现比排序和循环更好的聚合技术 所有这些都适用于Oracle,它拥有复杂的算法和良好的优化器

我会立即排除第3条,因为将如此大量的数据移出数据库将是一个漫长的过程。然后你必须处理一个非常大的文件来做你真正想做的事情


很可能,1是最好的方法。在某些情况下,临时表可能会提供额外的性能提升。

请告诉我您需要什么样的信息?是关于硬件配置和oracle版本的。@Kimi。您在数据库中考虑的查询是什么?什么是表结构,包括索引和分区?@Kimi。数据库中的聚合应该很好。Oracle应该足够聪明,可以分别为每个分区执行此操作,因为分区键位于group by子句中。使用/*+MATERIALIZE*/是否有助于将上述查询固定下来?@Kimi。您的查询没有子查询,所以我看不出该提示有多重要。