Мы знаем, что Hive не проверяет данные на основе полей, и ответственность за проверку вручную лежит на пользователе. Я знаю несколько основных проверок, которые мы можем выполнить для проверки данных.
Я уверен, что должно быть еще несколько проверок или проверок, которые мы можем выполнить для проверки данных в таблицах Hive. Любые предложения приветствуются.
К сожалению, вы не можете сгенерировать этот запрос для каждого столбца в Hive. Сделайте это вручную, как это, или сгенерируйте вывод таблицы описания с помощью оболочки или некоторых других инструментов:
select count(*) as total_records,
--repeat these for each column
count(case when col1 is null then 1 end) as col1_nulls_cnt,
count(distinct col1) as col1_distinct,
min(col1) as col1_min,
max(col1) as col1_max
from your_table;
Даты можно проверить с помощью cast(col1 as date)
:
select cast(col1 as date) --returns NULL if the date is in wrong format
Вы можете вычислить NULL, созданные приведением, как в первом запросе:
count(case when cast(col1 as date) is null then 1 end) as col1_wrong_dates_cnt
Также для более сложной проверки вы можете присоединиться к требуемому диапазону дат, который может быть генерируется или сгенерированным так, и проверить, присоединилась ли дата или нет, например:
select col1,
case when d.dt is not null then 'Ok' else 'Wrong date' end date_check
from your_table t
left join date_range d on t.col1=d.d.dt
Столбцы числовых/других примитивных типов также можно проверить с помощью того же cast()
, что и в этом ответе: https://stackoverflow.com/a/38143497/2700344.
Одна важная вещь, которую следует помнить о Hive: Когда вы вставляете неправильную строку формата в столбец даты/времени, Hive без каких-либо исключений автоматически преобразует ее в NULL. Это произойдет с большинством примитивных типов. Но если вы попытаетесь вставить bigint в столбец int, Hive молча урежет его, выдав какое-то другое число, которое соответствует размеру int. Принимая во внимание все это, лучше построить таблицу со всеми STRING поверх необработанных данных перед проверкой.