2016-12-04 3 views
1

При вставке из таблицы Hive в таблицу HIve, она загружает больше записей о фактических записях. Может ли кто-нибудь помочь в этом странном поведении Улья?Загрузка большего количества записей, чем фактических данных в HIve

Мой запрос будет выглядеть как это:

insert overwrite table_a 
    select col1,col2,col3,... from table_b; 

Мой TABLE_B состоит из 6405465 записей.

После вставки из TABLE_B в TABLE_A, я нашел Всего записей в TABLE_A являются 6406565.

Может ли один помочь, пожалуйста, здесь?

+0

хранятся они по-разному? возможно, у вас есть разделители строк 'table_a' в некоторых из данных –

+0

Да, table_b - это обычная текстовая таблица. где table_a - это секционированная текстовая таблица. И обе таблицы имеют линию, делитную на \ n, feilds delimeted на '\ t' –

+1

Также смотрите это: http://stackoverflow.com/a/39914232/2700344 Проверьте, используете ли вы статистику для count (*) вычисление – leftjoin

ответ

2

Если hive.compute.query.using.stats=true;, то оптимизатор использует статистику для расчета запроса вместо запроса данных таблицы. Это намного быстрее, потому что метастор - это быстрая база данных, например MySQL, и не требует сокращения карты. Но статистика может быть не свежей (устаревшей), если таблица была загружена, не используя INSERT OVERWRITE или параметр конфигурации hive.stats.autogather, ответственный за автоматическую сборку статистики, был установлен в значение false. Также статистика не будет обновляться после загрузки файлов или после использования сторонних инструментов. Это потому, что файлы никогда не анализировались, статистика в метасторе не была свежей, если вы поместили новые файлы, никто не знает о том, как данные были изменены. Также после загрузки sqoop и т. Д. Таким образом, рекомендуется загружать статистику для таблицы или раздела после загрузки, используя «ANALYZE TABLE ... COMPUTE STATISTICS».

В случае невозможности автоматического сбора статистики (работает для INSERT OVERWRITE) или путем выполнения инструкции ANALYZE, тогда лучше отключить параметр hive.compute.query.using.stats. Hive будет запрашивать данные вместо использования статистики.

См. Ссылку для справки: https://cwiki.apache.org/confluence/display/Hive/StatsDev#StatsDev-StatisticsinHive