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
您可以在第一个查询中计算由cast-like生成的空值:
count(case when cast(col1 as date) is null then 1 end) as col1_wrong_dates_cnt
1条答案
按热度按时间6jjcrrmo1#
很遗憾,您无法为配置单元中的每个列生成此查询。像这样手动执行,或者使用shell或其他工具生成基于描述表的输出:
日期可以使用
cast(col1 as date)
:您可以在第一个查询中计算由cast-like生成的空值:
此外,对于更复杂的检查,您可以加入所需的日期范围,该范围可以像这样生成或生成,并检查日期是否加入,像这样:
数字/其他基本类型列也可以使用相同的
cast()
就像这样的回答:https://stackoverflow.com/a/38143497/2700344.关于配置单元,需要记住一件重要的事情:当您在date/timestamp列中插入错误的格式字符串时,配置单元将无一例外地默默地将其转换为null。大多数基本类型都会发生这种情况。但是,如果您尝试将bigint插入int列,hive将默默地截断它,从而生成适合int大小的不同数字。考虑到所有这些因素,最好在验证之前在原始数据之上构建一个包含所有字符串的表。