使用athena aws(配置单元坏数据)处理损坏的json结构

6ioyuze2  于 2021-06-25  发布在  Hive
关注(0)|答案(0)|浏览(178)

我需要从表“data\u test”中访问json结构:

id (string)
att (struct<field1:string;field2:string;field3:int>)
SELECT
    id,
    att.field1,
    att.field2,
    att.field3
 FROM database.data_test as rawdata

我收到以下错误:
配置单元\错误\数据:分析字段1的字段值时出错:对于输入字符串:“2147483648”
所以,据我所知,字符串字段中有一个数值2147483648,这会导致数据损坏。
然后我尝试将字符串字段转换为varchar,但结果是相同的。

SELECT
    id,
    CAST(att.field1 as VARCHAR) as field1,
    CAST(att.field2 as VARCHAR) as field2,
    att.field3
 FROM database.data_test as rawdata

配置单元\错误\数据:分析字段1的字段值时出错:对于输入字符串:“2147483648”
当我选择id时,一切正常。

SELECT
    id
 FROM database.data_test as rawdata

不幸的是,我甚至不知道损坏数据的id,否则我就用where子句跳过它们。我只能通过雅典娜访问数据,所以我很难获得更多的信息。我要求aws管理员添加ignore.malformed-选项,以便json文件不允许损坏的数据。他告诉我,他做不到,因为比要多的数据会被跳过。

WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')

管理员给了我ddl:

CREATE EXTERNAL TABLE ${dbName}.${tableName}(
  `id` string, 
  `att` struct<field1:string,field2:string,field3:int>
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe' 
WITH SERDEPROPERTIES ('paths'='att') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://${outPutS3BucketLocation}'
TBLPROPERTIES (
  'CrawlerSchemaDeserializerVersion'='1.0', 
  'CrawlerSchemaSerializerVersion'='1.0', 
  'UPDATED_BY_CRAWLER'='create_benchmark_athena_table', 
  'averageRecordSize'='87361', 
  'classification'='json', 
  'compressionType'='gzip', 
  'objectCount'='1', 
  'recordCount'='100', 
  'sizeKey'='315084', 
  'typeOfData'='file')

我有三个问题:
是否有办法选择甚至损坏的数据,例如所有字段作为字符串?
我可以跳过select语句中损坏的数据吗?
如何获取更多信息(如损坏数据的id字段)以在where子句中跳过它?
谢谢!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题