Hive:当前令牌(VALUE_STRING)不是数字,不能使用数值访问器,而在嵌套json上尝试查询hive中的外部表

时间:2017-12-08 15:12:45

标签: json hive

由于

,无法在嵌套的json上查询外部配置单元表
 Error: java.io.IOException: org.apache.hadoop.hive.serde2.SerDeException:  org.codehaus.jackson.JsonParseException: Current token (VALUE_STRING) not numeric, can not use numeric value accessors
杰森看起来像 -

创建使用的表命令 -

create external table s
(
magic String,
type String,
headers String,
messageSchemaId String,
messageSchema String,
message  struct<data:struct<s_ID:double,s_TYPE_ID:Int,NAME:String,DES   CR:String,ACTIVE_s:double,s_ID:double,s_ENABLED:Int,pharmacy_location:Int>,seData:struct<APPLICATION_ID:double,s_TYPE_ID:Int,NAME:String,DESCR:String,s_STAT:double,PROGRAM_ID:double,s_ENABLED:Int,s_location:Int>,headers:struct<operation:String, changeSequence:String, timestamp: String, streamPosition: String, transactionId: String>>
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
Stored as textfile
LOCATION '/user/eh2524/pt_rpt/MGPH.APPLICATION';

对于同一个json,我可以使用 -

创建外部表
CREATE EXTERNAL TABLE `MGPH_ZT`(                                  
`jsonstr` string)                                                  
PARTITIONED BY (                                                     
`dt` string)                                                       
ROW FORMAT SERDE                                                     
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'               
STORED AS INPUTFORMAT                                                
'org.apache.hadoop.mapred.TextInputFormat'                         
OUTPUTFORMAT                                                         
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'       
LOCATION                                                             
'/user/eh2524/pt_rpt/MGPH.APPLICATION/'  
TBLPROPERTIES (                                                      
'transient_lastDdlTime'='1510776187')

但是要查询上面创建的表,我使用了像

这样的jsontuple方法
select count(*) from pt_rpt_stg.hvf_modules j
lateral view json_tuple(j.jsonstr, 'message') m as message
lateral view json_tuple(m.message, 'data') d as datacntr
lateral view json_tuple(d.datacntr,'l_location') s as   pharmacy_location
where pharmacy_location is null;

我想使用Json serde创建表,以便我的团队可以直接查询它,就像我们对普通的hive表一样,现在它在查询时失败。

我尝试了什么 -

1 个答案:

答案 0 :(得分:0)

问题是您在表定义中将pharmacy_location声明为int,但您的示例数据是字符串:&#34; pharmacy_location&#34;:&#34; 93&#34;。如果在表定义中更改它,它应该可以工作。