我曾经在Hadoop上运行Hive查询,根据我的经验,即使输入数据不遵循表数据类型,作业也不会失败。 例如:如果输入数据" abc"路由到具有'整数'的表格列数据类型然后' NULL'为特定值插入。
在Big查询中,我观察到如果数据值不严格遵循列数据类型,则作业失败。
file-00000000: CSV table encountered too many errors, giving up. Rows: 1; errors: 1. (error code: invalid)
query: Could not parse '2017-11-23' as a timestamp. Required format is YYYY-MM-DD HH:MM[:SS[.SSSSSS]]; Could not parse '2017-11-23' as datetime for field date (position 1) starting at location 0 (error code: invalidQuery)
对于这个例子,如果' 2017-11-23'不遵循timestamp数据类型然后' NULL'应该已经插入列而不是失败的工作。
有没有办法限制这种行为?无论数据是什么,我的工作都不应该失败。任何见解?
答案 0 :(得分:1)
有两种选择:
STRING
作为列类型。使用查询,您可以转换数据,例如使用SAFE_CAST(timestamp_string AS TIMESTAMP)
获取无效时间戳的NULL值。configuration.load.maxBadRecords
property跳过包含无效数据的行。请注意,如果值不正确,这将省略整行。