COMPUTE STATS 语句收集卷信息, 表列和分区的数据分布情况;
收集的信息存储在元数据库中,用于优化Impala查询;

例如,如果Impala能确定一张表是大还是小,表里有多少唯一值,就可以为join查询或插入操作组织和并行化工作线程;

实例

CDH 5.10 / Impala 2.8之后,可以对分区表使用COMPUTE INCREMENTAL STATS,以替代对全表或一次一个分区的操作;可以使用比较符匹配多个分区;

例如,表INT_PARTITIONS包含4个分区;

> show partitions int_partitions;
+-------+-------+--------+------+--------------+-------------------+---------+...
| x     | #Rows | #Files | Size | Bytes Cached | Cache Replication | Format  |...
+-------+-------+--------+------+--------------+-------------------+---------+...
| 99    | -1    | 0      | 0B   | NOT CACHED   | NOT CACHED        | PARQUET |...
| 120   | -1    | 0      | 0B   | NOT CACHED   | NOT CACHED        | TEXT    |...
| 150   | -1    | 0      | 0B   | NOT CACHED   | NOT CACHED        | TEXT    |...
| 200   | -1    | 0      | 0B   | NOT CACHED   | NOT CACHED        | TEXT    |...
| Total | -1    | 0      | 0B   | 0B           |                   |         |...
+-------+-------+--------+------+--------------+-------------------+---------+...

只统计一些分区,通过比较符

> compute incremental stats int_partitions partition (x < 100);
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 1 partition(s) and 1 column(s). |
+-----------------------------------------+

通过in语句

> compute incremental stats int_partitions partition (x in (100, 150, 200));
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 2 partition(s) and 1 column(s). |
+-----------------------------------------+

通过between…and…

> compute incremental stats int_partitions partition (x between 100 and 175);
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 2 partition(s) and 1 column(s). |
+-----------------------------------------+

联合使用

> compute incremental stats int_partitions partition (x in (100, 150, 200) or x < 100);
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 3 partition(s) and 1 column(s). |
+-----------------------------------------+

使用非操作符

> compute incremental stats int_partitions partition (x != 150);
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 3 partition(s) and 1 column(s). |
+-----------------------------------------+

对于大表,COMPUTE STATS可能要花费很多时间,需要优化;
COMPUTE STATS不能和EXPLAIN或impala-shell的SUMMARY命令一起使用;
可以使用impala-shell的PROFILE语句检测运行时间;

实例有两张表,T1和T2;
T1是小表,T2有100K行; 要做T1.ID和T2.PARENT的join操作;

最开始,统计信息只包含一些物理度量信息,如文件数,总大小和固定长度字段(如int类型)的大小;-1表示未知的值;

T1的初始统计信息

//# 表统计信息
> show table stats t1;
+-------+--------+------+--------+
| #Rows | #Files | Size | Format |
+-------+--------+------+--------+
| -1    | 1      | 33B  | TEXT   |
+-------+--------+------+--------+//# 字段统计信息
> show column stats t1;
+--------+--------+------------------+--------+----------+----------+
| Column | Type   | #Distinct Values | #Nulls | Max Size | Avg Size |
+--------+--------+------------------+--------+----------+----------+
| id     | INT    | -1               | -1     | 4        | 4        |
| s      | STRING | -1               | -1     | -1       | -1       |
+--------+--------+------------------+--------+----------+----------+

T2的统计信息

//# 表统计信息
> show table stats t2;
+-------+--------+----------+--------+
| #Rows | #Files | Size     | Format |
+-------+--------+----------+--------+
| -1    | 28     | 960.00KB | TEXT   |
+-------+--------+----------+--------+//# 字段统计信息
> show column stats t2;
+--------+--------+------------------+--------+----------+----------+
| Column | Type   | #Distinct Values | #Nulls | Max Size | Avg Size |
+--------+--------+------------------+--------+----------+----------+
| parent | INT    | -1               | -1     | 4        | 4        |
| s      | STRING | -1               | -1     | -1       | -1       |
+--------+--------+------------------+--------+----------+----------+

收集更多的统计信息

> compute stats t1;
+-----------------------------------------+
| summary                                 |
+-----------------------------------------+
| Updated 1 partition(s) and 2 column(s). |
+-----------------------------------------+> show table stats t1;
+-------+--------+------+--------+
| #Rows | #Files | Size | Format |
+-------+--------+------+--------+
| 3     | 1      | 33B  | TEXT   |
+-------+--------+------+--------+> show column stats t1;
+--------+--------+------------------+--------+----------+----------+
| Column | Type   | #Distinct Values | #Nulls | Max Size | Avg Size |
+--------+--------+------------------+--------+----------+----------+
| id     | INT    | 3                | -1     | 4        | 4        |
| s      | STRING | 3                | -1     | -1       | -1       |
+--------+--------+------------------+--------+----------+----------+

