Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 对配置单元表执行验证和检查(不能重复)_Sql_Hive_Hiveql - Fatal编程技术网

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

Sql 对配置单元表执行验证和检查(不能重复),sql,hive,hiveql,Sql,Hive,Hiveql,我们知道Hive不会根据字段验证数据,用户有责任手动检查数据。 我知道我们可以执行一些基本检查来验证数据 计算记录的数量 每列上的空值数 每列上唯一/不同值的数量 基于列/数据类型的列级统计信息,如最小值、最大值等 使用配置单元的内置函数检查日期和其他,以检查日期列的有效性 我确信,我们还必须执行一些检查或验证来验证配置单元表上的数据。欢迎任何建议。不幸的是,您无法为配置单元中的每个列生成此查询。这样手动执行,或使用shell或其他工具生成基于描述表的输出: select count(*)

我们知道Hive不会根据字段验证数据,用户有责任手动检查数据。 我知道我们可以执行一些基本检查来验证数据

  • 计算记录的数量
  • 每列上的空值数
  • 每列上唯一/不同值的数量
  • 基于列/数据类型的列级统计信息,如最小值、最大值等
  • 使用配置单元的内置函数检查日期和其他,以检查日期列的有效性

  • 我确信,我们还必须执行一些检查或验证来验证配置单元表上的数据。欢迎任何建议。

    不幸的是,您无法为配置单元中的每个列生成此查询。这样手动执行,或使用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