Вставка перезаписи в таблицу Hive сохраняет меньше записей, чем фактический номер записи - PullRequest
2 голосов
/ 07 мая 2019

У меня есть секционированная таблица tab, и я хочу создать из нее некоторую таблицу tmp test1. Вот как я создал таблицу tmp:

CREATE TABLE IF NOT EXISTS test1
(
 COL1 string,
 COL2 string,
 COL3 string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|'
STORED AS TEXTFILE;

Написать в эту таблицу:

INSERT OVERWRITE TABLE test1 
SELECT TAB.COL1 as COL1,
    TAB.COL2 as COL2,
    TAB.COL3 as COL3
FROM TAB
WHERE PT='2019-05-01';

Затем я подсчитываю записи в test1, у него 94493486 записей, в то время как следующий SQL возвращает счет 149248486:

SELECT COUNT(*) FROM
(SELECT TAB.COL1 as COL1,
    TAB.COL2 as COL2,
    TAB.COL3 as COL3
  FROM TAB
  WHERE PT='2019-05-01') AS TMP;

Кроме того, когда я сохраняю выбранный раздел (PT - это столбец раздела) в HDFS, количество записей корректно:

INSERT OVERWRITE directory '/user/me/wtfhive' row format delimited fields terminated by '|'
SELECT TAB.COL1 as COL1,
TAB.COL2 as COL2,
TAB.COL3 as COL3
FROM TAB
WHERE PT='2019-05-01';

Моя версия Hive 3.1.0 поставляется с Ambari 2.7.1.0. Кто-нибудь есть идеи, что может вызвать эту проблему? Спасибо.

=================== ОБНОВЛЕНИЕ =================

Я считаю, что что-то может быть связано с этой проблемой. Таблица tab использует ORC в качестве формата хранения. Его данные импортируются из файла данных ORC другой таблицы, в другом кластере Hive, с помощью следующего сценария:

LOAD DATA INPATH '/data/hive_dw/db/tablename/pt=2019-04-16' INTO TABLE tab PARTITION(pt='2019-04-16');

Поскольку таблица 2 имеет одинаковый формат, процедура загрузки в основном просто перемещает файл данных из исходного каталога HDFS в каталог Hive.

В следующей процедуре я могу загрузить без проблем:

  1. экспорт данных из таблицы ORC tab в текстовый файл HDFS
  2. загрузка из текстового файла в временную таблицу Hive
  3. загрузка данных обратно в tab из временной таблицы
  4. теперь я могу выбирать / экспортировать из tab в другие таблицы без пропусков записей

Я подозреваю, что проблема в формате ORC. Я просто не понимаю, почему он может без проблем экспортировать в текстовый файл HDFS, но экспорт в другую таблицу (независимо от того, какой формат хранения используется в другой таблице) приведет к потере данных.

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