Hadoop-impala十大优化之(3)—impala表和列信息统计操作最佳实践

  • Post author:
  • Post category:其他


1.1  Hadoop-impala十大优化之(3)—impala表和列信息统计操作

1.1.1  表和列的信息统计

show table stats parquet_snappy;

compute stats parquet_snappy;

n  如果是hive的话,统计信息命令如下

u  ANALYZE TABLE COMPUTE STATISTICS FOR COLUMNS

show table stats parquet_snappy;

+——-+——–+———+————–+——————-+———+——————-+…

| #Rows | #Files | Size    | Bytes Cached | Cache Replication | Format  | Incremental stats |…

+——-+——–+———+————–+——————-+———+——————-+…

| -1    | 96     | 23.35GB | NOT CACHED   | NOT CACHED        | PARQUET | false             |…

+——-+——–+———+————–+——————-+———+——————-+…

compute stats parquet_snappy;

+—————————————–+

| summary                                 |

+—————————————–+

| Updated 1 partition(s) and 6 column(s). |

+—————————————–+

show table stats parquet_snappy;

+————+——–+———+————–+——————-+———+——————-+…

| #Rows      | #Files | Size    | Bytes Cached | Cache Replication | Format  | Incremental stats |…

+————+——–+———+————–+——————-+———+——————-+…

| 1000000000 | 96     | 23.35GB | NOT CACHED   | NOT CACHED        | PARQUET | false             |…

+————+——–+———+————–+——————-+———+——————-+…

1.1.2  关于列的信息统计

show column stats parquet_snappy;

compute stats parquet_snappy;

show column stats parquet_snappy;

+————-+———-+——————+——–+———-+———-+

| Column      | Type     | #Distinct Values | #Nulls | Max Size | Avg Size |

+————-+———-+——————+——–+———-+———-+

| id          | BIGINT   | -1               | -1     | 8        | 8        |

| val         | INT      | -1               | -1     | 4        | 4        |

| zerofill    | STRING   | -1               | -1     | -1       | -1       |

| name        | STRING   | -1               | -1     | -1       | -1       |

| assertion   | BOOLEAN  | -1               | -1     | 1        | 1        |

| location_id | SMALLINT | -1               | -1     | 2        | 2        |

+————-+———-+——————+——–+———-+———-+

compute stats parquet_snappy;

+—————————————–+

| summary                                 |

+—————————————–+

| Updated 1 partition(s) and 6 column(s). |

+—————————————–+

show column stats parquet_snappy;

+————-+———-+——————+——–+———-+——————-+

| Column      | Type     | #Distinct Values | #Nulls | Max Size | Avg Size          |

+————-+———-+——————+——–+———-+——————-+

| id          | BIGINT   | 183861280        | -1     | 8        | 8                 |

| val         | INT      | 139017           | -1     | 4        | 4                 |

| zerofill    | STRING   | 101761           | -1     | 6        | 6                 |

| name        | STRING   | 145636240        | -1     | 22       | 13.00020027160645 |

| assertion   | BOOLEAN  | 2                | -1     | 1        | 1                 |

| location_id | SMALLINT | 339              | -1     | 2        | 2                 |

+————-+———-+——————+——–+———-+——————-+

1.1.3  有关分区表的信息统计

show partitions year_month_day;

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

| year  | month | day | #Rows | #Files | Size    | Bytes Cached | Cache Replication | Format  |…

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

| 2013  | 12    | 1   | -1    | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 2   | -1    | 1      | 2.53MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 3   | -1    | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 4   | -1    | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 5   | -1    | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| Total |       |     | -1    | 5      | 12.58MB | 0B           |                   |         |…

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

show table stats year_month_day;

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

| year  | month | day | #Rows | #Files | Size    | Bytes Cached | Cache Replication | Format  |…

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

| 2013  | 12    | 1   | -1    | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 2   | -1    | 1      | 2.53MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 3   | -1    | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 4   | -1    | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 5   | -1    | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| Total |       |     | -1    | 5      | 12.58MB | 0B           |                   |         |…

+——-+——-+—–+——-+——–+———+————–+——————-+———+…

show column stats year_month_day;

+———–+———+——————+——–+———-+———-+

| Column    | Type    | #Distinct Values | #Nulls | Max Size | Avg Size |

+———–+———+——————+——–+———-+———-+

| id        | INT     | -1               | -1     | 4        | 4        |

| val       | INT     | -1               | -1     | 4        | 4        |

