2016-06-13 14 views
0

google-bigqueryにアップロードするための有効なavroファイルを作成しようとしています。有効なAvro形式のファイルnodejsを作成するには

var avro = require('node-avro-io').DataFile.AvroFile(); 
var schema = { 
      "name": "data", 
      "type": "record", 
      "fields": [ 
       {"name":"key","type": "string"}, 
       {"name":"value","type": "string"}, 
       {"name":"flag","type": "boolean"}, 
       {"name":"subrecord","type":"record","fields":[ 
        {"name":"key","type":"string"}, 
        {"name":"value","type":["string","int","null"]} 
       ]} 
      ] 
}; 
var writer = avro.open("myAvroFile.avro", schema, { flags: 'w' , codec: 'deflate'}); 
writer 
    .append({ key:"john", value:"hive", flag: true, subrecord: { key: "preference", value: 2}}) 
    .append({ key:"eric", value:"lola", flag: true, subrecord: { key: "postcode", value: null}}) 
    .end({ key:"fred", value:"wonka", flag: false, subrecord: { key: "city", value: "michigan"}}); 

、ここmyAvroFile.avroです:

Obj�avro.codec�deflate�avro.schema�{"name":"data","type":"record","fields":[{"name":"key","type":"string"},{"name":"value","type":"string"},{"name":"flag","type":"boolean"},{"name":"subrecord","type":"record","fields":[{"name":"key","type":"string"},{"name":"value","type":["string","int","null"]}]}]} �3�ä0�x���A� @0O�)�T�%H4��:�*Uy�>P0��%�05k��n�d�T�������\����I�3�ä0�x� 

が、私はそれが失敗したビッグクエリにそれをアップロードしてみてください。私は以下から解凍したアブロFLIをアップロードしようとすると、

The Apache Avro library failed to parse file 

リンク私は成功する。 https://cloud.google.com/bigquery/docs/yob1900.avro.zip

何故かmyAvroFile.avroは有効ではありませんか? node-avro-ioライブラリを使用して有効なavroファイルを作成するにはどうすればよいですか?

+0

わかりません。あなたがgoogle.comのhuazhangで私にそれを電子メールで送ることができるなら、私は一見することができます。 –

+0

はい、それは問題です。入れ子にされたフィールドを削除すると、うまく動作します。 – dina

答えて

1

コメントのように見えるのは、ごくわずかな制限です。私は答えとして投稿します。スレッド「メイン」org.apache.avro.SchemaParseExceptionで

例外:

は、ここで私がアブロ・ツールを使用して得たエラーメッセージだ「レコードは」定義された名前ではありません。 「サブレコード」フィールドのタイプは、定義された名前または{"タイプ":...}式でなければなりません。

私はavroファイルで遊ぶのに便利なavro-toolsを見つけました。このlinkは、その使い方を説明しています。

"サブレコード"フィールドのタイプフィールドはスキーマである必要があります。

タイプ:スキーマを定義するJSONオブジェクト、または レコード定義(必須)命名JSON文字列アブロspecificationによります。

だから、あなたはこのようにそれを変更する必要があります。私は、埋め込まれたアブロファイルを扱うことができる

+0

ありがとうございます、今すぐ動作します!! – dina

関連する問題