资讯专栏INFORMATION COLUMN

【巨杉数据库Sequoiadb】SparkSQL 如何在做完子查询后,将子查询结果作为条件下压到 S

dackel / 3198人阅读

摘要:有办法通过优化做到做完子查询再把所有条件一起下压到吗表,数据量亿,索引表,数据量千万,索引查询计划见附件。因此无法将子查询结果作为条件下压。建议分两次查询完成,先从表中查询,然后在应用层用查询结果生成表的匹配条件,再对表进行查询。

【问题详细描述】
有以下 sql 语句。SQL1 耗时约 4s,SQL2、SQL3 耗时约 1 个小时。有办法通过优化 SQL2 做到做完子查询再把所有条件一起下压到 SequoiaDB 吗?

表:ibs.pb_log, 数据量:600亿 ,索引:log_cstno + log_datetime
表:ibs.pb_cstinf_pro,数据量:4千万, 索引:cip_ctfno

SQL1:
SELECT * FROM ibs.pb_log WHERE log_cstno IN
("2339139")
AND log_datetime BETWEEN CONCAT("20190101", "000000") AND CONCAT("20190429", "000000")

SQL2:
SELECT * FROM ibs.pb_log WHERE log_cstno IN
(SELECT cip_cstno FROM ibs.pb_cstinf_pro WHERE cip_ctfno IN ("360426198807174073"))
AND log_datetime BETWEEN CONCAT("20190101", "000000") AND CONCAT("20190429", "000000")

SQL3:
SELECT * FROM ibs.pb_log LEFT JOIN ibs.pb_cstinf_pro ON
log_cstno=cip_cstno WHERE
log_datetime BETWEEN CONCAT("20190101", "000000") AND CONCAT("20190429", "000000") AND
cip_ctfno IN ("360426198807174073")

查询计划见附件。

【解决办法】

由于 SparkSQL 自身限制,无法通过 SQL 优化做到。需考虑拆分为两个多带带的查询来完成。

该场景适合使用 NLJOIN(Nested Loop Join),但 SparkSQL 只有 HSJOIN(Hash Join)和 MSJOIN(Sort Merge Join)。因此无法将子查询结果作为条件下压。

【参考资料】
表的三种Join方法 (NLJOIN, HSJOIN, MSJOIN):https://www.cnblogs.com/sophy...

【解决办法】

由于 SparkSQL 自身限制,无法通过 SQL 优化做到。该场景适合使用 NLJOIN(Nested Loop Join),但 SparkSQL 只有 HSJOIN(Hash Join)和 MSJOIN(Sort Merge Join)。因此无法将子查询结果作为条件下压。

建议分两次查询完成,先从 ibs.pb_cstinf_pro 表中查询,然后在应用层用查询结果生成 ibs.pb_log 表的匹配条件,再对 ibs.pb_log 表进行查询。

【参考资料】
表的三种Join方法 (NLJOIN, HSJOIN, MSJOIN):https://www.cnblogs.com/sophy...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/110761.html

相关文章

  • 巨杉据库Sequoiadb如何在做完子查询将子查询结果作为条件下压 SequoiaDB

    摘要:有办法通过优化做到做完子查询再把所有条件一起下压到吗表,数据量亿,索引表,数据量千万,索引查询计划见附件。因此无法将子查询结果作为条件下压。建议分两次查询完成,先从表中查询,然后在应用层用查询结果生成表的匹配条件,再对表进行查询。 【问题详细描述】 有以下 sql 语句。SQL1 耗时约 4s,SQL2、SQL3 耗时约 1 个小时。有办法通过优化 SQL2 做到做完子查询再把所有条...

    QLQ 评论0 收藏0
  • Spark官方Blog:SequoiaDBSpark深度整合

    摘要:作者是的联合创始人和王涛先生,是一款文档型的事务型数据库。王涛带着技术上非凡的远见,带领的团队取得了许多技术上的突破和成功。允许在同一集群同时运行数据分析和数据操作负载,并且保证最小的和使用率。 这是一篇来自我们的技术合作伙伴,SequoiaDB巨杉数据库的博客。作者是SequoiaDB的联合创始人和CTO王涛先生,SequoiaDB是一款JSON文档型的事务型数据库。王涛带着技术上非...

    yuanzhanghu 评论0 收藏0
  • 巨杉据库Sequoiadb】使用sdbimprt导入工具,如何将两个不同结构的csv文件按条件

    摘要:问题描述两个类型关系型数据库的文件,比如说产品表和分类表,现在这两个文件不是我们能控制的,只有两个文件,需要自己去整合,那么使用导入工具,如何将这两个不同结构的文件能按条件整合导入到的一个表中呢解决办法先使用导入工具将两个文件导入到的表中, 【问题描述】 两个类型关系型数据库的csv文件,比如说产品表和分类表,现在这两个文件不是我们能控制的,只有两个文件,需要自己去整合, 那么使用sd...

    jeffrey_up 评论0 收藏0
  • 巨杉应用案例:大数据司法查询平台

    摘要:在查询或者查阅时,人民法院应当向银行出具正式公函,由银行行长主任指定具体的业务部门负责提供有关的情况和资料并派专人接待。人民法院对银行提供的资料应当保守秘密。数据存储加工层是司法查询平台的核心,主要基于分布式数据库和内存分析框架构成。 1、前言 公检法机关因审理经济纠纷案件或经济犯罪案件需要向银行查询企业事业单位、机关、团体的银行存款或者查阅与案件有关的会计凭证、账册、报表等档案资料,...

    zhichangterry 评论0 收藏0
  • 巨杉据库Sequoiadb】用pg对500W数据进行group by操作,耗时过长(50秒)

    摘要:和语句对关联表执行查询对原生表执行查询用内置执行,耗时秒。用执行,耗时秒。网络带宽传输数据时约为。有关截图见附件截图三解决办法在耗时和使用内置耗时差不多,都是左右。从的访问计划见截图三来看,绝大部分耗时也是在上。 【用户咨询】 用sequoiasql-postgresql创建一个关联表,存入500W数据。在创建索引的情况下,用pg进行简单的group by查询,平均耗时是50秒,是否可...

    scq000 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<