| zfill     | STRING  | -1               | -1     | -1       | -1       |

| name      | STRING  | -1               | -1     | -1       | -1       |

| assertion | BOOLEAN | -1               | -1     | 1        | 1        |

| year      | INT     | 1                | 0      | 4        | 4        |

| month     | INT     | 1                | 0      | 4        | 4        |

| day       | INT     | 5                | 0      | 4        | 4        |

+———–+———+——————+——–+———-+———-+

compute stats year_month_day;

+—————————————–+

| summary                                 |

+—————————————–+

| Updated 5 partition(s) and 5 column(s). |

+—————————————–+

show table stats year_month_day;

+——-+——-+—–+——–+——–+———+————–+——————-+———+…

| year  | month | day | #Rows  | #Files | Size    | Bytes Cached | Cache Replication | Format  |…

+——-+——-+—–+——–+——–+———+————–+——————-+———+…

| 2013  | 12    | 1   | 93606  | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 2   | 94158  | 1      | 2.53MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 3   | 94122  | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 4   | 93559  | 1      | 2.51MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| 2013  | 12    | 5   | 93845  | 1      | 2.52MB  | NOT CACHED   | NOT CACHED        | PARQUET |…

| Total |       |     | 469290 | 5      | 12.58MB | 0B           |                   |         |…

+——-+——-+—–+——–+——–+———+————–+——————-+———+…

show column stats year_month_day;

+———–+———+——————+——–+———-+——————-+

| Column    | Type    | #Distinct Values | #Nulls | Max Size | Avg Size          |

+———–+———+——————+——–+———-+——————-+

| id        | INT     | 511129           | -1     | 4        | 4                 |

| val       | INT     | 364853           | -1     | 4        | 4                 |

| zfill     | STRING  | 311430           | -1     | 6        | 6                 |

| name      | STRING  | 471975           | -1     | 22       | 13.00160026550293 |

| assertion | BOOLEAN | 2                | -1     | 1        | 1                 |

| year      | INT     | 1                | 0      | 4        | 4                 |

| month     | INT     | 1                | 0      | 4        | 4                 |

| day       | INT     | 5                | 0      | 4        | 4                 |

+———–+———+——————+——–+———-+——————-+

1.1.4  增量信息统计

在2.1.0高,你可以使用语法计算增量数据和增量数据下降。增量子句与增量统计工作,是一个专门的功能分区表,是大或经常更新新的分区。

INCREMENTAL STATS or DROP INCREMENTAL STATS statement.

1.1.5  什么时候需要重新统计信息

当一个内容表或分区明显变化,重新计算统计相关数据表或分区。

变化是“重大”的程度不同,根据表的绝对和相对大小。

通常,如果你添加了30%多个数据表,这是值得重新计算统计,因为行和不同值的数量差异可能导致impala选择不同的连接顺序时,表中使用的查询。这个指南对于最大的表是最重要的。

例如,增加30%个新的数据表中含有1 TB的具有更大的影响比加入顺序加30%表只包含几兆字节,而较大的表对查询性能有较大的影响如果impala选择一个次优顺序连接由于过时的统计数据。

如果你加载一个完整的数据表中的数据的新的集合,而每一列的行数和不同值的数量是相对不变的,你不需要重新计算统计表。

如果一个表的数据是过时的,和表的大小使它重新计算新的数据立即不切实际,你可以使用下拉数据声明删除过时的数据,使其更容易识别,需要一个新的计算统计操作表。

对于一个大的分区表,请考虑使用增量统计特征在Impala 2.1.0高可用,在增量统计概要说明。如果你添加一个新的分区表,这是值得重新计算增量数据,因为操作只需扫描数据,一个新的分区。

1.1.6  查看表和列的统计信息样例

[localhost:21000] > show table stats store;

+——-+——–+——–+——–+

| #Rows | #Files | Size   | Format |

+——-+——–+——–+——–+

| -1    | 1      | 3.08KB | TEXT   |

+——-+——–+——–+——–+

|Returned 1 row(s) in 0.03s

[localhost:21000] > show column stats store;

+——————–+———–+——————+——–+———-+———-+

| Column             | Type      | #Distinct Values | #Nulls | Max Size | Avg Size |

+——————–+———–+——————+——–+———-+———-+

| s_store_sk         | INT       | -1               | -1     | 4        | 4        |

| s_store_id         | STRING    | -1               | -1     | -1       | -1       |

| s_rec_start_date   | TIMESTAMP | -1               | -1     | 16       | 16       |

