Sql 对配置单元表执行验证和检查(不能重复)
我们知道Hive不会根据字段验证数据,用户有责任手动检查数据。 我知道我们可以执行一些基本检查来验证数据Sql 对配置单元表执行验证和检查(不能重复),sql,hive,hiveql,Sql,Hive,Hiveql,我们知道Hive不会根据字段验证数据,用户有责任手动检查数据。 我知道我们可以执行一些基本检查来验证数据 计算记录的数量 每列上的空值数 每列上唯一/不同值的数量 基于列/数据类型的列级统计信息,如最小值、最大值等 使用配置单元的内置函数检查日期和其他,以检查日期列的有效性 我确信,我们还必须执行一些检查或验证来验证配置单元表上的数据。欢迎任何建议。不幸的是,您无法为配置单元中的每个列生成此查询。这样手动执行,或使用shell或其他工具生成基于描述表的输出: select count(*)
我确信,我们还必须执行一些检查或验证来验证配置单元表上的数据。欢迎任何建议。不幸的是,您无法为配置单元中的每个列生成此查询。这样手动执行,或使用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作为日期)
验证日期:
您可以像在第一个查询中一样计算强制转换生成的空值:
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()
检查数字/其他基本类型列:
关于蜂巢,需要记住一件重要的事情:
当您在日期/时间戳列中插入错误的格式字符串时,配置单元将毫无例外地将其静默转换为NULL。大多数基本类型都会发生这种情况。但是,如果您试图将bigint插入int列中,Hive会悄悄地截断它,生成适合int大小的不同数字。考虑到所有这些因素,最好在验证之前在原始数据之上构建一个包含所有字符串的表
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