假脱机输出查询中涉及的多个表
Posted
技术标签:
【中文标题】假脱机输出查询中涉及的多个表【英文标题】:Spool output multiple tables involved in query 【发布时间】:2020-06-02 10:05:24 【问题描述】:我正在尝试寻找有效的方法从数据库中提取大量数据,并将其放在云平台上进行分析(由于技术原因,无法以自动化方式进行此操作)。对于大表,我想一次提取一个月数据的 CSV;但是,一个巨大的表没有日期,并且 ID 有一个前缀,所以我不能简单地获得一系列 ID。所以我想我必须加入另一张桌子。像这样的:
select * from big_table
inner join (
select * from table2 where date between to_date("'2020-04-01'","yyyy-mm-dd") and to_date("'2020-05-01'","yyyy-mm-dd") query_result
on big_table.id = query_result.id
问题是,我希望能够将此查询和内部查询的结果以 CSV 格式存储到单独的文件中。内部查询可能需要一些时间来运行(大约 8 分钟),所以理想情况下,我希望运行上面的整个查询并导出到两个位置,而不是将上面的查询和内部查询作为单独的任务运行(从而复制工作)。
这可能吗?
【问题讨论】:
【参考方案1】:我认为您不能同时假脱机到两个位置。但是您可以创建一个临时表并使用它:
create temp table temp_table2 as
select t2.*
from table2 t2
where date >= date '2020-04-01' and
date < date '2020-05-01';
然后,您可能希望在此创建索引:
create index idx_temp_table2_id on table2(id);
然后:
select bt.*
from big_table bt join
temp_table2 t2
on bt.id = t2.id;
您仍然需要单独缠绕它们。
注意:table2(date)
上的简单索引可能足以加快两个查询。
【讨论】:
以上是关于假脱机输出查询中涉及的多个表的主要内容,如果未能解决你的问题,请参考以下文章