语法说明

语法1

COMPUTE STATS [db_name.]table_name  [ ( column_list ) ] [TABLESAMPLE SYSTEM(percentage) [REPEATABLE(seed)]]column_list ::= column_name [ , column_name, ... ]

语法2

COMPUTE INCREMENTAL STATS [db_name.]table_name [PARTITION (partition_spec)]partition_spec ::= partition_col=constant_valuepartition_spec ::= simple_partition_spec | complex_partition_specsimple_partition_spec ::= partition_col=constant_valuecomplex_partition_spec ::= comparison_expression_on_partition_col

PARTITION子句只能与INCREMENTAL子句连用;

PARTITION子句在COMPUTE INCREMENTAL STATS里是可选的,而在DROP INCREMENTAL STATS里是必须的;

当在COMPUTE INCREMENTAL STATSDROP INCREMENTAL STATS通过PARTITION (partition_spec)子句定义分区时,必须包含所有分区列,并对所有分区键列定义常量值;

注意
最开始,Impala依赖用户运行Hive的ANALYZE TABLE语句收集信息,但这种方法不可靠并且难以使用;
Impala的COMPUTE STATS语句用来改善这些问题;

非增量统计COMPUTE STATS语句,可以指定逗号分隔的字段列表;没有指定字段表列,会统计表里的所有列;
如果字段没有参于查询,则会增加无必要的开销,尤其是对宽表和未使用的大文本;

如果给定的是空字段列表,则COMPUTE STATS不会统计分析任何字段;

如果给定的字段无法分析,COMPUTE STATS会返回错误,如字段不存在;
COMPUTE STATS不支持的字段类型,如复杂类型或字段是分区中的字段;

在CDH5.15/Impala2.12之后,可选的TABLESAMPLE子句,可以使COMPUTE STATS操作只处理指定百分比的数据;
如果表太大,完整的COMPUTE STATS操作不实际,可以使用TABLESAMPLE子句从数据表样本外推统计;

COMPUTE INCREMENTAL STATS适用于已分区的表,会作用于表分区数据而不是全表;
可用于有许多分区的大表,当添加或删除分区时,完整的COMPUTE STATS会花费很多的时间;

COMPUTE INCREMENTAL STATS应用于未分区的表,会自动转为COMPUTE STATS;
当使用SHOW TABLE STATS查看时,Incremental stats列会显示false;

重要
对一张表,不能同时使用COMPUTE STATSCOMPUTE INCREMENTAL STATS;
如果要更换语句,要先使用DROP STATS删除统计信息;

当对一张表第一次运行COMPUTE INCREMENTAL STATS时,会忽略已存在统计信息而重新计算,预期会有一次资源紧张的操作,即全表扫描;

对有大量分区和字段的表,对每个分区及每个字段,会在内存加载大约400字节的元信息,会缓存在catalogd主机和每个impalad主机;如查所有表的元信息超过2G,可有会引起服务停机;

注意
许多高性能和高资源的操作依赖于表和字段统计,用以构建精确和有效的查询计划,COMPUTE STATS是ETL处理结束时很重要的一步;

当对慢查询进行优化或有OOM时,在所有表上运行COMPUTE STATS

  • 精确的统计帮助Impala构建高效的join查询计划,提升性能,降低内存消耗;
  • 精确的统计帮助Impala对insert Parquet表操作高效地分布工作线程,提升性能,降低内存消耗;
  • 估计每个查询的内存使用量,这个信息对资源管理组件很重要;这个信息帮助Impala达到高并行,高效使用内存,避免和其他Hadoop组件的竞争;
  • CDH 5.10 / Impala 2.8之后,对Parquet表使用COMPUTE STATSCOMPUTE INCREMENTAL STATS,Impala会自动添加查询选项MT_DOP=4,增加节点内的并行性以优化CPU消耗;

当前,COMPUTE STATS的信息不包含复杂类型字段的信息,复杂字段的统计计量总显示-1;
查询复杂字段时,Impala使用启动法估计数据分布;

COMPUTE STATS也能应用于HBase表;收集的信息和HDFS表不同,但收集的元信息也应用于HBase表参于查询的优化;
COMPUTE STATS也能应用于S3(Amazon Simple Storage Service);

