Анализ запросов в Hive

Перед выполнением каждого запроса оптимизатор Hive (Cost-Based Optimizer, CBO) создает план выполнения — последовательность задач, которые должны быть выполнены, чтобы получить нужные данные наиболее эффективным способом. Используя команды Hive EXPLAIN и ANALYZE, вы можете просматривать планы выполнения и получать подробную статистику о работе Hive для оптимизации ваших запросов.

Тестовая база данных

Для демонстрации примеров в данной статье используются Hive-таблицы transactions и accounts, структура которых описана ниже.

SELECT * FROM transactions;
+----------------------+----------------------+--------------------------+------------------------+
| transactions.txn_id  | transactions.acc_id  | transactions.txn_amount  | transactions.txn_date  |
+----------------------+----------------------+--------------------------+------------------------+
| 1                    | 1002                 | 10.00                    | 2023-01-01             |
| 8                    | 1003                 | 50.00                    | 2023-01-01             |
| 3                    | 1002                 | 30.00                    | 2023-01-02             |
| 4                    | 1001                 | 100.50                   | 2023-01-02             |
| 2                    | 1002                 | 20.00                    | 2023-01-03             |
| 6                    | 1001                 | 200.50                   | 2023-01-03             |
| 7                    | 1003                 | 50.00                    | 2023-01-03             |
| 5                    | 1001                 | 150.50                   | 2023-01-04             |
| 9                    | 1003                 | 75.00                    | 2023-01-04             |
+----------------------+----------------------+--------------------------+------------------------+

SELECT * FROM accounts;
+--------------+---------------------+
| accounts.id  | accounts.full_name  |
+--------------+---------------------+
| 1001         | John Smith          |
| 1002         | Sarah Connor        |
| 1003         | Rick Sanchez        |
+--------------+---------------------+
SQL для создания тестовых таблиц

 
Для создания и наполнения тестовых таблиц Hive выполните следующий SQL с помощью /bin/beeline.

CREATE DATABASE IF NOT EXISTS explain_demo;
USE explain_demo;

DROP TABLE IF EXISTS transactions;
CREATE TABLE transactions(txn_id int, acc_id int, txn_amount decimal(10,2)) PARTITIONED BY (txn_date date);
INSERT INTO transactions VALUES
(1, 1002, 10.00, '2023-01-01'),
(2, 1002, 20.00, '2023-01-03'),
(3, 1002, 30.00, '2023-01-02'),
(4, 1001, 100.50, '2023-01-02'),
(5, 1001, 150.50, '2023-01-04'),
(6, 1001, 200.50, '2023-01-03'),
(7, 1003, 50.00, '2023-01-03'),
(8, 1003, 50.00, '2023-01-01'),
(9, 1003, 75.00, '2023-01-04');

DROP TABLE IF EXISTS accounts;
CREATE TABLE accounts(id int, full_name string);
INSERT INTO accounts VALUES
(1001, 'John Smith'),
(1002, 'Sarah Connor'),
(1003, 'Rick Sanchez');

EXPLAIN

Команда EXPLAIN выводит план выполнения (execution plan) Hive-запроса. Вывод включает в себя подробное описание того, какими этапами Hive планирует выполнить запрос.

Синтаксис имеет следующий вид:

EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION|VECTORIZATION|FORMATTED] <query>

Где:

  • EXTENDED — возвращает расширенную информацию о плане выполнения.

  • DEPENDENCY — содержит подробную информацию о таблицах и партициях, которые задействованы в запросе.

  • AUTHORIZATION — возвращает информацию о всех объектах, требующих авторизации, включая проблемы с правами доступа (если таковые имеются).

  • VECTORIZATION — возвращает информацию о тех Map/Reduce-задачах, для которых не применялась векторизация.

  • FORMATTED — форматирует вывод в JSON-формате.

  • <query> — запрос, который необходимо анализировать.

EXPLAIN

Команда EXPLAIN возвращает общую информацию о плане выполнения запроса.