| s_rec_end_date     | TIMESTAMP | -1               | -1     | 16       | 16       |

| s_closed_date_sk   | INT       | -1               | -1     | 4        | 4        |

| s_store_name       | STRING    | -1               | -1     | -1       | -1       |

| s_number_employees | INT       | -1               | -1     | 4        | 4        |

| s_floor_space      | INT       | -1               | -1     | 4        | 4        |

| s_hours            | STRING    | -1               | -1     | -1       | -1       |

| s_manager          | STRING    | -1               | -1     | -1       | -1       |

| s_market_id        | INT       | -1               | -1     | 4        | 4        |

| s_geography_class  | STRING    | -1               | -1     | -1       | -1       |

| s_market_desc      | STRING    | -1               | -1     | -1       | -1       |

| s_market_manager   | STRING    | -1               | -1     | -1       | -1       |

| s_division_id      | INT       | -1               | -1     | 4        | 4        |

| s_division_name    | STRING    | -1               | -1     | -1       | -1       |

| s_company_id       | INT       | -1               | -1     | 4        | 4        |

| s_company_name     | STRING    | -1               | -1     | -1       | -1       |

| s_street_number    | STRING    | -1               | -1     | -1       | -1       |

| s_street_name      | STRING    | -1               | -1     | -1       | -1       |

| s_street_type      | STRING    | -1               | -1     | -1       | -1       |

| s_suite_number     | STRING    | -1               | -1     | -1       | -1       |

| s_city             | STRING    | -1               | -1     | -1       | -1       |

| s_county           | STRING    | -1               | -1     | -1       | -1       |

| s_state            | STRING    | -1               | -1     | -1       | -1       |

| s_zip              | STRING    | -1               | -1     | -1       | -1       |

| s_country          | STRING    | -1               | -1     | -1       | -1       |

| s_gmt_offset       | FLOAT     | -1               | -1     | 4        | 4        |

| s_tax_percentage   | FLOAT     | -1               | -1     | 4        | 4        |

+——————–+———–+——————+——–+———-+———-+

Returned 29 row(s) in 0.04s

在分析列统计表的表报表时,您必须指定用于收集统计数据的每个列。impala计算统计报表自动汇总所有列的统计,因为它读取整个表比较快,可以有效地计算所有列的值。这个例子显示了运行后的计算统计报表,统计数据被填充在表和它的所有列中:

[localhost:21000] > compute stats store;

+——————————————+

| summary                                  |

+——————————————+

| Updated 1 partition(s) and 29 column(s). |

+——————————————+

|Returned 1 row(s) in 1.88s

[localhost:21000] > show table stats store;

+——-+——–+——–+——–+

| #Rows | #Files | Size   | Format |

+——-+——–+——–+——–+

| 12    | 1      | 3.08KB | TEXT   |

+——-+——–+——–+——–+

|Returned 1 row(s) in 0.02s

[localhost:21000] > show column stats store;

+——————–+———–+——————+——–+———-+——————-+

| Column             | Type      | #Distinct Values | #Nulls | Max Size | Avg Size          |

+——————–+———–+——————+——–+———-+——————-+

| s_store_sk         | INT       | 12               | -1     | 4        | 4                 |

| s_store_id         | STRING    | 6                | -1     | 16       | 16                |

| s_rec_start_date   | TIMESTAMP | 4                | -1     | 16       | 16                |

| s_rec_end_date     | TIMESTAMP | 3                | -1     | 16       | 16                |

| s_closed_date_sk   | INT       | 3                | -1     | 4        | 4                 |

| s_store_name       | STRING    | 8                | -1     | 5        | 4.25              |

| s_number_employees | INT       | 9                | -1     | 4        | 4                 |

| s_floor_space      | INT       | 10               | -1     | 4        | 4                 |

| s_hours            | STRING    | 2                | -1     | 8        | 7.083300113677979 |

| s_manager          | STRING    | 7                | -1     | 15       | 12                |

| s_market_id        | INT       | 7                | -1     | 4        | 4                 |

| s_geography_class  | STRING    | 1                | -1     | 7        | 7                 |

| s_market_desc      | STRING    | 10               | -1     | 94       | 55.5              |

| s_market_manager   | STRING    | 7                | -1     | 16       | 14                |

| s_division_id      | INT       | 1                | -1     | 4        | 4                 |

| s_division_name    | STRING    | 1                | -1     | 7        | 7                 |

| s_company_id       | INT       | 1                | -1     | 4        | 4                 |

