2014-06-17 66 views
1

我想使用avro-tools將avro avdl文件(http://avro.apache.org/docs/1.7.6/idl.html#example)轉換爲avro模式文件(example.avsc)。 我下載的Avro工具1.7.6和1.6.3avro-tools將avdl轉換爲avsc不會生成正確的avsc

example.avdl

/** 
* An example protocol in Avro IDL 
*/ 
@namespace("org.apache.avro.test") 
protocol Simple { 

    @aliases(["org.foo.KindOf"]) 
    enum Kind { 
    FOO, 
    BAR, // the bar enum value 
    BAZ 
    } 

    fixed MD5(16); 

    record TestRecord { 
    @order("ignore") 
    string name; 

    @order("descending") 
    Kind kind; 

    MD5 hash; 

    union { MD5, null} @aliases(["hash"]) nullableHash; 

    array<long> arrayOfLongs; 
    } 

    error TestError { 
    string message; 
    } 

    string hello(string greeting); 
    TestRecord echo(TestRecord `record`); 
    int add(int arg1, int arg2); 
    bytes echoBytes(bytes data); 
    void `error`() throws TestError; 
    void ping() oneway; 
} 

example.avsc產生

{ 
    "protocol" : "Simple", 
    "namespace" : "org.apache.avro.test", 
    "doc" : "* An example protocol in Avro IDL", 
    "types" : [ { 
    "type" : "enum", 
    "name" : "Kind", 
    "symbols" : [ "FOO", "BAR", "BAZ" ], 
    "order" : "descending", 
    "aliases" : [ "org.foo.KindOf" ] 
    }, { 
    "type" : "fixed", 
    "name" : "MD5", 
    "size" : 16 
    }, { 
    "type" : "record", 
    "name" : "TestRecord", 
    "fields" : [ { 
     "name" : "name", 
     "type" : { 
     "type" : "string", 
     "order" : "ignore" 
     } 
    }, { 
     "name" : "kind", 
     "type" : "Kind" 
    }, { 
     "name" : "hash" ... 

我用下面的命令在我的Mac上生成它

Java的罐子Avro的工具-1.6.3.jar IDL example.avdl (我都試過1.6.3和1.7.6)

上面生成的模式文件無效,因爲它沒有名稱,類型和字段作爲頂級屬性。

這裏有什麼不對嗎?

感謝

+0

「上述生成的模式文件無效,因爲它沒有名稱,類型和字段作爲頂級屬性。」 - 據我所知,所有屬性都存在於正確的級別。 TestRecord內存在「名稱」等等..你還期待他們嗎? – ayush

回答

4

中的IDL命令生成的Avro協議文件(.avpr) - 生成schematas(.avsc),你要使用的idl2schemata命令,這需要一個輸入IDL和一個可選的輸出目錄作爲參數(如果未提供,將使用當前目錄),並根據IDL中的類型生成一個或多個文件,例如:

java -jar avro-tools-1.7.7.jar idl2schemata example.avdl . 
相關問題