CREATE TABLE IF NOT EXISTS top_txns_per_acc(acc_id int, max_txn_value decimal(10,2));

EXPLAIN
    FROM transactions INSERT OVERWRITE TABLE top_txns_per_acc
    SELECT acc_id, MAX(txn_amount) GROUP BY acc_id;

Результат:

+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
| Plan optimized by CBO.                             |
|                                                    |
| Vertex dependency in root stage                    |
| Reducer 2 <- Map 1 (SIMPLE_EDGE)                   |
| Reducer 3 <- Reducer 2 (CUSTOM_SIMPLE_EDGE)        |
|                                                    |
| Stage-3                                            |
|   Stats Work{}                                     |
|     Stage-0                                        |
|       Move Operator                                |
|         table:{"name:":"explain_demo.top_txns_per_acc"} |
|         Stage-2                                    |
|           Dependency Collection{}                  |
|             Stage-1                                |
|               Reducer 3                            |
|               File Output Operator [FS_13]         |
|                 Group By Operator [GBY_11] (rows=1 width=552) |
|                   Output:["_col0","_col1"],aggregations:["compute_stats(VALUE._col0)","compute_stats(VALUE._col1)"] |
|                 <-Reducer 2 [CUSTOM_SIMPLE_EDGE]   |
|                   File Output Operator [FS_6]      |
|                     table:{"name:":"explain_demo.top_txns_per_acc"} |
|                     Group By Operator [GBY_4] (rows=4 width=12) |
|                       Output:["_col0","_col1"],aggregations:["max(VALUE._col0)"],keys:KEY._col0 |
|                     <-Map 1 [SIMPLE_EDGE] vectorized |
|                       SHUFFLE [RS_16]              |
|                         PartitionCols:_col0        |
|                         Group By Operator [GBY_15] (rows=9 width=12) |
|                           Output:["_col0","_col1"],aggregations:["max(txn_amount)"],keys:acc_id |
|                           Select Operator [SEL_14] (rows=9 width=12) |
|                             Output:["acc_id","txn_amount"] |
|                             TableScan [TS_0] (rows=9 width=12) |
|                               explain_demo@transactions,transactions,Tbl:COMPLETE,Col:NONE,Output:["acc_id","txn_amount"] |
|                   PARTITION_ONLY_SHUFFLE [RS_10]   |
|                     Group By Operator [GBY_9] (rows=1 width=536) |
|                       Output:["_col0","_col1"],aggregations:["compute_stats(acc_id, 'hll')","compute_stats(max_txn_value, 'hll')"] |
|                       Select Operator [SEL_8] (rows=4 width=12) |
|                         Output:["acc_id","max_txn_value"] |
|                          Please refer to the previous Group By Operator [GBY_4] |
|                                                    |
+----------------------------------------------------+

Вывод EXPLAIN может значительно отличаться в зависимости от запроса, но основными информационными блоками являются следующие:

  • Stage dependencies. Содержит список этапов (stages), которые вместе формируют общий план выполнения. Отдельный этап может являться Map/Reduce-задачей, операцией чтения/записи в HDFS, обращением к Hive Metastore и так далее.

  • Stage plans. Каждый блок описывает детали отдельного этапа, включая задействованные операторы, порядок сортировки и так далее.

EXPLAIN EXTENDED

Команда EXPLAIN EXTENDED выводит более подробную информацию о плане выполнения Hive. Вывод включает в себя дополнительную информацию об операциях ввода-вывода HDFS, форматах данных, бакетах, расширенную статистику и так далее.

EXPLAIN EXTENDED
    SELECT * FROM transactions
    WHERE txn_amount > 100;
