iidec / Integra.Space.Language-upstream

Lenguaje de consulta que permite el acceso a datos en tiempo real
0 stars 0 forks source link

Streams (sesión) / apply repetition #49

Open marianogenovese opened 8 years ago

marianogenovese commented 8 years ago

Para definir la condición de finalización de un stream (sesión) es necesario definir la palabra reservada repeat que permita declarar el comportamiendo de un stream. Para los streams de sesión, la repetición es importante puesto que podriamos tener los casos:

apply_repeat = 'apply', 'repeat', ' ', unsigned_int_value

@OscarCanek por favor adjuntemos a este issue la gramatica del select para modificarlo.

OscarCanek commented 7 years ago

Gramática

eql query = source definition, where, (select | (apply window, group by, select, order by));

=======================================================

source definition = from | join;

from = 'from', identifier or alias;

join = ('left' | 'right' | 'cross' | 'inner' | Ɛ), 'join', identifier or alias, where, 'with', identifier or alias | where, 'on', logic expression for on condition, 'timeout', datetimevalue;

=======================================================

where = ('where', logic expression) | Ɛ;

=======================================================

apply window = 'apply', 'window', 'of', datetimevalue;

=======================================================

group by = ('group', 'by', list of groups) | Ɛ;

list of groups = (list of groups, ',', values, 'as', identifier) | values, 'as', identifier;

=======================================================

select = 'select', top, list of columns;

top = 'top', integer | Ɛ;

list of columns = (list of columns, ',', projection value, 'as', identifier) | projection value, 'as', identifier;

=======================================================

order by = ('order', 'by', ('asc' | 'desc' | Ɛ), list of identifiers) | Ɛ;

list of identifiers = (list of identifiers, ',', identifier) | identifier

=======================================================

identifier or alias = identifier | (identifier, 'as' identifier);
OscarCanek commented 7 years ago

La extensión reactive de este sería Repeat o Replay?

Repeat

image

Replay

image

OscarCanek commented 7 years ago

el apply repeat sustituye al apply window o se ponen juntos?, de ponerse juntos cual va primero?

marianogenovese commented 7 years ago

La propuesta es conceptual, no tiene, al menos inicialmente, relación con las funciones de Rx. Mira el issue #45 para entender el porque de este argumento.

OscarCanek commented 7 years ago

En un flujo indefinido de eventos, ¿Cómo debería comportarse el repeat?, ¿Qué repetiría si el flujo de eventos es indefinido?

marianogenovese commented 7 years ago

En el issue #45 comento eso.

OscarCanek commented 7 years ago

Solo para tener el enlace al comentario, abajo lo coloco:

commentario

OscarCanek commented 7 years ago

No tengo claro lo siguiente: el repeat es sobre los valores o sobre la ejecución de la consulta? porque segun el caso B

Caso B. Quiero saber por 3 veces con ventanas de 5 segundos, un conteo de registros en una fuente. Aquí el usuario no debe poner duración (apply) sino debe poner repetición (apply) y aplicar una ventana de tiempo (apply), si el usuario pone duración el comportamiento cambia.

Eso quiere decir que el conteo no va a ser sobre los mismos eventos, es decir, va a tomar tres conteos consecutivos antes de terminar la ejecución.

marianogenovese commented 7 years ago

Ejemplo:

  from visa   
 select count(tarjeta)   
  group by tarjeta   
  apply repetition 3   
  apply window '00:00:05'   

Seg: 1 al 5: Llegan 2 eventos, cuenta 2 y genera un registro con 2 Seg: 5 al 10: Llegan 4 eventos, cuenta 4 y genera un registro con 4 Seg: 10 al 15: Llegan eventos, cuenta 0 y genera un registro con 0 Fin del stream.

OscarCanek commented 7 years ago

Actualización de la gramática

eql query = source definition, where, (select | (apply window, group by, select, order by)), (apply extensions | Ɛ);

apply extensions = (apply extensions, apply extension) | apply extension;

apply extension = appy duration | apply repetition

apply duration = 'apply', 'duration', timespan value

apply repetition = 'apply', 'repeat', unsigned int value
OscarCanek commented 7 years ago

Prueba inicial

image

OscarCanek commented 7 years ago

Cambio