2017-04-07 7 views
0

J'ai essayé le code suivant dans Avro IDL qui fait référence au type logique timestamp-millis et cela ne fonctionne pas.Comment utiliser les types logiques dans Avro IDL?

Y a-t-il une importation requise pour utiliser les types logiques dans Avro IDL? Ou les types logiques ne sont-ils pas utilisables, et j'ai besoin d'utiliser le type primitif (long dans ce cas) à la place?

protocol test { 
    record test { 
     timestamp-millis time; 
    } 
} 

Résultats dans:

Exception in thread "main" org.apache.avro.compiler.idl.ParseException: Undefined name 'timestamp', at line 3, column 9 

Cela fonctionne bien sûr:

protocol test { 
    record test { 
     long time; 
    } 
} 

Répondre

0

LogicalType horodatage-Millis est utilisé avec le type à long, de sorte que vous pouvez utiliser le schéma comme celui-ci:

{ 
    "type" : "record", 
    "name" : "Test", 
    "fields" : [ { 
    "name" : "time", 
    "type" : { 
     "type" : "long", 
     "logicalType" : "timestamp-millis" 
    } 
    }] 
} 
+0

Merci, cela est exact, mais je demandais au sujet IDL plutôt que des schémas JSON – arosca

1

Vous pouvez utiliser un générique annotation:

protocol test { 
    record test { 
     @logicalType("timestamp-millis") 
     long time; 
    } 
} 

Il y a en fait aussi un raccourci que vous pouvez utiliser pour timestamp-millis et une poignée d'autres types logiques (la documentation n'a pas encore été publié, voir here pour la liste complète des alias):

protocol test { 
    record test { 
     timestamp_ms time; 
    } 
} 
+0

les deux approches de travail, merci! – arosca