Пример вывода EXPLAIN EXTENDED
+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
| STAGE DEPENDENCIES:                                |
|   Stage-0 is a root stage                          |
|                                                    |
| STAGE PLANS:                                       |
|   Stage: Stage-0                                   |
|     Fetch Operator                                 |
|       limit: -1                                    |
|       Partition Description:                       |
|           Partition                                |
|             input format: org.apache.hadoop.mapred.TextInputFormat |
|             output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|             partition values:                      |
|               txn_date 2023-01-01                  |
|             properties:                            |
|               COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"acc_id":"true","txn_amount":"true","txn_id":"true"}} |
|               bucket_count -1                      |
|               column.name.delimiter ,              |
|               columns txn_id,acc_id,txn_amount     |
|               columns.comments                     |
|               columns.types int:int:decimal(10,2)  |
|               file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|               file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions/txn_date=2023-01-01 |
|               name explain_demo.transactions       |
|               numFiles 1                           |
|               numRows 2                            |
|               partition_columns txn_date           |
|               partition_columns.types date         |
|               rawDataSize 24                       |
|               serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|               serialization.format 1               |
|               serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               totalSize 26                         |
|               transient_lastDdlTime 1702847838     |
|             serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                                                    |
|               input format: org.apache.hadoop.mapred.TextInputFormat |
|               output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               properties:                          |
|                 bucket_count -1                    |
|                 bucketing_version 2                |
|                 column.name.delimiter ,            |
|                 columns txn_id,acc_id,txn_amount   |
|                 columns.comments                   |
|                 columns.types int:int:decimal(10,2) |
|                 file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|                 file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|                 location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions |
|                 name explain_demo.transactions     |
|                 partition_columns txn_date         |
|                 partition_columns.types date       |
|                 serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|                 serialization.format 1             |
|                 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                 transient_lastDdlTime 1702846232   |
|               serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               name: explain_demo.transactions      |
|             name: explain_demo.transactions        |
|           Partition                                |
|             input format: org.apache.hadoop.mapred.TextInputFormat |
|             output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|             partition values:                      |
|               txn_date 2023-01-02                  |
|             properties:                            |
|               COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"acc_id":"true","txn_amount":"true","txn_id":"true"}} |
|               bucket_count -1                      |
|               column.name.delimiter ,              |
|               columns txn_id,acc_id,txn_amount     |
|               columns.comments                     |
|               columns.types int:int:decimal(10,2)  |
|               file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|               file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions/txn_date=2023-01-02 |
|               name explain_demo.transactions       |
|               numFiles 1                           |
|               numRows 2                            |
|               partition_columns txn_date           |
|               partition_columns.types date         |
|               rawDataSize 25                       |
|               serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|               serialization.format 1               |
|               serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               totalSize 27                         |
|               transient_lastDdlTime 1702847838     |
|             serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                                                    |
|               input format: org.apache.hadoop.mapred.TextInputFormat |
|               output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               properties:                          |
|                 bucket_count -1                    |
|                 bucketing_version 2                |
|                 column.name.delimiter ,            |
|                 columns txn_id,acc_id,txn_amount   |
|                 columns.comments                   |
|                 columns.types int:int:decimal(10,2) |
|                 file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|                 file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|                 location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions |
|                 name explain_demo.transactions     |
|                 partition_columns txn_date         |
+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
|                 partition_columns.types date       |
|                 serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|                 serialization.format 1             |
|                 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                 transient_lastDdlTime 1702846232   |
|               serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               name: explain_demo.transactions      |
|             name: explain_demo.transactions        |
|           Partition                                |
|             input format: org.apache.hadoop.mapred.TextInputFormat |
|             output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|             partition values:                      |
|               txn_date 2023-01-03                  |
|             properties:                            |
|               COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"acc_id":"true","txn_amount":"true","txn_id":"true"}} |
|               bucket_count -1                      |
|               column.name.delimiter ,              |
|               columns txn_id,acc_id,txn_amount     |
|               columns.comments                     |
|               columns.types int:int:decimal(10,2)  |
|               file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|               file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions/txn_date=2023-01-03 |
|               name explain_demo.transactions       |
|               numFiles 1                           |
|               numRows 3                            |
|               partition_columns txn_date           |
|               partition_columns.types date         |
|               rawDataSize 37                       |
|               serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|               serialization.format 1               |
|               serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               totalSize 40                         |
|               transient_lastDdlTime 1702847838     |
|             serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                                                    |
|               input format: org.apache.hadoop.mapred.TextInputFormat |
|               output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               properties:                          |
|                 bucket_count -1                    |
|                 bucketing_version 2                |
|                 column.name.delimiter ,            |
|                 columns txn_id,acc_id,txn_amount   |
|                 columns.comments                   |
|                 columns.types int:int:decimal(10,2) |
|                 file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|                 file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|                 location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions |
|                 name explain_demo.transactions     |
|                 partition_columns txn_date         |
|                 partition_columns.types date       |
|                 serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|                 serialization.format 1             |
|                 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                 transient_lastDdlTime 1702846232   |
|               serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               name: explain_demo.transactions      |
|             name: explain_demo.transactions        |
|           Partition                                |
|             input format: org.apache.hadoop.mapred.TextInputFormat |
|             output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|             partition values:                      |
|               txn_date 2023-01-04                  |
|             properties:                            |
|               COLUMN_STATS_ACCURATE {"BASIC_STATS":"true","COLUMN_STATS":{"acc_id":"true","txn_amount":"true","txn_id":"true"}} |
|               bucket_count -1                      |
|               column.name.delimiter ,              |
|               columns txn_id,acc_id,txn_amount     |
|               columns.comments                     |
|               columns.types int:int:decimal(10,2)  |
|               file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|               file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions/txn_date=2023-01-04 |
|               name explain_demo.transactions       |
|               numFiles 1                           |
|               numRows 2                            |
|               partition_columns txn_date           |
|               partition_columns.types date         |
|               rawDataSize 25                       |
|               serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|               serialization.format 1               |
|               serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               totalSize 27                         |
|               transient_lastDdlTime 1702847838     |
|             serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                                                    |
|               input format: org.apache.hadoop.mapred.TextInputFormat |
|               output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|               properties:                          |
|                 bucket_count -1                    |
|                 bucketing_version 2                |
|                 column.name.delimiter ,            |
|                 columns txn_id,acc_id,txn_amount   |
|                 columns.comments                   |
|                 columns.types int:int:decimal(10,2) |
|                 file.inputformat org.apache.hadoop.mapred.TextInputFormat |
|                 file.outputformat org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |
|                 location hdfs://adh/apps/hive/warehouse/explain_demo.db/transactions |
|                 name explain_demo.transactions     |
|                 partition_columns txn_date         |
+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
|                 partition_columns.types date       |
|                 serialization.ddl struct transactions { i32 txn_id, i32 acc_id, decimal(10,2) txn_amount} |
|                 serialization.format 1             |
|                 serialization.lib org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|                 transient_lastDdlTime 1702846232   |
|               serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe |
|               name: explain_demo.transactions      |
|             name: explain_demo.transactions        |
|       Processor Tree:                              |
|         TableScan                                  |
|           alias: transactions                      |
|           GatherStats: false                       |
|           Filter Operator                          |
|             isSamplingPred: false                  |
|             predicate: (txn_amount > 100) (type: boolean) |
|             Select Operator                        |
|               expressions: txn_id (type: int), acc_id (type: int), txn_amount (type: decimal(10,2)), txn_date (type: date) |
|               outputColumnNames: _col0, _col1, _col2, _col3 |
|               ListSink                             |
|                                                    |
+----------------------------------------------------+