| s_company_name     | STRING    | 1                | -1     | 7        | 7                 |

| s_street_number    | STRING    | 9                | -1     | 3        | 2.833300113677979 |

| s_street_name      | STRING    | 12               | -1     | 11       | 6.583300113677979 |

| s_street_type      | STRING    | 8                | -1     | 9        | 4.833300113677979 |

| s_suite_number     | STRING    | 11               | -1     | 9        | 8.25              |

| s_city             | STRING    | 2                | -1     | 8        | 6.5               |

| s_county           | STRING    | 1                | -1     | 17       | 17                |

| s_state            | STRING    | 1                | -1     | 2        | 2                 |

| s_zip              | STRING    | 2                | -1     | 5        | 5                 |

| s_country          | STRING    | 1                | -1     | 13       | 13                |

| s_gmt_offset       | FLOAT     | 1                | -1     | 4        | 4                 |

| s_tax_percentage   | FLOAT     | 5                | -1     | 4        | 4                 |

+——————–+———–+——————+——–+———-+——————-+

Returned 29 row(s) in 0.04s


下面的示例显示了如何将统计数据表示为一个分区表。在这种情况下,我们已经建立了一个表,以保持世界上最琐碎的人口普查数据,一个单一的字符串字段,按一年的列分区。表统计包括每个分区的单独的条目,以及数字字段的最终总计。列数据包括分区列一些容易推断出来的事实,如不同值的数量(划分子目录的数量)。

localhost:21000] > describe census;

+——+———-+———+

| name | type     | comment |

+——+———-+———+

| name | string   |         |

| year | smallint |         |

+——+———-+———+

Returned 2 row(s) in 0.02s

[localhost:21000] > show table stats census;

+——-+——-+——–+——+———+

| year  | #Rows | #Files | Size | Format  |

+——-+——-+——–+——+———+

| 2000  | -1    | 0      | 0B   | TEXT    |

| 2004  | -1    | 0      | 0B   | TEXT    |

| 2008  | -1    | 0      | 0B   | TEXT    |

| 2010  | -1    | 0      | 0B   | TEXT    |

| 2011  | 0     | 1      | 22B  | TEXT    |

| 2012  | -1    | 1      | 22B  | TEXT    |

| 2013  | -1    | 1      | 231B | PARQUET |

| Total | 0     | 3      | 275B |         |

+——-+——-+——–+——+———+

Returned 8 row(s) in 0.02s

[localhost:21000] > show column stats census;

+——–+———-+——————+——–+———-+———-+

| Column | Type     | #Distinct Values | #Nulls | Max Size | Avg Size |

+——–+———-+——————+——–+———-+———-+

| name   | STRING   | -1               | -1     | -1       | -1       |

| year   | SMALLINT | 7                | -1     | 2        | 2        |

+——–+———-+——————+——–+———-+———-+

Returned 2 row(s) in 0.02s

The following example shows how the statistics are filled in by a COMPUTE STATS statement in Impala.

[localhost:21000] > compute stats census;

+—————————————–+

| summary                                 |

+—————————————–+

| Updated 3 partition(s) and 1 column(s). |

+—————————————–+

|Returned 1 row(s) in 2.16s

[localhost:21000] > show table stats census;

+——-+——-+——–+——+———+

| year  | #Rows | #Files | Size | Format  |

+——-+——-+——–+——+———+

| 2000  | -1    | 0      | 0B   | TEXT    |

| 2004  | -1    | 0      | 0B   | TEXT    |

| 2008  | -1    | 0      | 0B   | TEXT    |

| 2010  | -1    | 0      | 0B   | TEXT    |

| 2011  | 4     | 1      | 22B  | TEXT    |

| 2012  | 4     | 1      | 22B  | TEXT    |

| 2013  | 1     | 1      | 231B | PARQUET |

| Total | 9     | 3      | 275B |         |

+——-+——-+——–+——+———+

Returned 8 row(s) in 0.02s

[localhost:21000] > show column stats census;

+——–+———-+——————+——–+———-+———-+

| Column | Type     | #Distinct Values | #Nulls | Max Size | Avg Size |

+——–+———-+——————+——–+———-+———-+

| name   | STRING   | 4                | -1     | 5        | 4.5      |

| year   | SMALLINT | 7                | -1     | 2        | 2        |

+——–+———-+——————+——–+———-+———-+

Returned 2 row(s) in 0.02s



版权声明:本文为seeyouc原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。