Счетчик таблицы кустов показывает 0 с помощью драйвера java JDB C - PullRequest
0 голосов
/ 27 февраля 2020

Я получаю 0 записей при доступе к таблице кустов из JDB C через java. Но тот же запрос от билайна работает нормально и показывает какое-то число. Что может быть причиной.?

1 Ответ

0 голосов
/ 28 февраля 2020

Поведение, которое вы видите, может быть связано с устаревшей статистикой для определенных таблиц в HiveMetastore, и если на них ссылаются запросы.

Чтобы проверить это, вы можете проверить, запустив set hive.compute.query.using.stats; на обоих Beeline- Hive и JDB C Клиентский сеанс, чтобы увидеть, установлено ли значение, установленное для свойства, в значение ИСТИНА или ЛОЖЬ.

Если установлено значение ИСТИНА, запрос будет получать статистику из HiveMetastore. (обычно это быстрее, так как он выбирает счет из HiveMetastore, а не путем выполнения задания MapReduce. Но он может вернуть неверный / устаревший счет, если статистика не обновлена ​​в HiveMetastore для таблицы)

Если FALSE, запрос выполняет MapReduce как часть выполнения и выполняет подсчет записей, присутствующих в файлах данных в HDFS. По сравнению с предыдущим это отнимает много времени, но дает точные результаты.

Решение:

  1. Для свойства hive.compute.query.using.stats можно установить значение false, запустив приведенный ниже оператор в сеансах Beeline-Hive и JDB C Client. Таким образом, Hive будет выполнять подсчет на основе данных, представленных в HDFS через задание MapReduce.
set hive.compute.query.using.stats=false;

ИЛИ

Рассчитать статистику для таблиц вручную, выполнив приведенный ниже оператор в сеансах клиента Beeline-Hive или JDB C. Это обновит HiveMetastore с обновленной статистикой. После этого count(*) должен возвращать правильные результаты в любых сеансах Hive для этой таблицы.
ANALYZE TABLE <database_name>.<table_name> COMPUTE STATISTICS;

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...