2017-03-07 41 views
1

我有一个用于加载JSON数据的配置单元表。在我的JSON中有两个值。数据类型都是字符串。如果我让他们为BIGINT,然后在此表中选择,给出以下错误:无法在字符串数据类型中使用unixtimestamp列类型

Failed with exception 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 
at [Source: [email protected]; line: 1, column: 21] 

如果我改变有两个string,那么它的工作原理确定。

现在,因为这些列在字符串中,所以我无法对这些列使用from_unixtime方法。

如果我尝试从字符串为bigint改变这些列中的数据类型,我得到以下错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Unable to alter table. The following columns have types incompatible with the existing columns in their respective positions : uploadtimestamp 

下面是我创建表的语句:

create table ABC 
(
    uploadTimeStamp bigint 
    ,PDID   string 

    ,data   array 
        < 
         struct 
         < 
          Data:struct 
          < 
           unit:string 
           ,value:string 
           ,heading:string 
           ,loc:string 
           ,loc1:string 
           ,loc2:string 
           ,loc3:string 
           ,speed:string 
           ,xvalue:string 
           ,yvalue:string 
           ,zvalue:string 
          > 
          ,Event:string 
          ,PDID:string 
          ,`Timestamp`:string 
          ,Timezone:string 
          ,Version:string 
          ,pii:struct<dummy:string> 
         > 
        > 
) 
row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
stored as textfile; 

我的JSON:

{"uploadTimeStamp":"1488793268598","PDID":"123","data":[{"Data":{"unit":"rpm","value":"100"},"EventID":"E1","PDID":"123","Timestamp":1488793268598,"Timezone":330,"Version":"1.0","pii":{}},{"Data":{"heading":"N","loc":"false","loc1":"16.032425","loc2":"80.770587","loc3":"false","speed":"10"},"EventID":"Location","PDID":"skga06031430gedvcl1pdid2367","Timestamp":1488793268598,"Timezone":330,"Version":"1.1","pii":{}},{"Data":{"xvalue":"1.1","yvalue":"1.2","zvalue":"2.2"},"EventID":"AccelerometerInfo","PDID":"skga06031430gedvcl1pdid2367","Timestamp":1488793268598,"Timezone":330,"Version":"1.0","pii":{}},{"EventID":"FuelLevel","Data":{"value":"50","unit":"percentage"},"Version":"1.0","Timestamp":1488793268598,"PDID":"skga06031430gedvcl1pdid2367","Timezone":330},{"Data":{"unit":"kmph","value":"70"},"EventID":"VehicleSpeed","PDID":"skga06031430gedvcl1pdid2367","Timestamp":1488793268598,"Timezone":330,"Version":"1.0","pii":{}}]} 

任何方式我可以将此字符串unixtimestamp转换为标准时间或我可以使用bigint这些柱NS?

+0

你在说什么领域呢?请在JSON中提供它们的名称和定义 –

回答

0
  1. 如果你正在谈论时间戳时区,那么你可以将它们定义为INT /大int型。
    如果你看看他们的定义,你会看到,有没有限定词(“)周围的值,因此它们是数字类型的JSON文档中:

    ‘时间戳’:1488793268598”,时区“:330


create external table myjson 
(
    uploadTimeStamp string 
    ,PDID   string 

    ,data   array 
        < 
         struct 
         < 
          Data:struct 
          < 
           unit:string 
           ,value:string 
           ,heading:string 
           ,loc3:string 
           ,loc:string 
           ,loc1:string 
           ,loc4:string 
           ,speed:string 
           ,x:string 
           ,y:string 
           ,z:string 
          > 
          ,EventID:string 
          ,PDID:string 
          ,`Timestamp`:bigint 
          ,Timezone:smallint 
          ,Version:string 
          ,pii:struct<dummy:string> 
         > 
        > 
) 
row format serde 'org.apache.hive.hcatalog.data.JsonSerDe' 
stored as textfile 
location '/tmp/myjson' 
; 

+------------------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
| myjson.uploadtimestamp | myjson.pdid |                                                                                                                                                           myjson.data                                                                                                                                                           | 
+------------------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
|   1486631318873 |   123 | [{"data":{"unit":"rpm","value":"0","heading":null,"loc3":null,"loc":null,"loc1":null,"loc4":null,"speed":null,"x":null,"y":null,"z":null},"eventid":"E1","pdid":"123","timestamp":1486631318873,"timezone":330,"version":"1.0","pii":{"dummy":null}},{"data":{"unit":null,"value":null,"heading":"N","loc3":"false","loc":"14.022425","loc1":"78.760587","loc4":"false","speed":"10","x":null,"y":null,"z":null},"eventid":"E2","pdid":"123","timestamp":1486631318873,"timezone":330,"version":"1.1","pii":{"dummy":null}},{"data":{"unit":null,"value":null,"heading":null,"loc3":null,"loc":null,"loc1":null,"loc4":null,"speed":null,"x":"1.1","y":"1.2","z":"2.2"},"eventid":"E3","pdid":"123","timestamp":1486631318873,"timezone":330,"version":"1.0","pii":{"dummy":null}},{"data":{"unit":"percentage","value":"50","heading":null,"loc3":null,"loc":null,"loc1":null,"loc4":null,"speed":null,"x":null,"y":null,"z":null},"eventid":"E4","pdid":"123","timestamp":1486631318873,"timezone":330,"version":"1.0","pii":null},{"data":{"unit":"kmph","value":"70","heading":null,"loc3":null,"loc":null,"loc1":null,"loc4":null,"speed":null,"x":null,"y":null,"z":null},"eventid":"E5","pdid":"123","timestamp":1486631318873,"timezone":330,"version":"1.0","pii":{"dummy":null}}] | 
+------------------------+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 

  1. 即使您已将时间戳定义为字符串,仍然可以在将它用于需要bigint的函数中之前将其转换为bigint。

    投(`Timestamp`为BIGINT)


hive> with t as (select '0' as `timestamp`) select from_unixtime(`timestamp`) from t; 

FAILED: SemanticException [Error 10014]: Line 1:45 Wrong arguments 'timestamp': No matching method for class org.apache.hadoop.hive.ql.udf.UDFFromUnixTime with (string). Possible choices: FUNC(bigint) FUNC(bigint, string) FUNC(int) FUNC(int, string)

hive> with t as (select '0' as `timestamp`) select from_unixtime(cast(`timestamp` as bigint)) from t; 
OK 
1970-01-01 00:00:00 
相关问题