Q Language - Consultas funcionales
Las consultas funcionales (dinámicas) permiten especificar nombres de columna como símbolos para columnas típicas q-sql select / exec / delete. Resulta muy útil cuando queremos especificar nombres de columnas de forma dinámica.
Las formas funcionales son:
?[t;c;b;a] / for select
![t;c;b;a] / for update
dónde
t es una mesa;
a es un diccionario de agregados;
bla frase escrita; y
c es una lista de restricciones.
Nota -
Todas q entidades en a, by c debe ser referenciado por su nombre, es decir, como símbolos que contienen los nombres de las entidades.
Las formas sintácticas de seleccionar y actualizar se analizan en sus formas funcionales equivalentes por el q intérprete, por lo que no hay diferencia de rendimiento entre las dos formas.
Selección funcional
El siguiente bloque de código muestra cómo usar functional select -
q)t:([]n:`ibm`msft`samsung`apple;p:40 38 45 54)
q)t
n p
-------------------
ibm 40
msft 38
samsung 45
apple 54
q)select m:max p,s:sum p by name:n from t where p>36, n in `ibm`msft`apple
name | m s
------ | ---------
apple | 54 54
ibm | 40 40
msft | 38 38
Ejemplo 1
Comencemos con el caso más sencillo, la versión funcional de “select from t” se verá como -
q)?[t;();0b;()] / select from t
n p
-----------------
ibm 40
msft 38
samsung 45
apple 54
Ejemplo 2
En el siguiente ejemplo, usamos la función de enlist para crear singletons para asegurar que las entidades apropiadas sean listas.
q)wherecon: enlist (>;`p;40)
q)?[`t;wherecon;0b;()] / select from t where p > 40
n p
----------------
samsung 45
apple 54
Ejemplo 3
q)groupby: enlist[`p] ! enlist `p
q)selcols: enlist [`n]!enlist `n
q)?[ `t;(); groupby;selcols] / select n by p from t
p | n
----- | -------
38 | msft
40 | ibm
45 | samsung
54 | apple
Ejecutivo funcional
La forma funcional de exec es una forma simplificada de select.
q)?[t;();();`n] / exec n from t (functional form of exec)
`ibm`msft`samsung`apple
q)?[t;();`n;`p] / exec p by n from t (functional exec)
apple | 54
ibm | 40
msft | 38
samsung | 45
Actualización funcional
La forma funcional de actualización es completamente análoga a la de select. En el siguiente ejemplo, el uso de enlist es para crear singletons, para asegurar que las entidades de entrada sean listas.
q)c:enlist (>;`p;0)
q)b: (enlist `n)!enlist `n
q)a: (enlist `p) ! enlist (max;`p)
q)![t;c;b;a]
n p
-------------
ibm 40
msft 38
samsung 45
apple 54
Eliminación funcional
La eliminación funcional es una forma simplificada de actualización funcional. Su sintaxis es la siguiente:
![t;c;0b;a] / t is a table, c is a list of where constraints, a is a
/ list of column names
Tomemos ahora un ejemplo para mostrar cómo funciona la eliminación funcional:
q)![t; enlist (=;`p; 40); 0b;`symbol$()]
/ delete from t where p = 40
n p
---------------
msft 38
samsung 45
apple 54