首页
学习
活动
专区
圈层
工具
发布

spark sql简单查询千亿级库表导致的问题

一、问题现象 今天有客户咨询到我们,他们利用spark sql查询简单的sql: select * from datetable limit 5; //假设表名是datetable 结果报错内存溢出:...2.png 根据常理判断,简单的 select * limit 不会造成内存溢出的。...因此,我们用hive原生sql查询,发现不存在这个问题。 二、排查问题 经过分析,发现被查询的表数据量特别大,整个表有1000多亿行数据。...一般这种海量数据大型数据表,往往是做了多重分区的。 经过查看,发现被查询的数据表是双重分区表(也就是有两个分区字段)。dt是第一个分区字段,表示天; hour是第二个分区字段,表示小时。...三、验证结论 1、首先我们直接用spark sql查询: select * from datetable limit 5; 从日志可以查看出excutor在疯狂地扫描HDFS的文件: 而且这些被扫描的

5.4K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    擅用子查询,让复杂问题简单化

    以上例子中先分别查出"01"课程的成绩与"02"课程,再根据查询出的结果去查询对应学生信息及课程成绩,即用到本节将要介绍的子查询。...对于能嵌套的子查询的数目没有限制,不过在实际使用时由于性能的限制,不能嵌套太多的子查询。...---- 逐渐增加子查询来建立查询 用子查询测试和调试查询很有技巧性,特别是在这些语句的复杂性不断增加的情况下更是如此。...用子查询建立(和测试)查询的最可靠的方法是逐渐进行,这与MySQL处理它们的方法非常相同。首先,建立和测试最内层的查询。然后,用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。...对于要增加的每个查询,重复这些步骤。这样做仅给构造查询增加了一点点时间,但节省了以后(找出查询为什么不正常)的大量时间,并且极大地提高了查询一开始就正常工作的可能性。

    57220

    Oracle之简单查询

    在数据库之中如果要进行查询使用的就是SQL-DML语法操作,定义查询的复杂度,本次先使用单张数据表( emp)进行查询,单张表如下(固定的语法组成采用大写字母,可更换部分采用小写字母): ② select...可以在 select 子句上追加有一个“distinct”标记:消除重复的数据 ? 但是对于distinct操作需要注意一个问题:它进行重复数据消除的时候指的是所有的数据列重复的时候才允许消除。...在之前所进行查询都是查询了数据表中的存在的数据列,实际上也可以直接进行常量的查询。...在简单查询里面,如果有很多的常量,则可以将常量与列的内容进行组合,使用“||”进行字符串连接处理 6 ....总结: 简单查询指的就是数据通过一张数据表获得,简单查询里面只有两个基本子句:select 、from; from子句优先于 select子句执行,以确定数据的来源,select子句控制的只是显示的数据列

    86710

    Entity Framework 简单查询

    前言 首先来简单的复习一下如何使用Code First。 第一步还是先建立一个控制台的应用程序,然后通过Nuget添加Entity Framework。...另外对于数据库连接的管理在EF中是透明的,我们一般不需要手动进行处理,当查询一个对象时打开连接当处理完查询的结果集之后会自动关闭连接。...Linq To Entity表达式查询  查询表达式是C#3.0新增的功能,它是由一组类似于T-SQL或XQuery声明性语句组成,CLR并不能直接读取这种查询表达式而是在编译时转换为对应的方法调用。...基于方法的查询 基于方法的查询事实上是一组对象的扩展方法,同Linq查询不同的是这些方法可以直接被CLR识别并运行。...,当然这里只是做了最简单的实例。

    93920

    【查询】查询好像也可以很简单!

    查询的分类,借鉴运算符里的一个术语,我把查询分成了四类:单目查询、双目查询、多目查询、特殊查询。...一、单目查询: 1、col = 1;  //数字类型的相等的查询 2、col = 'abc';  //字符串类型的相等的查询 3、col like '%abc%'; //字符串的模糊查询 4、col...单目查询能想到的就是这些了,如果还有其他的,欢迎补充,谢谢。 三、多目查询: 1、col in (1,2,3);    //多条件数字类型的or查询。比如,同时显示研发部和业务部的员工。...前三种情况交给查询控件自己处理,第四种情况就要“委托”给别人了,这样即可以保证使用简单,又可以保证灵活性。那么代码怎么实现呢?就是说上面的这些情况怎么抽象出来呢?...很简单,利用Dictionary来做。      我们定义一个Dictionary来存放“查询方式”。

    78270

    Hive 简单查询FetchTask

    简介 某些 SELECT 查询可以转换为一个 FETCH 任务,从而最大限度地可以减少交互的延迟。...在目前情况下,查询只能是单一数据源,不能有任何的子查询,不能有任何的聚合,去重(导致RS - ReduceSinkOperator,会产生 MapReduce 任务),Lateral views 以及...Fetch 任务是 Hive 中执行效率比较高的任务之一。直接遍历文件并输出结果,而不是启动 MapReduce 作业进行查询。...对于简单的查询,如带有 LIMIT 语句的 SELECT * 查询,这会非常快(单位数秒级)。在这种情况下,Hive 可以通过执行 HDFS 操作来返回结果。...hive.fetch.task.conversion none|minimal|more Hive 已经做过优化了,从Hive 0.10.0 版本开始,对于简单的不需要聚合去重的查询语句

    1.6K50

    原 pg查询树的简单解读

    log) 表:create  table  aa(a int,b int); 数据:insert into aa values (0,1),(1,0),(1,1); 执行查询语句...nParamExec 0    } STATEMENT:  select * from aa where ((4-3)/a>1 and a>0); 经过查看,对一个查询做的操作如下...(在此以上述的sql语句为例分析,只是针对where后的语句),这是解析时生成的树的结构(重写为对其进行更改): (4 - 3) / a > 1...,其中首先是进行了操作符优先级的解析,gram里解析的): 首先,这里的都是二叉树结构的,以深度优先进行遍历的,其中根节点是and(location:34),两个子节点分别是(a>0) 和...当执行时,首先进行的是39节点的操作(a>0),而后进行的是26节点的操作(4-3),再进行29节点的操作(26,30节点的"/"操作),再进行31节点的操作, 然后在对39,40两个节点进行

    1.3K130

    实验3.1 简单的单表查询

    一、实验目的 熟练掌握用SELECT语句实现简单的单表查询。掌握SELECT子句、FROM子句、WHERE子句及ORDER BY 子句的用法。 二、实验原理 用SELECT语句实现简单的单表查询。...在SELECT子句中用TOP关键字来限制返回到结果集中的记录数目,用DISTINCT关键字从结果集中去掉重复的记录。...WHERE子句中用关系比较符、[NOT] BETWEEN、[NOT]  IN、LIKE、 IS [NOT]NULL及逻辑运算符构成查询条件,对结果集中的记录进行筛选。...ORDER BY子句将根据查询结果集中一个或多个字段对查询结果进行排序。 三、实验设备 安装有SQL SERVER 2000的计算机。...like '刘%' 2.查找所有定单金额高于20000的所有客户编号 select cust_id from sales where tot_amt>20000;  3.查找业务部或会计部的女员工的基本信息

    1.6K20

    一道简单又不简单的sql查询语句

    抛砖引玉 无意间在简书上浏览的时候看到一篇写数据库查询的练习题,其实也好无奈,大数据啊大数据,自从看了几天有关编程和程序员方面的文章,首页推荐的内容都是关于这样的技术贴,太那啥了,想看点小故事小情感类的文章都要自己搜...今天没有小故事,可能会比较枯燥(毕竟数据库嘛) 题目是:查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 先看两个表,然后我梳理了一下知识要点,最后大家就可以解题啦(当然并不一定要用这个解法...,有兴趣可以在下方留言你的查询sql语句) 数据库表 学生表 Student(SId,Sname,Sage,Ssex) --SId 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别...知识点 CONCAT(str1,str2) 这里用到了mysql的concat函数,concat(str1,str2),连接参数产生的字符串。...[Order BY ASC/DESC 排序字段] [Separator '分隔符']) 例如查询学生表: mysql> select group_concat(Sname) from Student

    67640

    mysql日期时间简单查询

    大家好,又见面了,我是你们的朋友全栈君。...(@dt) --一年的第几周 7 根据format字符串格式化date值: %S, %s 两位数字形式的秒( 00,01, …, 59) %I, %i 两位数字形式的分( 00,01, …, 59) %...H 两位数字形式的小时,24 小时(00,01, …, 23) %h 两位数字形式的小时,12 小时(01,02, …, 12) %k 数字形式的小时,24 小时(0,1, …, 23) %l 数字形式的小时...,12 小时(1, 2, …, 12) %T 24 小时的时间形式(hh:mm:ss) %r 12 小时的时间形式(hh:mm:ss AM 或hh:mm:ss PM) %p AM或PM %W 一周中每一天的名称...j 以三位数字表示年中的天数( 001, 002, …, 366) %U 周(0, 1, 52),其中Sunday 为周中的第一天 %u 周(0, 1, 52),其中Monday 为周中的第一天 %M

    5.6K20

    MSSQL之四 简单查询

    建议用户在大型应用程序中不要使用SMALLDATETIME数据类型,避免出现类似千年虫的问题。因为2079年12月31日不是一个特别遥远的日期。...常用的SELECT语句的语法为: SELECT 选择列表(查询所显示的内容) FROM 表的列表(查询内容所在的表) WHERE 查询的条件(查询内容的条件) 选择列表可以包括几个列名或者表达式,用逗号隔开...而是用IN关键字进行查询比使用两个OR运算符进行查询更为简单,并且易于阅读和理解,使用IN关键字的SQL语句如下: select bookname from book where readerin('9702...','9708','9702')并且运行结果和上面的一样 Ø 使用LIKE关键字进行查询 读者经常会碰到这样的问题:查询以某个字开头的书名,或者查询以某个字结尾的东东,查询与给定的某些字符串相匹配的数据可以使用...实践问题 1、下面哪个操作符被用于显示一系列包含在列中一个范围内的值得记录?

    63310

    MySQL 解决查询NULL的问题

    题意分析 题目很简单:有一个 Employee 表,表里有两个字段:id(职工号)、salary(工资)。...要求查询第二大的工资数,展示项名为:SecondHighestSalary 难点: 当第二大的工资不存在的时候,查询结果为 NULL 解题思路 首先我们先忽略工资不存在的情况,只解决“第二大”这个问题。...SecondHighestSalary FROM employee ORDER BY salary DESC LIMIT 1 OFFSET 1; 接着,我们来解决当“第二大”不存在时,需要返回 NULL 的问题...可以发现第一和第二种思路,当数据不存在时,是有 bug 的,因为取最小值和取第一个值,都会取到一个值,除非整个 table 数据都是空的。这两种思路暂时排除(后面也会给出这两种思路下的解决方法)。...为什么会想到 LEFT JOIN 呢,很明显,不存在的结果却需要显示为 NULL,这很符合 LEFT JOIN 或 RIGHT JOIN 的特质。

    2.5K10

    对于问题的简单定义

    因为这个世界不确定的因素太多,而问题的解可能有很多的问题,比如说过多的步骤。将问题形式化是决策对于给定的目标需要考虑哪些行动和状态的过程。...那么,我们如何去定义一个问题以及他的解? 一个问题其实可以形式化的定义为四个部分: 1:在起始的时候的初始状态。比如我们现在在北京,要导航去上海。我们现在在北京的这个状态,就可以是初始状态。...2:对于机器可采纳行动的可能行动的描述:最常见的一个形式就是定义一个后继函数。后继函数可以简单的理解为就是你这个行动可以达到的一个状态。比如说你去上海,起始函数是北京,那么后继函数就可以是上海。...3:目标测试:用来确定给定的状态是不是目标状态,有的时候可能得目标状态集合是非常明显的,测试只需要简单的检查给定的状态是否是目标状态的集中之一即可。...上述定义了一个问题,可以把他们集合在一起成为一个单一的数据结构。作为问题的求解算法的输入。问题的解就是从初始状态到目标状态的路径。最优解就是由路径的损耗函数进行度量。

    94750
    领券