EXPLAIN DEPENDENCY

Команда EXPLAIN DEPENDENCY возвращает дополнительную информацию о всех источниках входных данных (таблицы Hive, партиции, HDFS-файлы), к которым осуществляется доступ при выполнении запроса.

EXPLAIN DEPENDENCY
    SELECT t.txn_id, a.full_name
    FROM transactions t
    JOIN accounts a ON (t.acc_id=a.id)

Результат:

+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
| {"input_tables":[{"tablename":"explain_demo@transactions","tabletype":"MANAGED_TABLE"},{"tablename":"explain_demo@accounts","tabletype":"MANAGED_TABLE"}],"input_partitions":[{"partitionName":"explain_demo@transactions@txn_date=2023-01-01"},{"partitionName":"explain_demo@transactions@txn_date=2023-01-02"},{"partitionName":"explain_demo@transactions@txn_date=2023-01-03"},{"partitionName":"explain_demo@transactions@txn_date=2023-01-04"}]} |
+----------------------------------------------------+

EXPLAIN AUTHORIZATION

Используя EXPLAIN AUTHORIZATION, можно получить информацию о всех ошибках авторизации, включая проблемы с правами доступа (если таковые имеются). Например:

EXPLAIN AUTHORIZATION
    SELECT a.full_name, t.txn_date, t.txn_id from accounts a
    JOIN transactions t ON (a.id=t.acc_id);