Impala SQL语句 COMPUTE STATS相关推荐

  1. Impala的命令COMPUTE STATS

    COMPUTE STATS主要作用: 收集有关表中数据的容量和分布以及所有相关列和分区的信息.这些信息存储在metastore数据库中,Impala使用这些信息来帮助优化查询.例如,如果Impala可 ...

  2. Impala命令COMPUTE STATS的解析

    Impala命令COMPUTE STATS的解析 COMPUTE STATS主要作用: 收集有关表中数据的容量和分布以及所有相关列和分区的信息.这些信息存储在metastore数据库中,Impala使 ...

  3. OLAP(三):Impala介绍 、 (和hive/spark对比)、COMPUTE STATS

    一.Impala概述 Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎.与其他Hadoop的SQL引擎相比,它提供了高性能和低延迟.换句话说,Impal ...

  4. impala查询语句_Impala SQL

    不多说,直接上干货! 其实,跟hive差不多,大家可以去参考我写的hive学习概念系列. Impala SQL VS HiveQL 下面是Impala对基础数据类型和扩展数据类型的支持 • 此外,Im ...

  5. 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作

    https://www.zybuluo.com/aitanjupt/note/209941 使用Hive或Impala执行SQL语句,对存储在HBase中的数据操作 〇.摘要 一.基础环境 二.数据存 ...

  6. Impala Shell 和 Impala SQL

    1.Impala 外部 Shell Impala外部Shell 就是不进入Impala内部,直接执行的ImpalaShell 例如通过外部Shell查看Impala帮助可以使用: $ impala-s ...

  7. sql server 数据分析优化实战(一)——SQL语句优化

    前言 在我们进行数据分析的时候,首要的目标是根据业务逻辑,通过编写SQL代码得到我们想要的结果,这是毋庸置疑的.一般情况下,由于我们分析的数据量比较少,体会不出SQL语句各种写法的性能优劣,对SQL代 ...

  8. oracle笔记一(sql语句方面)

    oracle笔记一(sql语句方面) 一.sql语句 --================================================ 1.增加主键    alter table ...

  9. SQL语句性能调整(从入门到精通)

    SQL语句性能调整(从入门到精通)下载 /Files/tc310/SQL_XingNengTiaoZheng.doc 原文:http://www.database8.com/ORA_oracle_th ...

  10. 初学者SQL语句介绍

    初学者SQL语句介绍 1.用 Select 子句检索记录     Select 子句是每一个检索数据的查询核心.它告诉数据库引擎返回什么字段.     Select 子句的常见形式是:     Sel ...

最新文章

  1. 趁老婆不在家,我把儿子带成了程序大神...
  2. cve-2017-12617 tomcat远程代码执行漏洞复现测试
  3. 三问JavaBean
  4. 数据结构值排序算法(三)-快速排序
  5. IoT与区块链的机遇与挑战
  6. 企业微信H5_身份验证,PC网站企业微信扫码授权登录
  7. nginx一个端口配置多域名服务
  8. PLC控制步进电机在机床自动线中的应用
  9. 感受野,以及为什么神经网络可以分清猫是猫,狗是狗的直观理解
  10. 网络安全实验---PGP 实现邮件加密和签名
  11. Android版抢票神器使用指南及下载地址
  12. 简单Android app开发_个人如何开发手机app?做个app需要的技术?最简单app制作流程...
  13. vue引入阿里巴巴矢量图标
  14. qt -- QTableView
  15. 【POJ】1384 Piggy-Bank
  16. Nodejs http request 报错 “ETIMEDOUT“,“ECONNRESET“ , “ENOTFOUND“,“ECONNREFUSED”,“EHOSTUNREACH“
  17. 【转】金蝶EAS BOS工作流开发(附带JAVA脚本)
  18. 百度超级链联合超级账本:区块链技术如何提升金融行业互信与安全
  19. Windows 11的这19个新功能,你都知道吗?
  20. TAGE-SC-L预测器 “TAGE-SC-L Branch Predictors”(2016)

热门文章

  1. linux脚本看日历,Linux查看日历之cal命令
  2. 三角函数公式及工程应用
  3. iphone屏幕镜像如何全屏_苹果投屏有什么方法?使用“屏幕镜像”功能,任意切换大小屏幕...
  4. Telink BDT 的使用方法
  5. 据说是可减少50%的超越卓越经验
  6. 小区水电费管理系统-水电费收费管理系统-社区物业水电缴费管理系统代码
  7. 【dell电脑Windows10重启自动修复】重启之后一直修复,又重启(已解决)
  8. python 整合excel_使用python将多个excel文件合并到同一个文件的方法
  9. Python精灵模块:走来走去的小猫咪
  10. python 读取地震道头数据_[宜配屋]听图阁