2012-04-16 10 views
5

एवीआरओ के लिए काफी नया है इसलिए कृपया कुछ भी याद आ रही है, तो क्षमा करें। क्या कोई एवीआरओ वैधता/कमांडलाइन उपयोगिता है जो एवीआरओ स्कीमा के खिलाफ इनपुट मान्य करती है? या शायद यह इंगित करता है कि त्रुटि जेसन इनपुट में कहां है।एवीआरओ सत्यापन

उत्तर

4

ऐसा नहीं है कि मुझे पता है। मैंने यह छोटी पायथन लिपि लिखी है जो आपको बताएगी कि क्या एक जेसन फ़ाइल स्कीमा से मेल खाती है, लेकिन यह आपको नहीं बताएगी जहां त्रुटि है यदि कोई है तो त्रुटि है।

यह 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

स्क्रिप्ट के लिए धन्यवाद ... इसे आजमाएगा। लेकिन तथ्य यह है कि वास्तविक समस्या को इंगित करने वाले कुछ भी नहीं हैं। – airboss

+0

@Anup आपको स्कीमा और इनपुट को टुकड़ों में तोड़ना होगा और उन हिस्सों को मान्य करना होगा। रिकॉर्डस्केमा को तोड़ना काफी आसान है, लेकिन यदि JSON इनपुट अमान्य है, तो यह जानना मुश्किल है कि इसे कैसे तोड़ना है। यदि आपके पास कोई भी सुझाव हो, मुझे बताएं। – kojiro

1

मैं आपके सवाल का यकीन नहीं है समझ में आता है: के बाद से एवरो स्कीमा जब एवरो डेटा संसाधित अनिवार्य है, यह हमेशा मूल रूप से डिफ़ॉल्ट रूप से मान्य है। एक और तरीका रखो, एवरो को पार्स करने का कार्य आवश्यकतानुसार इसे मान्य करेगा।

दुर्भाग्यवश, यह देखते हुए कि एवरो डेटा में बहुत कम मेटाडेटा है, सभी असंगत परिवर्तन अनिवार्य रूप से डेटा भ्रष्टाचार होंगे; और आप अच्छी तरह से कचरा हो सकता है। ऐसा इसलिए है क्योंकि कोई फील्ड आईडी या विभाजक नहीं हैं: स्कीमा का क्या पालन करना चाहिए इसके आधार पर सभी डेटा का अर्थ है। अनावश्यकता की कमी डेटा को बहुत कॉम्पैक्ट बनाती है, लेकिन इसका मतलब यह भी है कि यहां तक ​​कि सबसे छोटा डेटा भ्रष्टाचार भी संपूर्ण डेटा स्ट्रीम बेकार कर सकता है।

+0

मैं जो कह रहा हूं उसे प्राप्त करता हूं। लेकिन एवरो अपवाद (स्कीमा के साथ इनपुट विसंगति के मामले में) अस्पष्ट हैं और इनपुट में वास्तविक समस्या को बिल्कुल इंगित नहीं करते हैं। शायद, कुछ और उपयोगकर्ता के अनुकूल के लिए खोज रहे हैं। – airboss

+0

आह, हाँ, समझा। यद्यपि आप शायद एवरो टीम, wrt डिफ़ॉल्ट पार्सर में सुधार का सुझाव दे सकते हैं। मैं उन त्रुटियों में सहमत हूं जो उपयोगी नहीं हैं ...: - / – StaxMan

1

मैंने जावास्क्रिप्ट के लिए एक एवरो सत्यापनकर्ता बनाया है जिसे आप JSON पर चला सकते हैं। यह अभी तक एवरो रिलीज का हिस्सा नहीं है, लेकिन इसे जल्द ही किया जाना चाहिए। आप पैच को https://issues.apache.org/jira/browse/AVRO-485 पर पा सकते हैं।

संबंधित मुद्दे