Soy bastante nuevo en AVRO, por favor disculpe si me falta algo obvio. ¿Existe una utilidad de validador/línea de comandos AVRO que valide la entrada en un esquema AVRO? O probablemente apunta a dónde está el error en la entrada json.Validación de AVRO
Respuesta
No es que yo sepa. Escribí este pequeño script de python que le dirá si un archivo json coincide con un esquema, pero no le dirá donde es el error si hay alguno.
Depende del 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)
No estoy seguro de que su pregunta tiene sentido: desde Avro esquema es obligatorio cuando el tratamiento de datos Avro, siempre es básicamente validado por defecto. Dicho de otra manera, el acto de analizar Avro necesariamente lo validará.
Desafortunadamente, dado que hay muy pocos metadatos en los datos de Avro, todos los cambios incompatibles serán esencialmente datos corruptos; y es muy posible que solo consigas basura. Esto porque no hay identificadores de campo o separadores: todos los datos se interpretan en función de lo que Schema dice que debe seguir. Esta falta de redundancia hace que los datos sean muy compactos, pero también significa que incluso la corrupción de datos más pequeña puede hacer que todo el flujo de datos sea inútil.
entiendo lo que dices. Pero las excepciones Avro (en caso de desajuste de entrada con el esquema) son vagas y no apuntan exactamente al problema real en la entrada. Probablemente, buscando algo más amigable para el usuario. – airboss
Ah, sí, entendido. Aunque probablemente podrías sugerir mejoras al equipo avro, analizador predeterminado wrt. Estoy de acuerdo en que los errores tienden a ser menos útiles ...: - / – StaxMan
Hice un validador de Avro para JavaScript que se puede ejecutar en JSON. Todavía no es parte de una versión de Avro, pero debería estar comprometida pronto. Puede encontrar el parche al https://issues.apache.org/jira/browse/AVRO-485.
- 1. implementación Python de avro lento?
- 2. Uso de apache avro para reflejar
- 3. ¿Cómo anidar los registros en un esquema de Avro?
- 4. Lectura de un archivo Avro simple desde HDFS
- 5. Cómo codificar/decodificar mensajes Kafka usando el codificador binario Avro?
- 6. Pregunta poblar los registros anidados en Avro utilizando un GenericRecord
- 7. validación jQuery validación personalizada sin agregar validación de espacio
- 8. Un trabajo de reducción de mapas con entrada de texto sin formato y salida avro
- 9. condicional de validación usando Fluido Validación
- 10. Validación de frijol VS validación JSF
- 11. múltiples campos de validación utilizando Validación remoto
- 12. reglas de validación personalizadas validación Fluido
- 13. Validación de WPF: Borrado de todos los errores de validación
- 14. Validación de Jquery: ¿muestra el resumen de validación durante la validación?
- 15. Validación condicional usando el complemento de validación de JQuery
- 16. Validación de primavera vs validación de Hibernate usando la anotación
- 17. Validación de jQuery: sobrescritura del método de validación central
- 18. Validación de objetos PHP
- 19. Validación de Javax
- 20. Validación de PowerShell PSCredential
- 21. FOSUserBundle validación de contraseña
- 22. Validación de formulario
- 23. Validación Resumen de Colecciones
- 24. Validación de moneda
- 25. Validación de números decimales
- 26. Mostrar mensaje de validación
- 27. Estrategia de validación JPA
- 28. cakephp contraseña de validación
- 29. validación dinámica de rieles
- 30. Validación de casilla postal
Gracias por el guión ... lo probaré. Pero el hecho de que no haya nada que apunte al problema real es molestar. – airboss
@Anup Tendría que dividir el esquema y la entrada en fragmentos y validar esos fragmentos. Romper un RecordSchema es bastante fácil, pero si la entrada JSON no es válida, es difícil saber cómo dividirla. Si tiene alguna sugerencia, hágamelo saber. – kojiro