2016-06-13 3 views
0

google-bigquery에 업로드 할 올바른 avro 파일을 만들려고합니다.유효한 Avro 형식 파일 nodejs를 만드는 방법

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� 

하지만 난 큰 쿼리에 업로드하려고하면 실패합니다 :

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입니다

The Apache Avro library failed to parse file 

나는 다음에서 FLI 브로 압축을 푼를 업로드하려고 할 때 나는 성공한다. 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에서

예외 :

는 여기에 내가 브로-도구를 사용하여받은 오류 메시지의 "기록"정의 된 이름이 아닙니다. "하위 레코드"필드의 유형은 정의 된 이름이거나 { "type": ...} 표현식이어야합니다.

나는 avro 파일로 놀기를 위해 avro-tools를 찾아 냈다. 이 link은 사용 방법을 설명합니다.

"하위 레코드"필드의 유형 필드는 스키마 여야합니다. 아 브로 specification에 따르면

형식 : JSON 객체 스키마를 정의하거나 JSON 문자열 (필수) 기록 정의의 이름을 지정.

그래서 당신은 다음과 같이 변경한다 :

+0

덕분에 이제 작동합니다 !! – dina

관련 문제