Результат:

+----------------------------------------------------+
|                      Explain                       |
+----------------------------------------------------+
| INPUTS:                                            |
|   explain_demo@accounts                            |
|   explain_demo@transactions                        |
|   explain_demo@transactions@txn_date=2023-01-01    |
|   explain_demo@transactions@txn_date=2023-01-02    |
|   explain_demo@transactions@txn_date=2023-01-03    |
|   explain_demo@transactions@txn_date=2023-01-04    |
| OUTPUTS:                                           |
|   hdfs://adh/tmp/hive/hive/de6b68f3-0c62-40e9-84ac-8e34916558c9/hive_2023-12-18_09-26-13_342_1170854594803480484-104/-mr-10001 |
| CURRENT_USER:                                      |
|   hive                                             |
| OPERATION:                                         |
|   QUERY                                            |
+----------------------------------------------------+

EXPLAIN VECTORIZATION

Ключевое слово VECTORIZATION добавляет в вывод EXPLAIN информацию, указывающую, почему для определенных Map/Reduce-задач не использовалась векторизация (если таковые задачи имеются).

Синтаксис имеет следующий вид:

EXPLAIN VECTORIZATION [ONLY] [SUMMARY|OPERATOR|EXPRESSION|DETAIL]

Где:

  • ONLY — скрывает большинство элементов, не связанных с векторизацией.

  • SUMMARY — отображает, включена ли векторизация, а также добавляет краткую информацию о работе Map/Reduce-задач.

  • OPERATOR — показывает информацию о векторизации для операторов.

  • EXPRESSION — показывает информацию о векторизации для выражений.

  • DETAIL — наиболее подробный уровень информации. Включает в себя все вышеперечисленное.

Сбор статистики с помощью ANALYZE

При обработке запросов оптимизатор CBO активно использует статистику Hive для выбора оптимального плана выполнения запроса с точки зрения системных ресурсов. Эта статистика (количество строк, количество файлов, размер сырых данных) хранится в Hive Metastore и по умолчанию генерируется автоматически при добавлении новых данных в таблицы Hive (hive.stats.autogather=true).

Сбор статистики

Для сбора статистики определенной таблицы или партиции в любой момент времени используйте команду ANALYZE. Эта команда вычисляет статистику по запросу и записывает ее в Hive Metastore. Hive поддерживает статистику на уровне таблиц, партиций и столбцов.

Синтаксис выглядит следующим образом:

ANALYZE TABLE <tbl_name> [PARTITION(<partition>)] COMPUTE STATISTICS
[FOR COLUMNS c1, c2, ...]
[NOSCAN];

Где:

  • FOR COLUMNS — вычисляет статистику либо для всех столбцов таблицы (если имена столбцов не указаны), либо только для указанных столбцов.

  • NOSCAN — если параметр указан, команда не сканирует все файлы. Вместо этого в статистике будет содержаться информация о количестве байт и физическом размере в байтах.

ПРИМЕЧАНИЕ
По умолчанию сбор статистики включен для вновь созданных таблиц/партиций, поэтому нет необходимости вычислять статистику вручную, если только не было изменено дефолтное значение свойства hive.stats.autogather=true.

