对配置单元表执行验证和检查(不能重复)

92dk7w1h  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(306)

我们知道hive不会根据字段验证数据,用户有责任手动检查数据。我知道我们可以执行一些基本检查来验证数据。
计算记录数。
每列上的空值数
每列上唯一/不同值的数目
基于列/数据类型的列级统计信息,如min、max等
使用配置单元的内置函数检查日期,并使用其他函数检查日期列的有效性
我敢肯定,必须有一些更多的检查或验证,我们可以执行验证配置单元表上的数据。欢迎提出任何建议。

6jjcrrmo

6jjcrrmo1#

很遗憾,您无法为配置单元中的每个列生成此查询。像这样手动执行,或者使用shell或其他工具生成基于描述表的输出:

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

此外,对于更复杂的检查,您可以加入所需的日期范围,该范围可以像这样生成或生成,并检查日期是否加入,像这样:

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.
关于配置单元,需要记住一件重要的事情:当您在date/timestamp列中插入错误的格式字符串时,配置单元将无一例外地默默地将其转换为null。大多数基本类型都会发生这种情况。但是,如果您尝试将bigint插入int列,hive将默默地截断它,从而生成适合int大小的不同数字。考虑到所有这些因素,最好在验证之前在原始数据之上构建一个包含所有字符串的表。

相关问题