首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

「干货」Hive常用10大应用技巧『Hive系列2』

针对类似问题,只要清楚了Hive SQL的运行顺序,便会迎刃而解,顺序如下: (步骤7) SELECT count(*) as col1 (步骤8) DISTINCT (步骤1) FROM (步骤3)...07 distinct与group by的区别「计数场景」 在去重计数场景中,我们经常应用count(distinct)来进行处理;有时也会先在内层通过group by聚合,然后再在外层计数count(...原理:distinct需要将col列中的全部内容都存储在一个内存中,可以理解为一个hash结构,key为col的值,最后计算hash结构中有多少个key即可得到结果。...需要将所有不同值存储在一起,内存消耗较大。 优点:时间复杂度低,适用于中小数据量级。...08 order by与distribute by sort by的区别「排序场景」 在排序场景中,这两个函数使我们经常遇到的,这两者的区别在于: 「order by」 适用于全局排序,数据放在一个reduce

1.7K10

Citus 分布式 PostgreSQL 集群 - SQL Reference(查询分布式表 SQL)

SELECT http://www.postgresql.org/docs/current/static/sql-select.html 在以下部分中,我们将讨论您可以使用 Citus 运行的不同类型的查询...如果不是,Citus 对每个 worker 运行 select distinct 语句, 并将列表返回给 coordinator,从中获取最终计数。...配置值启用计数不同的近似值。...在这一步之后,count(distinct) 聚合会自动切换到使用 HLL,而无需对您的查询进行任何更改。您应该能够在表的任何列上运行近似 count distinct 查询。...这可以控制空间使用。阈值可以由 topn.number_of_counters GUC 控制。它的默认值为 1000。 现实例子 现在来看一个更现实的例子,说明 TopN 在实践中是如何工作的。

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

    数据分析工具篇——HQL原理及优化

    自动进行负载均衡; 策略就是把MR任务拆分成两个MR Job:第一个先做预汇总,第二个再做最终汇总; 第一个Job: Map输出结果集中缓存到maptask中,每个Reduce做部分聚合操作,并输出结果...或者where中需要用到的)列;同时在value中还会包含表的Tag信息,用于标明此value对应哪个表; 按照key进行排序; 2)Shuffle阶段: 根据key的值进行hash,并将key/value...按照hash值推送至不同的reduce中,这样确保两个表中相同的key位于同一个reduce中。...3)Reduce阶段: 根据key的值完成join操作,期间通过Tag来识别不同表中的数据。...,第一个任务借用多个reduce实现distinct去重并进行初步count计算,然后再将计算结果输出到第二个任务中进行计数。

    1.4K20

    「PostgreSQL技巧」Citus实时执行程序如何并行化查询

    我们如何知道某物是分布式的还是单片? 在了解实时执行器的工作方式之前,值得对Citus执行器进行全面的复习。 当Citus收到查询时,我们首先查看它是否具有where子句的分片键(也称为分发列)。...该任务在所有节点上通常是相同的,但是由于它是纯粹的Postgres计划,可以根据数据分布和估算值进行更改。如果要查看所有查询计划,则可以扩展输出以获取所有4个分片的任务。...然后将所得的计数返回给协调器以执行最终聚合: ? 性能远远超过count(*) 虽然count(*)很容易看出它是如何工作的,但是您可以执行更多操作。...最好的部分仍然可以编写AVG,Citus负责底层的复杂性。 除了汇总之外,Citus还可以告诉您何时加入并在本地执行这些加入。让我们向事件表中添加另一个表:会话。...有了这两个表,我们现在想要一个查询,该查询将告诉我们会话的平均事件数,以及上周创建的会话: SELECT count(events.*), count(distinct session_id

    87210

    数据库查询常用语句语法

    如果省略,则MID()函数返回剩余文本 round(f,p)p为1表示f有一位小数,-1表示小数点左边置0 case 可以对数据表进行多重筛选多重选择 CASE允许您在不同的条件下返回不同的值。...跳脱字符:单引号 不能把一个单引号放在字符串中,在数据库的字符串定义都是用单引号,因此内容有单引号需要输出,将两个单引号使用,输出即为一个单引号 即输出x’x 则为字符串’ x’’x’ 群组函数 使用...如果表格元素多,但只作用一个元素,可以外加一个count (distinct 元素),或者后面加一个group by 元素 max() 取最大值或者是最后最新的值 min() 取最小值或者是首次颁发的值...union显示两个表特定数据 将union放在两个select中间,只是将两个结果联结起来一起显示,并不是联结两个表UNION ALL 这个指令的目的也是要将两个 SQL 语句的结果合并在一起。...if x and y and z are all NULL 子查询 select的查询可以当作是一个值,在另一个表中查询 相等判断 SELECT name, continent FROM world

    1K30

    你好奇过 MySQL 内部临时表存了什么吗?

    使用 union 或 union distinct 关键字的 SQL 语句。 派生表(explain 输出结果的 select_type 列的值为 DERIVED)。...把 t_internal_tmp_table 和 t_recbuf 两个表连接查询得到的记录全部写入临时表之后,再对临时表中的记录进行分组(group by)、聚合(count)操作。...第 2 步,如果 e1 字段值对应的记录在临时表中已经存在,执行 count(i1) 函数得到当前分组新计数,然后把分组新计数更新到临时表。...第 3 步,如果 e1 字段值对应的记录在临时表中还不存在,执行 count(i1) 函数初始化分组计数,然后把 e1 字段值和分组计数插入到临时表中。...写入哪些字段到临时表?)的示例 SQL 3,和示例 SQL 1 不一样的地方是 count() 函数多了个 distinct,表示统计每个分组中,不同的 i1 字段值的数量(不包含 NULL)。

    1.6K31

    【MySql】聚合函数&&group by&&OJ题目

    聚合函数 MySQL中的聚合函数用于对数据进行计算和统计,常见的聚合函数包括下面列举出来的聚合函数: 函数 说明 COUNT([DISTINCT] expr) 返回查询到的数据的数量...] expr) 返回查询到的数据的最大值,不是数字没有意义 MIN([DISTINCT] expr) 返回查询到的数据的最小值,不是数字没有意义 对于上面所列举出来的聚合函数,下面我们通过一些案例来进行对聚合函数的运用...distinct select distinct count(distinct math) from exam_result; 统计数学成绩总分 select sum(math) from exam_result...EMP员工表 DEPT部门表 SALGRADE工资等级表 如何显示每个部门的平均工资和最高工资 显示每个部门的平均工资和最高工资 select deptno,max(sal) 最高,avg...2000的部门和它的平均工资 统计各个部门的平均工资 select avg(sal) from EMP group by deptno having和group by配合使用,对group by结果进行过滤

    21110

    MADlib——基于SQL的数据挖掘解决方案(8)——数据探索之描述性统计

    下面两个x和y的值集分别给出相关度为-1和+1的情况。为简单起见,第一组中取x和y的均值为0。...从数据库表的角度看,这些统计量简单而直观,对目标属性列使用基本的count(*)、count(distinct)函数,以及类似 is null 这样的过滤条件执行数据库查询即可得到诸如此类的统计量。...通常,属性x的观测值的方差记作 ? ,定义如下: ? 标准差是方差的平方根,记作 ? ,它与x具有相同的单位。 方差对离群值特别敏感,因为它使用均值与其它值的差的平方。...函数为每个分组列独立计算汇总统计信息,也就是说分组列不合并在一起(类似SQL中的grouping合计),这点与常规的PostgreSQL风格的GROUP BY命令不同。...row_count BIGINT 目标列的行数。 distinct_values BIGINT 目标列不同值的个数。

    1.5K20

    MySQL 怎么用索引实现 group by?

    如果当前记录的分组前缀和上一条记录的分组前缀一样,说明还是同一个分组,只需要进行分组求和、分组计数,不需要计算平均值。...count()、sum() 和 avg() 的执行过程基本一样,不同之处在于: count() 对应的类 Item_sum_count 只有 count 属性,只需要进行分组计数,不需要分组求和、计算平均值...松散索引扫描自带去重功能,不需要借助临时表,和包含 distinct 关键字的聚合函数天生更匹配。紧凑索引扫描则需要借助临时表对记录进行去重。...如果聚合函数是 count(distinct)、sum(distinct)、avg(distinct) 中的 1 ~ 3 个,虽然紧凑索引扫描读取记录成本更低,但必须使用临时表对记录去重,这样一来,紧凑索引扫描读取数据...在执行阶段,通过把 avg() 字段值累加到 sum 属性进行分组求和;对 count 属性进行自增实现分组计数;通过 sum / count 计算得到分组平均值。

    6.7K60

    MySQL 怎么用索引实现 group by?

    如果当前记录的分组前缀和上一条记录的分组前缀一样,说明还是同一个分组,只需要进行分组求和、分组计数,不需要计算平均值。...count()、sum() 和 avg() 的执行过程基本一样,不同之处在于: count() 对应的类 Item_sum_count 只有 count 属性,只需要进行分组计数,不需要分组求和、计算平均值...松散索引扫描自带去重功能,不需要借助临时表,和包含 distinct 关键字的聚合函数天生更匹配。紧凑索引扫描则需要借助临时表对记录进行去重。...如果聚合函数是 count(distinct)、sum(distinct)、avg(distinct) 中的 1 ~ 3 个,虽然紧凑索引扫描读取记录成本更低,但必须使用临时表对记录去重,这样一来,紧凑索引扫描读取数据...在执行阶段,通过把 avg() 字段值累加到 sum 属性进行分组求和;对 count 属性进行自增实现分组计数;通过 sum / count 计算得到分组平均值。

    4.9K20

    分布式 PostgreSQL 集群(Citus)官方示例 - 实时仪表盘

    目录 数据模型 汇总 过期的旧数据 近似不同计数 使用 JSONB 的非结构化数据 更多 Citus 提供对大型数据集的实时查询。...在实践中,您可能希望将原始事件保留较短的时间(一个月)并查看较长时间(年)的历史图表。 汇总 您可以通过将原始数据汇总为预聚合形式来克服这两个缺点。...接下来的部分将扩展基本架构,并向您展示如何解决经常出现的问题。 近似不同计数 HTTP 分析中的一个常见问题涉及近似的不同计数:上个月有多少独立访问者访问了您的网站?...假设我们进行了汇总,但我们没有使用 HLL,而是保存了确切的唯一计数。这很好用,但您无法回答诸如在过去的一周内,我们丢弃了原始数据有多少不同的会话?之类的问题。 使用 HLL,这很容易。...您可以使用以下查询计算一段时间内的不同 IP 计数: SELECT hll_cardinality(hll_union_agg(distinct_ip_addresses)) FROM http_request

    1.7K30

    Spark SQLHive调优

    Hive的执行是分阶段的,map处理数据量的差异取决于上一个stage的reduce输出,所以如何将数据均匀的分配到各个reduce中,就是解决数据倾斜的根本所在。...第一个 MR Job 中,Map 的输出结果集合会随机分布到 Reduce 中,每个 Reduce 做部分聚合操作,并输出结果,这样处理的结果 是相同的 Group By Key 有可能被分发到不同的...count distinct大量相同特殊值 count distinct时,将值为空的情况单独处理,如果是计算count distinct,可以不用处理,直接过滤,在最后结果中加1。...当按照user_id进行两个表的Join操作时,默认的Hash操作会按int型的id来进行分配,这样会导致所有string类型id的记录都分配到一个Reducer中。...解决方法: select /*+mapjoin(x)*/* from log a left outer join ( select /*+mapjoin(c)*/d.* from ( select distinct

    2.8K30

    一场pandas与SQL的巅峰大战(二)

    hive方面我们新建了一张表,并把同样的数据加载进了表中,后续直接使用即可。 ? ? 开始学习 一、字符串的截取 对于原始数据集中的一列,我们常常要截取其字串作为新的列来使用。...而在hive SQL中,既有简易的Like关键字匹配特定的字符,也可以使用regexp_extract,regexp_replace这两个函数更灵活地实现目标。接下来我们举例说明。...: select count(distinct case when ts like '%2019-08-01%' then orderid end) as 0801_cnt, count(distinct...对于我们不关心的行,这两列的值都为nan。第三步再进行去重计数操作。...四、窗口函数 row_number hive中的row_number函数通常用来分组计数,每组内的序号从1开始增加,且没有重复值。比如我们对每个uid的订单按照订单时间倒序排列,获取其排序的序号。

    2.3K20

    MySQL(五)汇总和分组数据

    ()函数{avg()函数忽略列值为NULL的行}; 2、count()函数 count()函数进行计数,可利用count()确定表中行的数目或符合特定条件的行的数目; count()函数有两种使用方式:...①使用count(*)对表中行的数目进行计数,不管表列中包含的是空值(null)还是非空值; ②使用count(column)对特定列中具有值的行进行计数,忽略null值; select count(...*) as num_cust from customers; 这条SQL语句利用count(*)对customers表中所有行计数,计数值在num_cust中返回; select count(cust_email...) as cum_cust from customers; 这条SQL语句使用count(cust_email)对cust_email列中有值的行进行计数; PS:如果指定列名,则指定列的值为空的行被count...all); ②只包含不同的值,指定distinct参数; ③如果指定列名,则distinct只能用于count();distinct不能用于count(*),因此不允许使用count(distinct)

    4.7K20

    hive优化大全-一篇就够了

    所以对于同一个 key 来说,对应的 value 值小的放前,大的放后,这便是“小表放前”原则。 若一条语句中有多个 Join,依据 Join 的条件相同与否,有不同的处理方法。...(默认值为假) 合并文件的大小:hive.merge.size.per.task=25610001000(默认值为 256000000) 5.程序角度优化 5.1熟练使用SQL提高查询   熟练地使用...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 中的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式中也可以达到效果。...原因是 Hive 中,主键为 null 值的项会被当做相同的 Key 而分配进同一个计算 Map。...对sum,count来说,不存在数据倾斜问题。 对count(distinct),效率较低,数据量一多,准出问题,如果是多count(distinct )效率更低。

    1.9K20

    Hive性能优化(全面)

    所以对于同一个 key 来说,对应的 value 值小的放前,大的放后,这便是“小表放前”原则。 若一条语句中有多个 Join,依据 Join 的条件相同与否,有不同的处理方法。...(默认值为假) 合并文件的大小:hive.merge.size.per.task=256*1000*1000(默认值为 256000000) 4.程序角度优化 4.1熟练使用SQL提高查询 熟练地使用...节省了两个临时表的读写是一个关键原因,这种方式也适用于 Oracle 中的数据查找工作。 SQL 具有普适性,很多 SQL 通用的优化方案在 Hadoop 分布式计算方式中也可以达到效果。...原因是 Hive 中,主键为 null 值的项会被当做相同的 Key 而分配进同一个计算 Map。...对sum,count来说,不存在数据倾斜问题。 对count(distinct ),效率较低,数据量一多,准出问题,如果是多count(distinct )效率更低。

    4.3K40

    探究Presto SQL引擎(4)-统计计数

    2.1.1 位图向量的构建举个例子,假设表user记录如下:图片这是很典型的一张数据库表。对于表中的字段,如何构建位图索引呢?...两个向量进行交集运算:图片最后统计结果为1。 关于Bitmap的思想,笔者认为最巧妙的一点就是通过位运算实现了集合运算。如下图所示:图片在不同的业务场景中,这里的集合可以赋予不同的业务含义。...这里涉及到较为底层的概率论知识,就先略过。略过数学知识,关键的问题在于,我们如何将待基数统计问题跟上面的伯努利实验建立联系?这两个点之间的桥梁就是Hash函数。...对于一个待进行基数统计的集合(例如一个表中符合条件的字段值),为了降低估计的错误率,我们分成m组。...三、分布式计数核心流程对于Hadoop中的入门案例wordcount,可以发现如果用Presto SQL表达如下(以tpch数据集customer表name字段为例):select w, count(1

    1.2K20

    Hive常用性能优化方法实践全面总结

    同理,对于Hive分区表的查询,我们在写SQL时,通过指定实际需要的分区,可以减少不必要的分区数据扫描【当Hive表中列很多或者数据量很大时,如果直接使用select * 或者不指定分区,效率会很低下(...因此,建议分析数据、Hive SQL语句等,了解产生数据倾斜的根本原因进行解决。 >> count(distinct) count(distinct)采用非常少的reducer进行数据处理。...数据量小时对执行效率影响不明显,但是当数据量大时,效率会很低,尤其是数据倾斜的时候。 可以通过group by代替count(distinct)使用。...如果有split大小小于这两个值,则会进行合并。...例如将这个参数设成5,那么就代表同一个MR job中顺序执行的5个task可以重复使用一个JVM,减少启动和关闭的开销。但它对不同MR job中的task无效。

    2.7K30
    领券