После сохранения статистики в Hive Metastore вы можете просмотреть статистику, выполнив команду DESCRIBE. Синтаксис команды следующий:

DESCRIBE [EXTENDED|FORMATTED] <tbl_name> [PARTITION(<partition>)]

В следующем примере показан сбор и вывод статистики Hive для всей таблицы:

ANALYZE TABLE transactions COMPUTE STATISTICS;
DESCRIBE EXTENDED transactions;

Вывод:

+-----------------------------+----------------------------------------------------+----------+
|          col_name           |                     data_type                      | comment  |
+-----------------------------+----------------------------------------------------+----------+
| txn_id                      | int                                                |          |
| acc_id                      | int                                                |          |
| txn_amount                  | decimal(10,2)                                      |          |
| txn_date                    | date                                               |          |
|                             | NULL                                               | NULL     |
| # Partition Information     | NULL                                               | NULL     |
| # col_name                  | data_type                                          | comment  |
| txn_date                    | date                                               |          |
|                             | NULL                                               | NULL     |
| Detailed Table Information  | Table(tableName:transactions, explain_demo, owner:hive, createTime:1702839122, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:txn_id, type:int, comment:null), FieldSchema(name:acc_id, type:int, comment:null), FieldSchema(name:txn_amount, type:decimal(10,2), comment:null), FieldSchema(name:txn_date, type:date, comment:null)], location:hdfs://adh/apps/hive/warehouse/transactions, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[FieldSchema(name:txn_date, type:date, comment:null)], parameters:{totalSize=120, numRows=9, rawDataSize=111, COLUMN_STATS_ACCURATE={\"BASIC_STATS\":\"true\"}, numFiles=4, numPartitions=4, transient_lastDdlTime=1702839122, bucketing_version=2}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE, rewriteEnabled:false, catName:hive, ownerType:USER) |          |
+-----------------------------+----------------------------------------------------+----------+

Для отображения статистики определенной партиции в Hive-таблице используйте следующий пример:

ANALYZE TABLE transactions PARTITION(txn_date='2023-01-03') COMPUTE STATISTICS;
DESCRIBE EXTENDED transactions PARTITION(txn_date='2023-01-03');

Подробная статистика партиции содержится в блоке Detailed Partition Information.

+---------------------------------+----------------------------------------------------+----------+
|            col_name             |                     data_type                      | comment  |
+---------------------------------+----------------------------------------------------+----------+
| txn_id                          | int                                                |          |
| acc_id                          | int                                                |          |
| txn_amount                      | decimal(10,2)                                      |          |
| txn_date                        | date                                               |          |
|                                 | NULL                                               | NULL     |
| # Partition Information         | NULL                                               | NULL     |
| # col_name                      | data_type                                          | comment  |
| txn_date                        | date                                               |          |
|                                 | NULL                                               | NULL     |
| Detailed Partition Information  | Partition(values:[2023-01-03], dbName:explain_demo, tableName:transactions, createTime:0, lastAccessTime:0, sd:StorageDescriptor(cols:[FieldSchema(name:txn_id, type:int, comment:null), FieldSchema(name:acc_id, type:int, comment:null), FieldSchema(name:txn_amount, type:decimal(10,2), comment:null), FieldSchema(name:txn_date, type:date, comment:null)], location:hdfs://adh/apps/hive/warehouse/transactions/txn_date=2023-01-03, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), parameters:{totalSize=40, numRows=3, rawDataSize=37, COLUMN_STATS_ACCURATE={"BASIC_STATS":"true","COLUMN_STATS":{"acc_id":"true","txn_amount":"true","txn_id":"true"}}, numFiles=1, transient_lastDdlTime=1702844180}, catName:hive) |          |
+---------------------------------+----------------------------------------------------+----------+
Нашли ошибку? Выделите текст и нажмите Ctrl+Enter чтобы сообщить о ней