2012-04-16 19 views
5

Khá mới đối với AVRO vì vậy xin lỗi nếu thiếu bất kỳ điều gì rõ ràng. Có một trình xác thực AVRO/tiện ích dòng lệnh xác thực đầu vào dựa vào lược đồ AVRO không? Hoặc có thể chỉ đến nơi lỗi trong đầu vào json.Xác thực AVRO

Trả lời

4

Không phải là tôi biết. Tôi đã viết kịch bản python nhỏ này sẽ cho bạn biết nếu một tập tin json phù hợp với một lược đồ, nhưng nó sẽ không cho bạn biết trong đó lỗi là nếu có.

Tùy thuộc vào số Python avro library.

#!/usr/bin/env python 

from avro.io import validate 
from avro.schema import parse 
from json import loads 
from sys import argv 

def main(argv): 
    valid = set() 
    invalid_avro = set() 
    invalid_json = set() 

    if len(argv) < 3: 
     print "Give me an avro schema file and a whitespace-separated list of json files to validate against it." 
    else: 
     schema = parse(open(argv[1]).read()) 
     for arg in argv[2:]: 
      try: 
       json = loads(open(arg, 'r').read()) 
       if validate(schema, json): 
        valid.add(arg) 
       else: 
        invalid_avro.add(arg) 
      except ValueError: 
       invalid_json.add(arg) 
    print ' Valid files:\n\t' + '\n\t'.join(valid) 
    print 'Invalid avro:\n\t' + '\n\t'.join(invalid_avro) 
    print 'Invalid json:\n\t' + '\n\t'.join(invalid_json) 

if '__main__' == __name__: 
    main(argv) 
+0

Cảm ơn kịch bản ... sẽ dùng thử. Nhưng thực tế là không có gì trỏ đến vấn đề thực tế đang gây ra lỗi. – airboss

+0

@Anup Bạn sẽ phải chia nhỏ lược đồ và đầu vào thành các khối và xác nhận các khối đó. Phá vỡ một RecordSchema là đủ dễ dàng, nhưng nếu đầu vào JSON là không hợp lệ, thật khó để biết làm thế nào để phá vỡ nó lên. Nếu bạn có bất cứ đề nghị, cho tôi biết. – kojiro

1

Tôi không chắc chắn câu hỏi của bạn có ý nghĩa: vì Lược đồ Avro là MANDATORY khi xử lý dữ liệu Avro, nó luôn cơ bản được xác thực theo mặc định. Nói cách khác, hành động phân tích Avro sẽ bằng sự cần thiết xác nhận nó.

Thật không may, với điều kiện là có rất ít siêu dữ liệu trong dữ liệu Avro, tất cả các thay đổi không tương thích về bản chất sẽ bị hỏng dữ liệu; và bạn cũng có thể lấy rác. Điều này bởi vì không có id trường hoặc dấu tách: tất cả dữ liệu được diễn giải dựa trên những gì Schema nói phải tuân theo. Sự thiếu dự phòng này làm cho dữ liệu rất nhỏ gọn, nhưng cũng có nghĩa là thậm chí dữ liệu nhỏ nhất có thể làm cho toàn bộ luồng dữ liệu vô dụng.

+0

Tôi nhận được những gì bạn đang nói. Nhưng ngoại lệ Avro (trong trường hợp đầu vào không phù hợp với lược đồ) là mơ hồ và không chính xác trỏ đến vấn đề thực tế trong đầu vào. Có lẽ, Tìm kiếm một cái gì đó thân thiện hơn với người dùng. – airboss

+0

Ah, vâng, hiểu. Mặc dù bạn có thể có thể đề xuất cải tiến cho nhóm avro, trình phân tích cú pháp mặc định wrt. Tôi đồng ý rằng lỗi có xu hướng không hữu ích ...: - / – StaxMan

1

Tôi đã tạo trình xác thực Avro cho JavaScript mà bạn có thể chạy trên JSON. Nó chưa là một phần của bản phát hành Avro, nhưng nó sẽ sớm được cam kết. Bạn có thể tìm thấy bản vá tại https://issues.apache.org/jira/browse/AVRO-485.