Jaql (pronunciado "chacal") es un procesamiento de datos funcional y lenguaje de consulta más comúnmente utilizado para el procesamiento de consultas JSON en big data.
Paradigma | Funcional |
---|---|
Diseñada por | Vuk Ercegovac ( Google ) |
Apareció por primera vez | 9 de octubre de 2008 |
Lanzamiento estable | 0.5.1 / 12 de julio de 2010 |
Lenguaje de implementación | Java |
SO | Multiplataforma |
Licencia | Licencia Apache 2.0 |
Sitio web | código |
Implementaciones importantes | |
IBM BigInsights |
Comenzó como un proyecto de código abierto en Google [1], pero la última versión fue el 2010-07-12. IBM [2] lo asumió como lenguaje principal de procesamiento de datos para su paquete de software Hadoop BigInsights .
Aunque se ha desarrollado para JSON , admite una variedad de otras fuentes de datos como CSV , TSV , XML .
Una comparación [3] con otros lenguajes de consulta de BigData como PIG Latin y Hive QL ilustra los aspectos de rendimiento y usabilidad de estas tecnologías.
Jaql admite [4] la evaluación diferida , por lo que las expresiones solo se materializan cuando es necesario.
Sintaxis
El concepto básico de Jaql es
fuente -> operador ( parámetro ) -> sumidero ;
donde un sumidero puede ser una fuente para un operador aguas abajo. Por lo general, un programa Jaql tiene que seguir la estructura, expresando un gráfico de procesamiento de datos :
fuente -> operador1 ( parámetro ) -> operador2 ( parámetro ) -> operador2 ( parámetro ) -> operador3 ( parámetro ) -> operador4 ( parámetro ) -> sumidero ;
Más comúnmente por razones de legibilidad, los programas Jaql se separan después de la flecha, como también es un modismo común en Twitter Scalding :
fuente -> operador1 ( parámetro ) -> operador2 ( parámetro ) -> operador2 ( parámetro ) -> operador3 ( parámetro ) -> operador4 ( parámetro ) -> sumidero ;
Operadores principales [5]
Expandir
Utilice la expresión EXPAND para aplanar matrices anidadas. Esta expresión toma como entrada una matriz de matrices anidadas [[T]] y produce una matriz de salida [T], al promover los elementos de cada matriz anidada a la matriz de salida de nivel superior.
Filtrar
Utilice el operador FILTER para filtrar elementos de la matriz de entrada especificada. Este operador toma como entrada una matriz de elementos de tipo T y genera una matriz del mismo tipo, reteniendo aquellos elementos para los que un predicado se evalúa como verdadero. Es el equivalente Jaql de la cláusula WHERE de SQL . Ejemplo:
data = [ { nombre : "Jon Doe" , ingresos : 20000 , gerente : falso }, { nombre : "Vince Wayne" , ingresos : 32500 , gerente : falso }, { nombre : "Jane Dean" , ingresos : 72000 , gerente : verdadero }, { nombre : "Alex Smith" , ingresos : 25000 , gerente : falso } ];datos -> filtro $ . gerente ;[ { "income" : 72000 , "manager" : true , "name" : "Jane Dean" } ]datos -> filtro $ . ingresos < 30000 ;[ { "income" : 20000 , "manager" : false , "name" : "Jon Doe" }, { "income" : 25000 , "manager" : false , "name" : "Alex Smith" } ]
Grupo
Utilice la expresión GROUP para agrupar una o más matrices de entrada en una clave de agrupación y aplica una función agregada por grupo.
Entrar
Utilice el operador JOIN para expresar una unión entre dos o más matrices de entrada. Este operador admite varios tipos de combinaciones, incluidas las combinaciones natural, exterior izquierda, exterior derecha y exterior.
Clasificar
Utilice el operador CLASIFICAR para ordenar una entrada por uno o más campos.
Cima
La expresión TOP selecciona los primeros k elementos de su entrada. Si se proporciona un comparador, la salida es semánticamente equivalente a ordenar la entrada y luego seleccionar los primeros k elementos.
Transformar
Utilice el operador TRANSFORM para realizar una proyección o para aplicar una función a todos los elementos de una salida.