hive:数据验证/错误数据处理?

hmtdttj4  于 2021-05-30  发布在  Hadoop
关注(0)|答案(2)|浏览(414)

将“外部”数据引入配置单元时,验证它是否“干净”的最佳方法是什么?我们不希望任何无效值进入我们的配置单元表。
例如,如果源数据中的一个字段应该包含一个有效的日期,但是格式不正确(例如:一个“i”是由人类用户输入的,而不是一个),我们如何检测这个?
所以我们有 20I5-06-09 在源数据中而不是 2015-06-09 .
更棘手的是,如果格式是确定的,但它不是一个有效的日期;例如,源数据包含 2015-02-30 但我们不想让它进来,因为二月不能有30天。

b5buobof

b5buobof1#

您可以使用配置单元的内置函数进行验证 to_date 它会回来的 NULL 关于第一类坏数据:

  1. hive> select to_date('2015-02-02'),to_date('20I5-02-02');
  2. 2015-02-02 NULL

对于第二类坏数据,它还做了一些有趣的事情。。。我想这也许应该作为一个错误提出来。

  1. hive> select to_date('2015-02-30');
  2. 2015-03-02

为了解决这个问题你可以

  1. select case when datecol = to_date(datecol) then datecol end
pvabu6sv

pvabu6sv2#

我们通常在将数据放入配置单元表之前清理/验证数据。任何脚本语言都可以快速编写,并且以下任何方法都可以工作:
在将数据推送到hdfs之前验证数据。
如果数据已经在hdfs上,请对其运行mapreduce作业以过滤或修复任何错误条目。然后装进Hive。所有这些都可以通过oozie实现自动化。

相关问题