zoukankan      html  css  js  c++  java
  • Impala的命令COMPUTE STATS

    COMPUTE STATS主要作用:

    收集有关表中数据的容量和分布以及所有相关列和分区的信息。这些信息存储在metastore数据库中,Impala使用这些信息来帮助优化查询。例如,如果Impala可以确定一个表是大是小,或者有很多或很少不同的值,它就可以为一个连接查询或插入操作适当地组织并行化工作。

    语法:

    COMPUTE STATS [db_name.]table_name

    COMPUTE INCREMENTAL STATS [db_name.]table_name [PARTITION (partition_spec)]

    (PARTITION)只允许分区子句与增量子句组合使用。对于计算增量统计,它是可选的,对于删除增量统计,它是必需的。当您在COMPUTE INCREMENTAL STATS或DROP INCREMENTAL STATS语句中通过PARTITION (partition_spec)子句指定分区时,必须在规范中包含所有分区列,并为所有分区键列指定常量值。

    最初,Impala依赖于用户来运行Hive分析表语句,但是这种收集统计数据的方法被证明是不可靠且难以使用的。Impala COMPUTE STATS语句从头开始构建,以提高该操作的可靠性和用户友好性。COMPUTE STATS不需要任何设置步骤或特殊配置。您只运行一个Impala COMPUTE STATS语句来收集表和列的统计信息,而不是针对每种统计信息分别运行Hive ANALYZE表语句。
    COMPUTE INCREMENTAL STATS变体是分区表的快捷方式,它只在分区的一个子集上工作,而不是整个表。增量特性使它适合于具有许多分区的大型表,在这些表中,每次添加或删除一个分区时,完整的COMPUTE STATS操作都要花费很长时间。有关详细使用情况,请参见增量统计的概述。
    计算增量统计仅适用于分区表。如果对未分区表使用INCREMENTAL子句,Impala会自动使用原始的COMPUTE STATS语句。这样的表在显示表stats输出的Incremental stats列下显示false。

    Note:由于许多性能最关键、资源最密集的操作都依赖于表和列统计信息来构建准确、高效的计划,因此计算统计信息是ETL过程最后的一个重要步骤。

    在慢速查询的性能调优期间,或在内存不足的情况下进行故障排除时,第一步是在所有表上运行COMPUTE STATS:
    准确的统计数据有助于Impala为连接查询构建高效的查询计划,提高性能并减少内存使用。
    准确的统计数据有助于Impala有效地将插入操作分配到拼花表中,提高性能并减少内存使用。
    准确的统计数据可以帮助Impala估计每个查询所需的内存,这在使用资源管理特性(如许可控制和纱线资源管理框架)时非常重要。统计数据帮助Impala实现高并发性,充分利用可用内存,避免与其他Hadoop组件的工作负载争用。

    复杂类型的考虑:
    目前,COMPUTE STATS语句创建的统计信息不包括关于复杂类型列的信息。复杂列的列统计指标总是显示为-1。对于涉及复杂类型列的查询,Impala使用启发式方法来估计这些列中的数据分布。
    HBase注意事项:
    COMPUTE STATS也适用于HBase表。为HBase表收集的统计信息与为hdfs支持的表收集的统计信息有所不同,但是在连接查询中涉及到HBase表时,仍然使用元数据进行优化。

    性能注意事项:
    COMPUTE STATS收集的统计信息用于优化连接查询、向拼花表插入操作和其他资源密集型SQL语句。
    对于大型表,COMPUTE STATS语句本身可能需要很长时间,您可能需要调优它的性能。

    COMPUTE STATS语句不能与EXPLAIN语句或impala-shell中的SUMMARY命令一起工作。

    您可以使用impala-shell中的概要文件语句来整体检查语句的计时信息。

    如果一个基本的COMPUTE STATS语句对于一个分区表花费了很长时间,那么可以考虑切换到COMPUTE INCREMENTAL STATS语法,以便每次只分析新添加的分区。

    文件格式注意事项:
    COMPUTE STATS语句处理使用Impala支持的任何文件格式创建的表。有关使用不同文件格式的详细信息,请参见Impala如何处理Hadoop文件格式。根据表的文件格式,以下考虑适用于计算统计信息。
    COMPUTE STATS语句对文本表没有任何限制。这些表可以通过Impala或Hive创建。
    COMPUTE STATS语句适用于拼花表。这些表可以通过Impala或Hive创建。
    COMPUTE STATS语句可以不受CDH 5.4 / Impala 2.2或更高版本中Avro表的限制。在以前的版本中,COMPUTE STATS只适用于通过Hive创建的Avro表,并且要求CREATE TABLE语句使用sql风格的列名和类型,而不是Avro风格的模式规范。
    COMPUTE STATS语句对RCFile表没有任何限制。这些表可以通过Impala或Hive创建。
    COMPUTE STATS语句可以处理没有限制的SequenceFile表。这些表可以通过Impala或Hive创建。
    COMPUTE STATS语句处理分区表,不管所有分区使用相同的文件格式,还是通过ALTER TABLE定义某些分区以使用不同的文件格式。
    DDL语句类型:
    取消:当在内部运行INSERT或SELECT操作时,某些多阶段语句(创建表作为SELECT和COMPUTE STATS)可以在某些阶段取消。取消这个语句,使用ctrl - c从impala-shell解释器,取消按钮看页面的色调,行动>从查询列表中取消Cloudera经理,或取消从动态查询列表中(为特定节点)的查询选项卡上的黑斑羚web UI(端口25000)。
    目前,CDH 4下的COMPUTE STATS语句不存储小数列的任何统计信息。当Impala在CDH 5下运行时,它在metastore数据库中对DECIMAL有更好的支持,COMPUTE STATS确实收集了DECIMAL列的统计信息,而Impala使用这些统计信息来优化查询性能。

    Note:在Impala 1.4.0之前,COMPUTE STATS统计每个列中的空值数量,并将该数字记录在metastore数据库中。因为Impala目前在查询规划期间不使用空计数,所以Impala 1.4.0及更高版本通过跳过这个空计数来加速COMPUTE STATS语句。

    内部细节:
    在后台,COMPUTE STATS语句执行两条语句:一条通过count(*)函数计算表中每个分区(或者未分区的整个表)的行数,另一条通过NDV()函数计算每列中不同值的近似数量。您可能在监视和诊断显示中看到这些查询。影响其他查询的性能、可伸缩性和执行的因素(如并行执行、内存使用、允许控制和超时)也适用于COMPUTE STATS语句运行的查询。
    HDFS权限:
    impalad守护进程所运行的用户ID(通常是impala用户)必须具有源目录中所有受影响文件的读权限:未分区表中的所有文件或计算统计表中的分区表;如果是计算增量统计,则为不包含增量统计的分区中的所有文件。它还必须具有所有包含数据文件的相关目录的读取和执行权限。(本质上,COMPUTE STATS需要与它对表运行的底层SELECT查询相同的权限。)

  • 相关阅读:
    STM32 F4 DAC DMA Waveform Generator
    STM32 F4 General-purpose Timers for Periodic Interrupts
    Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式
    Python第十三天 django 1.6 导入模板 定义数据模型 访问数据库 GET和POST方法 SimpleCMDB项目 urllib模块 urllib2模块 httplib模块 django和web服务器整合 wsgi模块 gunicorn模块
    查看SQL Server服务运行帐户和SQL Server的所有注册表项
    Pycharm使用技巧(转载)
    SQL Server 2014内存优化表的使用场景
    Python第十天 print >> f,和fd.write()的区别 stdout的buffer 标准输入 标准输出 从控制台重定向到文件 标准错误 重定向 输出流和输入流 捕获sys.exit()调用 optparse argparse
    Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
    Python第六天 类型转换
  • 原文地址:https://www.cnblogs.com/hello-wei/p/12165861.html
Copyright © 2011-2022 走看看