2017-01-20 2 views
0

Salut J'ai un schéma avro avec un tableau de struct et je suis capable de sauvegarder des données comme avro. mais lors de la récupération des données à partir deimpossible d'obtenir des données avro pour array <struct <string, string >> dans les lignes

array<struct<string, string>> 

Je suis incapable d'obtenir des lignes. Toutes les données que je reçois en une seule ligne.

ici est la définition de table

CREATE EXTERNAL TABLE meterevents ROW FORMAT SERDE org.apache.hadoop.hive.serde2.avro.AvroSerDe' STORED as INPUTFORMAT org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' LOCATION '/......' TBLPROPERTIES ('avro.schema.url'='/..../schema.avsc');

structure de la table de ruche

nametype    struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>  from deserializer 
 
names     struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>> from deserializer 
 
enddeviceeventdetails struct<enddeviceeventdetailsname:string,enddeviceeventdetailsvalue:string>  from deserializer 
 
enddeviceevent   struct<mrid:string,createddatetime:string,issuerid:string,issuertrackingid:string,reason:string,severity:string,userid:string,asset:struct<assetmrid:string,assetnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>,enddeviceeventdetails:array<struct<enddeviceeventdetailsname:string,enddeviceeventdetailsvalue:string>>,enddeviceeventtype:string,enddeviceeventnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>,status:struct<statusdatetime:string,statusreason:string,statusremark:string,statusvalue:string>,usagepoint:struct<usagepointmrid:string,usagepointnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>>  from deserializer 
 
enddeviceeventtype  struct<enddeviceeventtypemrid:string,enddeviceeventtypedomain:string,enddeviceeventtypeeventoraction:string,enddeviceeventtypesubdomain:string,type:string,enddeviceeventtypenames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>  from deserializer 
 
header     struct<noun:string,context:string,verb:string,value:string,source:string,timestamp:string,correlationid:string,name:string,messageid:string,property:struct<propertyname:array<string>,propertyvalue:array<string>>> from deserializer 
 
payload     struct<enddeviceevents:array<struct<mrid:string,createddatetime:string,issuerid:string,issuertrackingid:string,reason:string,severity:string,userid:string,asset:struct<assetmrid:string,assetnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>,enddeviceeventdetails:array<struct<enddeviceeventdetailsname:string,enddeviceeventdetailsvalue:string>>,enddeviceeventtype:string,enddeviceeventnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>,status:struct<statusdatetime:string,statusreason:string,statusremark:string,statusvalue:string>,usagepoint:struct<usagepointmrid:string,usagepointnames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>>>,enddeviceeventtype:array<struct<enddeviceeventtypemrid:string,enddeviceeventtypedomain:string,enddeviceeventtypeeventoraction:string,enddeviceeventtypesubdomain:string,type:string,enddeviceeventtypenames:array<struct<name:string,nametype:struct<nametypedescription:string,nametypename:string,nametypeauthority:struct<nametypeauthorityname:string,nametypeauthoritydescription:string>>>>>>>

J'utilise « LATERAL VIEW explo de » option dans ma requête

select eddetails.enddeviceeventdetailsname, \t eddetails.enddeviceeventdetailsvalue 
 
FROM meterevents_tmp 
 
LATERAL VIEW explode(payload.enddeviceevents.enddeviceeventdetails) ed AS eddetails 
 
limit 1;

mais je reçois les données en ligne unique.

enddeviceeventdetailsname  enddeviceeventdetailsvalue 
 
["EventSequenceNumber","EventSequenceNumber","EventSequenceNumber","EventSequenceNumber"]  ["683","684","685","686"

Je voudrais avoir ces données comme

enddeviceeventdetailsname  enddeviceeventdetailsvalue 
 
EventSequenceNumber    683 
 
EventSequenceNumber    684 
 
EventSequenceNumber    685 
 
EventSequenceNumber    686

J'ai lu l'autre question sur le stackoverflow: Exploding Array of Struct using HiveQL

Mais impossible d'obtenir la sortie attendue. Depuis dans ce poste sa table externe de ruche et pas un serde où je suis incapable de spécifier "MAP CLÉS TERMINÉES PAR" et "ARTICLES DE COLLECTE TERMINÉS PAR"

toute aide est très appréciée.

Merci

Répondre

0

j'ai pu résoudre ce ---

je n'étais pas en mesure d'obtenir la sortie en lignes parce que la

array<struct<string,string>> 

faisait partie du tableau parent

array<struct<array<struct<string, string>>> 

J'ai mis à jour ma requête et j'ai utilisé l'explod imbriquée

select eddetails.enddeviceeventdetailsname, eddetails.enddeviceeventdetailsvalue from (select ede.enddeviceeventdetails FROM meterevents_tmp LATERAL VIEW explode(payload.enddeviceevents) e AS ede) t LATERAL VIEW explode(t.enddeviceeventdetails) ed AS eddetails limit 10; 

je suis arrivé la sortie désirée -

enddeviceeventdetailsname  enddeviceeventdetailsvalue 
 
EventSequenceNumber  683 
 
EventSequenceNumber  684 
 
EventSequenceNumber  685 
 
EventSequenceNumber  686