Bases de Dades Avançades: Carlos Arbonés and Juan P. Zaldivar
Bases de Dades Avançades: Carlos Arbonés and Juan P. Zaldivar
1
Contents
1 Data Warehousing 6
1.1 Operational vs Analytical Data . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Single-layer architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.3 Data Sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.4 Definition of Data Warehouse . . . . . . . . . . . . . . . . . . . . . . . . 7
1.5 Data Marts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.6 Two-layer architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.7 Three-layer architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.8 Metadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2 Multidimensional modeling 10
2.1 FASMI test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Real World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.3 Conceptual World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 Types of schemas . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Representation World . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.1 MOLAP: Multidimensional Matrix . . . . . . . . . . . . . . . . . 13
2.4.2 ROLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.4.3 Comparison of Desing Steps: OLTP vs OLAP . . . . . . . . . . . 14
2.4.4 HOLAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
5 Data Quality 30
5.1 Data Conflicts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
2
5.2 Quality Measures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.1 Completeness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.2.2 Accuracy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.3 Timeliness (Freshness) . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.4 Consistency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.2.5 Trade-offs between dimensions . . . . . . . . . . . . . . . . . . . 33
5.3 Quality Rules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.3.1 Restricciones de integridad en RDBMS . . . . . . . . . . . . . . 33
5.3.2 Problems in the rules . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3.3 Fine-tuning imperfections . . . . . . . . . . . . . . . . . . . . . . 34
5.4 Quality improvement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.4.1 Process for Object identification . . . . . . . . . . . . . . . . . . 35
5.4.2 Search space reduction . . . . . . . . . . . . . . . . . . . . . . . . 36
5.4.3 Comparison/Similarity function . . . . . . . . . . . . . . . . . . . 36
3
8.1.2 Managing replicas . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.1.3 Replication Management Configuration . . . . . . . . . . . . . . 56
8.2 (Distributed) Query Processing . . . . . . . . . . . . . . . . . . . . . . . 57
8.2.1 Allocation Selection . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.2.2 Phases of distributed query processing . . . . . . . . . . . . . . . 58
8.3 Bulk Synchronous Parallel Model . . . . . . . . . . . . . . . . . . . . . . 60
8.3.1 Kinds of parallelism . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.3.2 Demand-Driven Pipelining . . . . . . . . . . . . . . . . . . . . . 61
8.3.3 Producer-Driven Pipelining . . . . . . . . . . . . . . . . . . . . . 62
8.4 Measures of Parallelism . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
A Theoretical questions 80
4
C.1 Theoretical questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
C.2 Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
D Data Quality 93
D.1 Problems . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
5
1 Data Warehousing
1.1 Operational vs Analytical Data
Lo primero que tenemos que darnos cuenta es separar entre datos operacionales y datos
analíticos. Los datos operacionales son los del día a día de la empresa, los que uti-
lizamos para gestionar el negocio. Los datos analíticos son los que utilizamos para tomar
decisiones respecto nuestro negocio (son de naturaleza temporal).
• Evolución: para ver el día a día solo nos importan los datos de hoy. En cambio
para tomar decisiones necesitamos datos antiguos y gestionar la evolución que han
sufrido en distintos ámbitos de la empresa.
• Volúmenes de datos: el hecho de guardar datos históricos para analizar su
evolución hace que crezca el volumen de datos.
• Niveles de agregación: Por otro lado, cuando tomamos decisiones no miramos
los datos de un solo cliente sino que miramos los datos agregados. P.e los datos de
nuestros clientes en una cierta región, en un cierto año, etc.
• Actualización: Los datos no tienen porqué estar completamente actualizados. Lo
que nos interesa es ver la evolución histórica y por un dato que falte no pasa nada
grave. En cambio para datos operacionales si que es importante. P.e no podemos
sacar dinero de un banco si no tenemos el saldo de ayer actualizado.
• Tiempo de respuesta: Tenemos muchos datos, lo que impacta al tiempo de
respuesta. Siempre es importante pero a ciertas escalas es más crítico. Menor el
número de usuarios.
• Usuarios: Normalmente, el tipo de usuarios que tenemos en un sistema decision-
al/de análisis son los ejecutivos de la empresa.
• Funcionalidad: Operacional o de análisis.
6
En general ocasiona problemas a largo y corto plazo. Por eso se opta en la mayoria
de los casos por un Data Warehouse.
7
• No necesitan la granularidad más fina. Uso de datos mensuales, trimestrales, etc.
• Permiten una reducción del coste.
El error que podemos cometer con esto es que en lugar de tener un único proyecto
generamos proyectos independientes (Data Mars completamente independientes). La
manera correcta de hacerlo seria no sustituir el DW corporativo por los Data Mars,
sino que además de tener el DW corporativo generar pequeños Data Mars para cada
departamento/proyecto, ya que son más fáciles de gestionar de manera individual y
tienen menos coste.
Por lo tanto lo que hacemos es crear un único repositorio donde cargamos todas
las fuentes después de haberlas limpiado e integrado únicamente una vez. Cuando
tenemos esta única fuente de conocimiento para la empresa, a partir de aquí generamos
las diferentes vistas (Data Mars) para los departamentos/proyectos de análisis que
tengamos.
8
El ETL tiene que extraer todos los datos de las diferentes fuentes, los va a limpiar
(mirar si hay contradicciones entre las diferentes fuentes y cruzar unas con otros y ver
si se pueden complementar), transformar (P.e normalización) y finalmente conciliar,
ponerlos todos juntos y mirar que tengan sentido. Finalmente cargaríamos estos datos
en nuestro almacén de datos, en nuestra fuente única de verdad de la empresa, a partir
de donde definiríamos los Data Mars.
1.8 Metadata
Son datos más abstractos, datos que nos permiten interpretar otros datos. No hay que
confundirlo con derivados, sumarizados o agregados, que son datos que se obtienen a
partir de otros datos. Los metadatos son datos que hablan de otros datos. Algunos
ejemplos de metadatos son: fuentes de datos, documentación general, esquemas, etc.
9
2 Multidimensional modeling
Una de las herramientas más utilizadas son las hojas de cálculo. Sirven muy bien para
ciertas tareas pero tienen limitaciones.
• No gestionan meta-datos: Las filas y columnas se identifican con números y
letras pero estos no tienen significado y su interpretación y operación puede resultar
complicado. Tambíen su consulta.
• Espacio limitado: El número de filas y columnas es limitado y por lo tanto el
número de celdas también. En la practica es limitado.
• La posición de los datos limita las operaciones que podemos hacer.
• Operaciones de agregación es limitada, como p.e. querer agrupar clientes por
distritos, el tiempo en meses y años, etc.
Las hojas de cálculo solo cumplen las primeras dos características. Permiten solo
3 dimensiones: filas, columnas y hojas. No permiten gestionar meta-datos y por lo tanto
no permiten gestionar información.
Las bases de datos operacionales cumplen la compartición (concurrencia de
diferentes usuarios) y la información (meta-datos mediante el uso de catálogos). La
rapidez depende de las consultas. No están pensadas para hacer análisis, sino para
consultas y modificación. Además no entienden el concepto de multidimensionaldiad.
10
2.2 Real World
• Slice: Fijar un valor en una de las dimensiones. Deshacerse del resto de las dimen-
siones. Si se generaliza se pueden fijar varios valores en varias dimensiones y sería
la operación dice.
• Dice: Se fijan varios valores en varias dimensiones. El resultado es una especie de
dado.
• Sort: Aplicar una ordenación en una de las dimensiones. Por ejemplo poner en
orden alfabético los atributos de esa dimensión.
• Pivot: Reordenar las dimensiones. Los datos del cubo no cambian, solo cambia
como las visualizamos.
• Roll-up: Movernos en las jerarquías de agregación (mapeos/correspondencias entre
elementos de una misma dimensión p.e. Paris y Lyon los juntamos en una sola
etiqueta llamada Francia y agrupamos sus valores). Agrupación de los valores/datos
dependiendo de un mapeo. Llevando esto al extremo podemos juntar los valores de
toda una dimensión de manera que habrá una dimensión menos. Pérdida de detalle.
• Drill-down: Operación contraria de Roll-up. División de elementos en subelemen-
tos según jerarquías de agregación de una misma dimensión. Desglose de los datos.
(p.e Q1 se puede desglosar en Enero, Febrero y Marzo).
• Drill-across: Operación binaria. Se necesitan dos cubos a la entrada de la
operación. Join de cubos en lugar de tablas relacionales. Las dimensiones de los
cubos tienen de coincidir para poder realizar la operación.
• Union: Se requiere que las dimensiones sean las mismas de los cubos de entrada.
Pero los valores de las dimensiones no tienen porque coincidir. Equivalente a la
unión de conjuntos.
• Difference: Equivalente a la diferencia de conjuntos. Quitar las celdas que
coinciden en los cubos de entrada.
11
2.3 Conceptual World
Como se conceptualizan los hipercubos de datos? Hay diferentes maneras de enten-
der los datos conceptualizados, porque se pueden interpretar de formas diferentes.
Una manera de conceptualizar el mundo real es la notación UML.
El modelo multidimensional de los cubos se centra en focalizar la información que nos
interesa. De todas las interrelaciones, nos centramos en las que nos interesa y hacemos
un esquema.
12
2.4 Representation World
Se puede representar de formas diferentes pero siempre interpretables para obtener
información para la toma de decisiones.
2.4.2 ROLAP
(Relational Online Analytical Process)
La solución puede ser usar herramientas relacionales, donde guardar los datos de
los cubos seria en un SGBD relacional y se necesitaría una capa de traducción que
produzca la vista en forma de cubos. Funciona con lenguaje SQL y es fácil de obtener.
El rendimiento de estas herramientas no es de lo más eficiente porque fueron concebidas
para OLTP (Online transactional process) y lo que requerimos son OLAP (Online
Analitical process). Cuando intentamos hacer esto usamos muchos joins, que son una
operación muy costosa.
Star-join schema
En la traducción lo que haríamos es tener una tabla de hechos en el centro donde
guardaríamos todas las celdas y las tablas de dimensión alrededor, una por cada dimen-
sión. La tabla de hechos tiene foreign keys que apuntan a cada una de las dimensiones,
estas llaves forman la primary key de la tabla de hechos. En las dimensiones tendríamos
las jerarquías de agregación pero aplanadas.
Puede haber redundancia en los datos, por ejemplo en una tabla de Time los meses,
trimestres y años se repiten mucho. Lo que se podría hacer es crear 3 tablas aparte y en
13
la de Time solo guardar el día, para que la información no se repita. Pero en este caso
no es una buena idea, ya que la redundancia no es tanto como se puede pensar. Esto
sucede porque la tabla de hechos siempre será de dimensiones mucho mayores que las
tablas de dimensión y dominará el coste y el espacio, por lo tanto no es relevante por el
volumen total que se tiene. Además el número de joins se incrementa. Lo cual también
implica la simplificación del Cube Query (Patron de consulta).
Cube-Query
Los atributos del SELECT di son los mismos que los atributos del ORDER BY y GROUP
BY. Al saber que todas las consultas multidimensionales siguen este mismo patrón de
consulta, esto facilita el trabajo del gestor relacional.
En el caso de diseño OLTP creamos un esquema UML sin ningún tipo de restricción,
cualquier tipo de relación entre las clases con cualquier tipo de multiplicidad, y esto
lo traducimos al modelo relacional. Lo traducimos como ya sabemos: con tablas, llave
primaria y foránea, etc. Finalmente esto se va a un SGBD relacional.
14
Cuando tenemos una tecnología OLAP seguimos un patrón de estrella con la tabla
de hechos en medio y las tablas de dimensiones alrededor, solo se admiten relaciones
1 − − − ∗. No podemos tener cualquier estema UML sino sólo esquemas en formato
estrella. No podemos traducirlo de cualquier manera sino con una tabla de hechos con
una llave foránea para cada una de las dimensiones. Y todo éste se almacena en tablas
relacionales y las consultas se realizan con SQL.
2.4.4 HOLAP
Lo que se hace es mezclar las dos cosas, serialización de matices por un lado y sistemas
relacionales por el otro.
• Los cubos que son más densos (con muchas celdas, sin huecos) los ponemos
con una herramienta MOLAP porque serializar un cubo denso en mucho mejor
porque no deja espacios. Cuando tenemos un cubo más disperso con espacios
utilizaremos ROLAP que no deja vacíos, cuando no hay información no se guarda
la fila.
• Los datos atómicos (datos que no se pueden dividir más) mejor guardarlos
ROLAP ya que son más dispersos pero cuando comencemos agregar los cubos, estos
son mas densos y sale mas a cuenta MOLAP.
• Si tenemos datos que son accedidos muy frecuentemente y sabemos las con-
sultas más utilizadas mejor serializar de forma adiente para recuperarlas de forma
rápida. Las que no tenemos claro cuándo y como se accederán las ponemos con una
herramienta ROLAP.
15
3 Advanced Multidimensional Design
3.1 Algebraic operations
Conjunto de operaciones algebraicas y como pueden operar en un cubo de datos. Como
se transforma la consulta SQL. Hay diversas operaciones:
• Selection (<cube>, <predicate on dimensions>): Nos permite hacer
slices en dice dada una condición en una dimensión.
• Projection (<cube>, <measures left>): -Nos permite eliminar medidas
del cubo.
• Roll-up (<cube>, <destination level>[, <aggregation function>]):
Subir jerarquías de agregación, cuando subimos, como estamos agrupando los
datos tenemos que indicar que función (como es opcional, por defecto es la SUM).
• Drill-Down (<cube>, <destination level>): Bajar la jerarquía de
agreagación.
• Drill-Across (<cube>, <new fact>[,<agreggation function>]):
Nos permite hacer joins entre cubos (como es opcional la función de agregación,
por defecto es la SUM).
• ChangeBase (<cube>, <new base>): Nos permite reordenar las dimensiones
o los datos dentro de las dimensiones. Hay que indicar con qué dimensiones nos
quedamos y el orden de estas. Cuando se usa para eliminar una dimensión esta
debe ser una constante.
16
hace refrencia no tiene atributos (no hay dimension a la que apuntar realmente por
eso). La dejamos parte de la llave primaria de la tabla de hechos.
3. Junk Dimensions: Caso contrario al anterior, lo que tenemos es muchos atributos
dimensionales booleanos o de cierto número pequeño de valores. Para guardarlos,
la primera opción seria hacer una dimensión para cada una de ellos con una
llave foránea a cada una de las dimensiones. No es una buena opción ya que estas
no tienen atributos y estariamos malgastando espacio y tiempo de hacer joins. Otra
opción es ponerlos en la llave primaria pero no poner la llave foránea, sin embargo,
esto hace que la llave primaria crezca sin sentido. La tercera y mejor opción seria
crear una tabla para cada combinación de los atributos en la llave primaria tenemos
llave foránea a esa tabla que tiene un identificador que nosotros creamos. De esta
manera la tabla de hechos no crece tanto. Esta solución tiene ventajas ya que nos
ahorra tiempo en la tabla de hechos y nos permite analizar las combinaciones de los
atributos puestos en la tabla y mirar si hay correlación en los elementos de la tabla.
4. Too large dimensions: Otro caso que puede suceder es que algunas dimensiones
que en general son pequeñas comparadas con la tabla de hechos pueden estallar.
P.e en la tabla de tiempo si ponemos segundos, minutos, horas, durante años. La
solución seria todo lo que hace referencia al tiempo ponerlo en una dimensión y
todo lo de la fecha en otra dimensión. Las consultas serán un poco mas difíciles
por la combinacion de JOIN. La ventaja es que podemos analizar mas fácilmente
el tiempo del día en que se hacen ventas porque solo tenemos que consultar una
sola tabla.
5. Slowly Changing Dimensions: Otro problema que nos podemos encontrar es
que aunque normalmente las dimensiones no cambian, pueden acabar cambiando
por dos razones. La primera porque la realidad puede cambiar (p.e una ciudad
obtiene la independencia de su país) y la segunda son errores humanos (p.e nos
equivocamos de Barcelona). El problema que tenemos es como dejar constancia de
estos cambios. Hay 3 opciones:
• Sobrescribir el valor: opción más sencilla pero perdemos constancia del valor
anterior.
• Añadir una nueva columna donde dejamos constancia del valor anterior.
Si el valor no ha cambiado le ponemos NULL y si ha cambiado le ponemos el
valor anterior. Solo permite reflectar un cambio, a no ser que añadamos muchas
columnas por cada cambio que se realiza.
• Añadir columna de tiempo que nos dice para cada fila hasta que momento
ese valor es válido. Es la opción más complicada pero a la vez la más genérica.
En este caso el tiempo también forma parte de la primary key porque sino
aparecerían repetidos (puede haber dos instancias de la misma primary key
pero no en el mismo instante de tiempo).
6. Aggregation hierarchies: Tendemos a pensar que las jerarquías de agregación
son lineales, pero no es verdad, en general pueden tener cualquier topología. Se
tratan de un grafo donde lo único que se tiene que cumplir es que haya un único
nivel arriba (ALL) y otro nivel que esta abajo de todo que es donde apunta la tabla
de hechos. En medio puede ser lineal pero no tiene porque serlo. Esto no afecta
a la implementación. Podemos explicitarlo en el esquema snowflake o de manera
implícita en el star schema. A nivel de implementación lo único que pasará es que
tendremos mas atributos en la tabla de dimensiones.
7. Conformed hierarchies/dimensions: Cuando tenemos diferentes dimensiones
compartidas en diferentes esquemas de estrella (esquemas de galaxia). Puede ser
que estas estrellas vengan de diferentes fuentes pero deberíamos de conformarlas.
Si tenemos que hacer joins entre ellas y lo que no puede ser es que las tablas
17
sean diferentes. Esta información que vienen de diferentes fuentes la tenemos que
homogeneizar (tenerla de la misma forma) para que todas tablas de hechos puedan
apuntar a la misma dimensión.
Lo que hay que hacer es crear una tabla donde en las filas tenemos las diferentes
tablas de hechos y en las columnas tenemos las diferentes tablas de dimensión.
Haciendo esto podemos ver las dimensiones que comparten y homogeneizar estas.
1
El nivel más bajo normalemente corresponde al que tiene más instancias
18
4 Extract, Transform and Load
Extraer datos desde de una o múltiples fuentes, transformarlas según las necesidades y
cargarlas a otro repositorio de datos. Puede ser por varios motivos:
• Simplemente para guardar los datos. No es lo mismo que un backup porque un
backup se tiene que restaurar pues es una captura instanteanea de los datos y no
es habitual acceder ni transformar los datos.
• Por el uso de herramientas especificas que necesitan una cierta estruc-
tura especifica de los datos (e.g aplicaciones para machine learning) y se necesitan
transformar para el sitio en donde se usaran.
• La integración de datos, tenemos múltiples fuentes y se necesitan usarlas todas
juntas.
• Para asegurar que no se pierden/alteran los datos. Pasa en entornos web,
donde se cambia sin avisar o sin pedirnos permiso. Lo mejor es extraerlos y ponerlos
en donde si tenemos un control.
• Eliminar errores de las fuentes de datos y arreglarlos que sabemos que
existen en todas las fuentes de datos. Aplicar algoritmos de limpieza.
• Corregir/Imputar los valores faltantes. Como en la mayoría de casos no tenemos
control para modificar las fuentes de datos, copiamos los datos en nuestro repositorio
y allí las modificamos.
Todo esto permitido hasta un cierto punto, pues se tienen que respetar aspectos legales
y éticos que hay sobre los datos. Primero nos tenemos que preguntar de quien son
los datos y si tenemos permiso para hacer lo que queremos hacer. Se les ha informado
al propietario de los datos para poder hacerlo?
Especialmente crítico cuando se trata de datos personales. En el caso de que se
nos de permiso, debemos garantir la confidencialidad tanto de los datos como del uso
que se le dará al resultado de nuestro análisis.
4.1 Definition
4.1.1 Extraction
Tenemos múltiples tipos de datos que además son hetereogeneos. Hemos de integrarlos.
Dependiendo de las características temporales que tengan los datos se nos será mas
fácil o difícil extraer los datos:
• Transitorio: El caso mas difícil, es cuando la base de datos no tiene ninguna
característica temporal, no guarda ningún valor antiguo. Si se produce un cambio
entre 2 extracciones, el cambio entre valores se perderá.
• Semi-periódico: guardan 1 de los cambios (siempre guardan el valor anterior).
Mientras que no hayan dos cambios o más entre extracciones, estos valores no se
perderán.
• Temporal: que guarde absolutamente todos los cambios que se han hecho. No hay
problema para hacer la extracción, solo se pide todos los cambios desde la ultima
extracción.
4.1.2 Transformation
• Cambiar esquema: por temas de integración, temas de estructura de datos para
uso de herramientas de análisis, etc.
• Convertir el conjunto de caracteres: Pasa cuando tenemos distintos sistemas
operativos o diferentes SGDB’s y se utilizan conjuntos de caracteres diferentes.
Caracteres extraños (e.g acentos o la ñ en castellano) que pueden salir raros.
19
• Mejorar la calidad de dados: Limpieza, imputación, completar fuentes, etc.
4.1.3 Load
• On-line
• Off-line: hacemos fuera a los usuarios del sistema para cargar los datos (update
window). Durante la ventana de actualización, los usuarios no pueden trabajar con
el sistema (el sistema está offline). Mientras está fuera de línea, cargamos los datos
al DW y cuando acabamos lo ponemos a trabajar. Usualmente en la noche/fin de
semana.
• Durante la carga se desactivan/borran los índices ya que insertar de uno en
uno es mas costoso que no insertar todos los datos de golpe dentro del índice. A
veces desactivamos el índice, esperamos que acaben las inserciones y actualizamos
el índice con todas las inserciones que se hayan hecho o a veces borramos el índice
y lo recreamos de nuevo (si el algoritmo de inserción es el mismo, no tiene mucho
sentido recrear el índice). Solo en carga off-line, en online no podemos borrar los
índices porque sino los usuarios no podrían trabajar.
En la imagen podemos observar una estructura más de alto nivel de como funciona el
ETL. En la entrada tenemos diferentes tipos de fuentes de datos. Lo más importante
aquí es que pasamos el ETL a una área de trabajo (staging area) donde de forma
temporal podemos materializar resultados parciales de estas transformaciones.
Esto nos hace más eficiente estas transformaciones y también puede servir para, si una
cosa falla, no tener que volver hasta el principio. Es una practica habitual tener algún
tipo de almacenaje temporal para el ETL.
Una vez acabadas estas transformaciones cargaríamos los datos en nuestro
almacén de datos (DW) y desde este almacén de datos corporativo crearíamos nuestro
Data Mars. Una vez hecho esto tenemos herramientas multidimensionales, Data Mining
y Machine Learning que accederían a este DW o a los Data Mars y harían estos análisis.
Esto sería el ETL tradicional.
Cada vez tenemos más prisa y urgencia por tener las cosas, la creación del DW a
veces no nos conviene porque enlentece la fase de consulta (e.g mientras cargamos y no
cargamos alomejor ha pasado un día). La alternativa de hoy en día es ejecutar consultas
contra las fuentes y contra la área temporal del ETL (staging). Una vez tenemos estos
datos extraídos de las fuentes hacemos una transformación mínima (normalmente sin
mejora de calidad porque cuesta mucho tiempo) y se la pasamos a los usuarios. En vez
de hacer Load de los datos hacemos directamente Query, es lo que se conoce como ETQ.
20
Otra alternativa es ELT (impulsada por vendedores de SGBD). No se hace la trans-
formación en cualquier lenguaje/herramienta, sino que directamente se cargan los datos
a la base de datos y la base de datos es capaz de hacer las transformaciones dentro del
SGBD. Fusionar el staging area con el DW.
21
4.2.1 Data extraction mechanisms
Tenemos que ver como extraer los datos.
• Las interceptamos en la propia aplicación que las esta generando.
– Modificar el código de la aplicación para que a la vez que se hace la inserción
a la base de datos, nos la envié a nosotros en algún sitio que digamos.
– Modificamos el driver (call level interface) de manera que cuando desde la apli-
cación se escriba para hacer una inserción a la base de datos, automáticamente
el driver replique este dato a nosotros. La modificación del driver puede ser
más complicada al inicio pero a largo plazo es mejor. No se debe conocer la
aplicación, ni sufrir por modificaciones de la aplicación.
• Nos esperamos que la aplicación la cargue a la base de datos y las
cogemos de ahí.
– Mediante triggers (mecanismos que cuando se hace cualquier modificación en
la BD se hace una acción) para que nos envíen los datos.
– Podemos mirar los mecanismos del log. El log es el sistema para recuperarse
si hay una falla (energética, etc). El log tiene constancia de los cambios que se
han hecho en la base de datos. Si es software abierto, si es software propietario
el formato del log no se conoce y no se puede hacer.
– Consultas directas contra la base de datos. Si la BD es temporal, permite hacer
consultas contra el histórico. Entonces pedimos todos los cambiamos que han
habido desde la útlima extracción.
– Extraer todos los datos de la BD y compararlos con la extracción previa que
se haya hecho y ver las modificaciones desde entonces.
22
4.2.2 Kinds of transformation tasks
La primera seria la selección de los datos. Se tiene que mirar que sean relevantes, etc.
Cleaning
En general mejorar la calidad de los datos. Primero generar los perfiles para entender lo
que tienen y lo que no.
• Algunos atributos que seguramente tengan información compuesta. e.g
una columna con la dirección puede tener el nombre de la calle, el zip, etc. que a
lo mejor es más efectivo analizar por separado.
• Estandarización: de valores numéricos pero también de str.
• Mejora de la calidad:
– Completness:
∗ Introducir valores manualmente: normalmente no es buena idea, es
demasiado farragoso.
∗ Poner valor por defecto: tampoco es buena idea, no da buen resultado
en general.
∗ Average/mediana/moda
∗ Average/mediana/moda por clase
∗ Aproximación de TEOI: poner el valor que aporta la mayor informa-
ción.
∗ Tablas de lookup donde tenemos correspondencias para cada valor.
– Correctness:
∗ Diccionarios (tablas de lookup) para corregir valores
∗ Detección de outliers: detectar outliers sin borrarlos (pueden ser
importantes), solo identificarlos.
– Analizar las restricciones de integridad (business rules).
Size reduction
Si pensamos en los datos estructurados en formas de tabla, solo se puede reducir en
número de filas o columnas.
• Por filas (length):
– Agregación: groupby y nos quedamos con el promedio, mediana, min, max,
etc.
– Representativo: clustering y nos quedamos con algún representante (el centro
normalmente).
– Muestreo
• Por columnas (atributos):
– Correlación: la información ya nos la da otra columna.
– Análisis de significación: para ver si realmente nos da información relevante.
– Ganancia de clasificación
Preparation
Puede pasar que algunos algoritmos tengan algunos requisitos específicos (solo valores
numéricos, etc.).
• Categórico a numérico
• Diferentes métodos de discretización, numérico a categórico
• Normalizar
• Conversión de los datos a metadatos (Onehot encoding): para algoritmos que
no permiten datos multivaluados (listas).
23
• Derivación de información: e.g un algoritmo con la data de nacimiento trabajará
peor que con la edad (derivar la columna)
• Enriquecimiento: Haciendo join con otras fuentes de datos, mientras sea
relevante.
24
4.3.3 ETL process quality
En cualquiera de las dos alternativas, se tiene que mantener unos estándares de calidad.
• Rendimiento: el más importante. Se ha de ejecutar de la manera mas rápida y
eficientemente posible, pensando en la escalabilidad. Con recursos razonables dentro
del presupuesto.
• Confianza: de solucionar los posibles errores en términos de robusteza. Gestión de
errores, tolerancia a fallos y recuperabilidad.
• Testabilidad: tenemos de ser capaces de testar el código incluso tras hacer cambios.
Comprobar que se mantiene la eficiencia. También tienen que ser traceables, saber
de donde vienen.
• Mantenibilidad: muy importante si se piensa en el futuro. El ETL se ha de ejecu-
tar de manera recurrente a lo largo del tiempo, habrá cambios en las fuentes, etc.
y se tiene que mantener/cambiar. Entonces depende de como se defina el coste de
mantenimiento en el presente, afectará en un futuro.
– Se tiene que intentar hacer el código/ETL más comprensible. (etiquetar,
anotaciones, comentarios, etc.).
– Mantenibilidad difícilmente cuantificable. Aunque existen algunas métricas
como (#operaciones, #fuentes) pero son bastantes evidentes y no se puede
hacer mucho.
– Se puede hacer Modularidad/Encapsulación: definición de métodos, funciones
significativos con comentarios que pueden ser reutilizables de la manera mas
conveniente para ayudar a la mantenibilidad.
• Fuente (Source): Es el punto de origen de los datos, donde se inicia el flujo de datos.
Puede ser una base de datos, un archivo, un sensor, una API, u otras fuentes de
datos.
• Transformación (Transformation): Son las operaciones que se aplican a los datos
a medida que se mueven a través del flujo. Las transformaciones pueden incluir
filtrado, limpieza, agregación, cálculos y cualquier cambio en la estructura o el
formato de los datos.
• Ruta (Path): Es la dirección en la que fluyen los datos desde la fuente a través de
las transformaciones hasta llegar al destino.
25
• Destino (Destination): Es el punto final del Data Flow, donde se almacenan los
datos procesados o se utilizan para un propósito específico. Puede ser una base de
datos de destino, un almacén de datos, una aplicación, un informe, entre otros.
Distinción importante entre las aristas de ambos grafos. Las del data flow muestran
el paso de datos entre una tarea y otra. Mientras que las aristas del data control
muestran precedencia entre tareas. El flujo de control lo unico que indica es precedencia,
que se hace antes de que, pero no indica flujo de datos, no se pasan datos entre ellos,
simplemente un planificador.
26
4.5 ETL operations
27
4.5.1 Non-Blocking Example
El filtro cogería fila por fila y comprobaría la condición del filtro. Mientras una fila este
en estado de comprobación en el filtro, la fila anterior que pasó por el filtro ya puede
haber pasado a la siguiente operación para procesarla. Las dos operaciones adyacentes
se están ejecutando en paralelo.
28
4.5.3 Blocking optimized Example
Una manera de optimizar este caso es (para el ejemplo dado) es realizar una operación
de sort by para ordenar los datos de manera que se sabe cuando se acaban las filas
con el mismo valor para el group by. Ahora la operación de bloqueo es el sort by.
29
5 Data Quality
La calidad de los datos tiene un impacto económico. Es importante darse cuenta que
tiene un impacto en el coste del día a día de la empresa y también desde el punto de
vista positivo perdemos ingresos y ventas. Si aumentamos la calidad reduciremos costes
y aumentaremos los ingresos.
Desde un punto de vista más técnico podemos ver las gráficas. Tienen el R2 de los
diferentes modelos en el eje y. Como podemos ver dependiendo de la completez de los
datos nos afecta al R2 del modelo. Como menos completos sean los datos menor es el R2 .
Esto también sucede con la accuracy de los atributos. A veces perdemos mucho tiempo
iterando los hiperparámetros o probando modelos y en verdad lo que tendríamos que
hacer es mejorar la calidad de los datos porque tendrá un impacto mucho mayor.
Tenemos que determinar para qué uso queremos usar los datos. La calidad
de los datos es un proceso costoso y tenemos que considerar qué cantidad de recursos
destinamos ello. En general tener unos datos completos y de calidad mejora en todos los
sentidos nuestro modelo.
Los fallos más habituales son que falten datos, o que estos datos estén obsoletos (ya
no corresponden a la realidad actual). También que los datos no sean lo suficientemente
acurados. El efecto que esto tiene es que se ahorra costes si aumenta la calidad de datos,
se incrementa la eficiencia y la reputación de la empresa mejora (nuestros clientes/socios
deben creer que tenemos datos correctos). Podemos perder oportunidades de negocio.
Además las usamos para tomar decisiones, si lo datos son incorrectos nuestras decisiones
probablemente también.
Los problemas pueden venir de cualquier sitio:
• Carga inicial de los datos: si hacemos una conversión de datos inicial o si las
ponemos a mano nos podemos equivocar. Haciendolo con batch (paquetes de datos
que cargamos de manera automática), con interfaces en tiempo real o con diferentes
sistemas puede llevar a errores.
• Preproceso: si el proceso es manual o automático introducirá errores. Si intenta-
mos limpiar los datos podemos introducir otros errores (por una parte mejoramos
pero por la otra no), si purgamos también podemos estar perdiendo datos
importantes (errores por borrar demasiado).
30
• Inacción: si no hacemos nada la calidad de los datos se ve repercutida. Hay cambios
en el mundo, en la base de daos, en el entorno, etc. que no se capturan si no hacemos
nada.
5.2.1 Completeness
Primero, es importante considerar si existe la posibilidad de que falten enti-
dades del mundo real que no estén representadas en nuestra base de datos. Al abordar
este escenario, entramos en lo que se conoce como la "Open World Assumption"
(OWA), lo que implica que nuestra base de datos no es cerrada. En otras palabras, esta-
mos abiertos a la posibilidad de que existan otros objetos en el mundo real que no estén
reflejados en nuestra base de datos. En este contexto, es fundamental examinar cuida-
dosamente los objetos del mundo real y determinar cuáles de ellos no están presentes en
nuestra base de datos.
En contraste, la "Closed World Assumption" (CWA) representa el escenario
opuesto. Aquí, asumimos que nuestro mundo es cerrado, lo que significa que los únicos
objetos que existen en el mundo real son aquellos que están registrados en nuestra base
de datos. Bajo esta premisa, no deberíamos tener entidades faltantes en términos de
31
filas (aunque podríamos enfrentar la ausencia de ciertas columnas o valores dentro de
los atributos). Es importante comprender y diferenciar entre estos dos enfoques, ya que
pueden tener implicaciones significativas en el tratamiento y la interpretación de los
datos.
5.2.2 Accuracy
Nos indica el grado de error en nuestros datos.
• eA = |vA − vRealWorld |, para llevar a cabo esta medida, es necesario conocer el valor
del mundo real, lo que implica realizar un muestreo de estos objetos o atributos.
Luego, se compararía el valor real con el valor que tenemos en la base de datos y
se calcularía la diferencia.
• QA (Ai ) = |R(eAi ≤ ϵ)|/|R|, miramos si el error es menor que un cierto ϵ, si lo es,
seleccionamos estas filas de la tabla y contamos cuantas hay que tienen un valor
aceptable para este atributo y entonces dividimos entre el total de filas de la tabla.
• QA (R) = |R(∧Ai ∈R eAi ≤ ϵ)|/|R|, podemos hacer lo mismo para toda la tabla,
debemos hacer la conjunción para todos los atributos de la tabla, miramos si su
error está dentro de este intervalo que consideramos aceptable. Si una fila tiene
todos los atributos dentro de esta precisión contamos la fila.
5.2.4 Consistency
La consistencia se basa en medir una serie de restricciones de integridad (business
rules):
32
• Entidad: ver si conocemos el identificador de la fila.
• Dominio: ver si los enteros son enteros, los reales son reales, ...
• Referenciales: llaves foráneas.
• User-defined: checks que podemos poner en la tabla.
También hay que tener en cuenta la coincidencia de las copias.
• Temporal: si una copia no se ha actualizado y la otra sí.
• Permanente: si una copia no se actualiza nunca y la otra si se va actualizando.
33
En algunos casos se puede formalizar mediante dependencias:
• Dependencias multivaluadas: que un atributo tenga un cierto valor hacer que
otro atributo pueda tener solo algunos valores (determina muchas atributos e.g
sabiendo el DNI sabemos qué idiomas habla una persona). Como caso degenerado
tenemos las dependencias funcionales, que si un atributo tiene un valor, otro
atributo solo puede tener un valor. Esto implementa llaves foráneas y unique.
34
(false negative). Como las reglas de integridad no se violan muy a menudo, no debería
haber demasiados falsos positivos. Los falsos negativos si hacemos un sampling y no
encontramos ninguno probablemente no hay demasiadas violaciones.
Lo que debemos hacer es:
1. Identificar imperfecciones
2. Analizar si hay algún patrón en las imperfecciones
3. Mejorar las reglas y volver a 1
35
• Search space reduction: si queremos comparar todas las tuplas con todas las
tuplas de la otra fuente el coste computacional es muy elevado.
• C ⊂ A × B: analizaremos un subconjunto del producto cartesiano. Este subcon-
junto lo deberiamos de formar de manera que no perdamos ninguna pareja que nos
interese.
• Comparison and Decision: tenemos que comparar de estas parejas de A y B,
se hace con el algoritmo R-shush (tenemos una función de comparación). Esto nos
puede dar 3 resultados:
1. Match: las dos tuplas se refieren al mismo objeto.
2. Possible Match: hay una posibilidad de que las dos tuplas se refieren al mismo
objeto.
3. Not-match: las dos tuplas no se refieren al mismo objeto.
• Quality assessmen: manualmente miraremos si esto nos está dando un resultado
aceptable, si no nos lo está dando deberemos reconsiderar el preproceso, que el
espacio no sea demasiado reducido o que la función de comparición funcione bien.
36
6 Schema and Data Integration
Problema de la integración de los datos: Lo que queremos hacer es una consulta
y para resolverla necesitamos acceder a diferentes fuentes de datos.
• El problema no es como nos conectamos a las bases de datos (se asume ya desde
un inicio).
• El problema no es el envío de los datos entre sistemas.
• El problema no es el acceso remoto a las BD. Se puede hacer con cualquier tipo de
driver (e.g JDBC)
• El problema no es tener múltiples clientes/servidores.
• El problema no es que tengamos un SGBD distribuido.
El problema es que queremos hacer una consulta, queremos tener una respuesta
y para tenerla tenemos que acceder a múltiples BD. e.g. los atributos de las
diferentes BD pueden referirse a lo mismo pero con valores diferentes en algunos casos.
Tres soluciones posible a este escenario:
• Hacer a mano las queries por separado en las diferentes BD. Para hacerlo
que la persona tiene que saber un poco de todo (las fuentes, los modelos, el lenguaje,
etc.). Tiene que dividir la consulta en las diferentes consultas para cada una de las
BD y el resultado integrarlo en un único resultado. Inviable para gran número de
fuentes de datos.
• Crear una nueva BD conteniendo toda la información necesaria (proyecto de
migración de los datos, ETL p.e.). Se tiene que modificar las aplicaciones para
acceder a esta nueva BD en lugar de las fuentes de datos. Se tiene que hacer un
testing de todo y pondríamos en marcha esta fuente de datos única donde todo el
mundo trabajaría con esa.
• BD distribuida: Capa de software que (auto o semiautomaticamente) es capaz
de dividir la consulta e integrar las respuestas. Posible hasta cierto punto. La capa
de software define dos niveles de acceso:
– Los usuarios que acceden a través de la capa de software.
– Los usuarios que ya utilizaban las BD desde antes. Estos se mantienen.
Hay usuarios pre-existentes que continúan trabajando como lo hacían antes. Lo que
añadimos una capa de software donde el usuario quiere hacer una consulta integrada
(una consulta una respuesta). Este software divide la consulta en consultas más pequeñas
sobre cada fuente. Cada fuente devuelve la respuesta a la capa de software y esta al
usuario.
37
6.1 BD distribuida
Son diferentes BD interrelacionadas, distribuidas en una red y que se quiere tan
transparente como sea posible. Se asume que todo es homogéneo y un sistema único
aunque no se especifica en la definición formal.
Se pueden clasificar las diferentes BD distribuidas según su autonomía (de más a
menos). La autonomía nos lleva a que se puedan hacer las cosas diferente, por lo tanto
tenemos heterogenidad.
• heterogenidad de sistema: En un sistema, vemos que tiene varias BD dentro y
son diferentes. Cada uno con sus características y se tiene que solventar de alguna
manera. Esta es la heterogenidad fácil.
38
6.2 Kinds of Heterogeneity
El problema real que tenemos es la heterogeneidad de semántica (la del significado de
los datos, que quieren decir), no de sistemas.
39
6.2.3 Inter-class heterogeneity
Relación entre las clases.
• División de la clase en subclase. Se tendría que ver si la unión de las subclases
corresponde a la clase. (Playlist = Public Playlist + Private Playlist)
• De agregación:
– Composición: 1 playlist guarda dentro toda la información de las canciones
(por el rombo negro de la flecha). En el de la derecha como no tienen el rombo
negro lo que guardarían las playlist serían punteros hacía los diferentes tracks.
– Datos derivados: en CG el totalSongs depende de la tabla Track, pero nos
podemos guardar ese valor. En el caso de CB no perdemos ese valor, cuando
queremos el número de canciones contamos la tabla Song.
40
La figura de la izquierda (Rock, Pop, Rap) son metadatos.
41
6.4.2 Mapping
Tipos de mappings se definen y que mecanismo utilizamos para implementarlos:
• Consistente/coherente (sound): En el sentido de que la consulta que nos da
todos los datos de la fuente es un subconjunto de la consulta que quiere el usuario
(hay datos de otras fuentes que no se incluyen en la consulta).
qobtained ⊂ qdesired
qdesired = qobtained
42
6.4.3 Examlple of Global as View (GAV)
Debemos traducir la consulta que esta expresada en términos del esquema global a
las fuentes de datos. El usuario final expresaría la consulta con esa terminología.
El hecho que la variable n sea la misma significa que es el atributo de join. El
c =′ F CB ′ indica una selección. Una vez que el usuario nos ha indicado su consulta
utilizamos los mappings para traducir las tablas al formato correcto sobre las fuentes de
datos. El esquema global es una vista, que no es más que una consulta.
Una vez hecho esto pasamos la siguiente fase (todo lo anterior lo hace el mediator).
En este caso tendríamos que decidir a que fuente accedemos primero (R1 o R2), como hay
selección en R2 seguramente se empezaría por esa (ya que esperamos que tenga menos
filas). Entonces haríamos una consulta al wrapper de TransferMarket. Una vez tengamos
el resultado hacemos la consulta sobre el wrapper de FIFA22 y una vez tengamos ambos
resultados haríamos el join entre ellos para obtener el resultado único para el usuario.
43
6.5 Data Integration
Mirar las instancias de las tablas para ver si coinciden y representan el mismo objeto
del mundo real. Para hacer esto hay que seguir dos pasos:
1. Entity Resolution (Record matching): Ver cuando dos filas representan el
mismo objeto. Necesitamos una función que identifique los objetos, cuando dos filas
correspondan al mismo objeto nos lo diga.
2. Fusionar: Única fila que represente las múltiples filas que coinciden. Deberíamos
homegenizar los esquemas de estas tuplas.
Función de similitud ≈:
• Basadas en distancias (Hamming, Levenshtein, Jaccard |A∩B|
|A∪B| )
• Basadas en heurísticas
• Probabilísticas
• Modelos de clasificación
O := {}
while I ̸= {} do ▷ Hacer hasta que no tengamos más filas
escoger r ∈ I ▷ Cualquier elemento, el orden es irrelevante
if (∃ s ∈ O tal que s ≈ r) then
I := I - r; O := O - s; I := I ∪{r ∧ s}
else
I := I - r; O := O ∪{r}
end if
end while
44
7 Distributed Data Management
7.1 Dsitributed Systems
Un conjunto de componentes que interactúan para cumplir un objetivo común y estos
componentes que interactúan, lo hacen a través de una red de ordenadores mediante el
paso de mensajes.
Los componentes son completamente independientes. Trabajan de forma totalmente
concurrente y pueden hacer cosas en paralelo. Si uno falla, el resto continua trabajando
igualmente (siempre y cuando el sistema este preparado para cumplir el objetivo común
sin el componente).
El problema que tenemos es la sincronización, pues no tenemos un "reloj " común.
Como están en maquinas diferentes, diferentes puntos de la red puede tardar diferente
tiempo para que llegue un mensaje. Se pueden sincronizar con un cierto error y con
ciertas dificultades.
• Escalabilidad
• Calidad del servicio: temas de rendimiento, confiabilidad, disponibilidad,
• Concurrencia
• Transparencia
7.1.1 Escalabilidad
Tenemos más usuarios que antes y tenemos dos soluciones para mitigar esta dificultad:
• Scale up: Agregar nuevos componentes en una única maquina. No es una buena
opción, porque no es un sistema distribuido, sino que agregaríamos ya sea memoria,
nuevos procesadores a una única maquina.
• Scale out: Agregar nuevos componentes independientes conectados a la red. Los
componentes tienen que hacer propia una proporción de la carga de trabajo. Al
añadir un componente, de manera automática, este tiene que hacerse cargo de cierta
carga de trabajo. Se tiene que hacer un balance de la carga de trabajo. Se tiene
que evitar el tema de cuellos de botella, no puede ser que una única maquina de
todas las nuevas conectadas, este haciéndose cargo de todas las tareas. Todo esto
evitando la comunicación innecesaria.
45
7.1.2 Performance/Efficciency
La latencia es tiempo que tarda a empezar a recibirse la respuesta a nuestra petición
y el throughput es el número de peticiones que se pueden responder por unidad de
tiempo (min, ss, etc.). Se busca minimizar las latencias del sistema y maximizar el
throughput.
7.1.3 Reliability/Availability
Nos interesa que mantenga los datos consistentes y nos interesa que el sistema se man-
tenga en todo momento en funcionamiento. Como los componentes son independientes,
si falla un componente nos la chupa, podemos usar los otros. Pero el sistema como tal
debe poder reaccionar a las fallas de los componentes.
• Lo que esperamos es que el sistema siga trabajando, pero eso significa que la
información que tiene el componente que ha fallado tiene que estar en otro lugar
(replicación).
• El rotamiento de los mensajes tiene que ser flexible. Si, cuando se hace una peti-
ción, se destina a un componente en concreto y este falla, entonces el mensaje
fallará. Por lo tanto, se tiene que enviar el mensaje/petición de forma genérica
y los componentes tienen que hacer suya esta petición dependiendo de cuál esté
disponible en ese momento.
• Para saber qué ha fallado, se utiliza normalmente un mecanismo de heartbeats,
lo que significa que los diferentes componentes simplemente van avisando al resto
de que están vivos.
• Si la máquina falla, se debe poder ponerla en marcha otra vez. Cuando hay
muchos componentes, no se puede hacer esta recuperación manual, sino que se debe
recuperar de forma automática.
7.1.4 Concurrency
La idea es que varios usuarios puedan acceder al sistema al mismo tiempo y hacer
peticiones de forma concurrente.
Sistemas de consenso: los componentes reaccionan a las peticiones/fallas de forma
independiente y autónoma. Pero el hecho de hacer todo esto tiene que evitar que inter-
fieran entre ellos (bloqueos, deadlocks, realización múltiple de una misma tarea, ignorar
tareas, etc).
7.1.5 Transparency
Hacer todo lo que hemos dicho antes sin que el usuario se dé cuenta. Tenemos un sistema
distribuido, pero desde el punto de vista del usuario es una caja negra. El usuario
interactúa con la interfaz/caja que esconde todas las dificultades de implementación. Lo
que hace es ocultar el resto de dificultades. Esta es la característica más complicada de
todas.
46
7.2 Distributed Database Systems
Diferentes bases de datos que están integradas, físicamente distribuidas y la distribución
tendría que ser transparente para los usuarios.
47
Los niveles de transparencia implican diferentes niveles de autonomía. Si consider-
amos que cada repositorio/máquina puede funcionar de forma autónoma, cuanta más
autonomía, menos transparencia y viceversa.
1. El esquema interno serian los ficheros del sistema operativo. Pueden estar
ordenados, en diferentes lugares, etc.
2. El esquema conceptual del SGBD serian las tablas, aunque se le llame esquema
conceptual.
3. El esquema externo serian las diferentes vistas que se le pueden ofrecer a los
diferentes usuarios que tengamos. A cada usuario se le pueden definir diferentes
vistas.
48
En el caso que tengamos más de una maquina (caso de un sistema distribuido pero sin
autonomía). Tenemos prácticamente la misma situación.
Lo que nos falta es el ligamento que hay entre el esquema global y los esquemas locales.
Vemos que tenemos un catálogo global (donde guardamos los metadatos del sistema)
que guarda los mappings entre los esquemas externos y el esquema global. Por otro
lado, tenemos en cada uno de los nodos un catalogo local que guarda los esquemas
conceptuales locales y como se relacionan con los esquemas internos.
Estos mapping ya existían anteriormente en la arquitectura centralizada. Lo que es
nuevo son los mappings entre esquema conceptual global (coordinador del sistema) con
las correspondencias de lo que guardan cada uno de los workers (esquemas conceptuales
locales). Lo que guardan son primero que fragmentos hay, como se ha trozado cada uno
de los datasets y donde están localizados cada uno de estos datasets.
Se consigue esta transparencia de los esquemas. El usuario solo tendrá que acceder
sobre los esquemas externos (vistas).
49
7.2.2 Centralized DBMS Functional Architecture
Se centra en la cuestión de la transparencia de las consultas. Igual que antes, miramos
primero lo que era una arquitectura funcional de un sistema centralizado.
50
Los Local Query Manager en este caso ya no sabe nada sobre la localización ni
fragmentación de los datos. Lo único que sabe es lo que tiene el, para eso es el esquema
local, para trabajar a un nivel de abstracción (tablas, vistas, p.e.).
51
se quiere acceder al disco de una otra, lo tiene que hacer a través de la red.
Esto genera una series de características especiales, que son similares a las de un sistema
distribuido comentadas en secciones anteriores.
Una nueva característica importante es que, como los SGBD funcionan en el cloud,
normalmente se ofrecen como servicio y no como software. para mantener el servicio
rentable se necesitan muchos usuarios que accedan continuamente. Esto es lo que se llama
Multi-tenancy. Esto trae unas consecuencias desde el punto de vista del proveedor
(somos el señor amazon).
• La popularidad del servicio puede cambiar y no se tiene ningún control sobre esto.
Puede haber ya sea un aumento de comandas, de usuarios (flash crowds) o una
disminución repentina y se tiene que soportar.
• Los usuarios son diferentes, con lo que el aumento lineal de usuarios no implica un
aumento lineal de recursos. Estos requerimientos son variables dependiendo de los
requisitos de los usuarios.
• Se necesita automatizar (a mano no) las cosas para soportar el gran numero de
usuarios. Se necesitan metadatos para conocer las características, requisitos de cada
uno de los usuarios.
• Los fallos se deben detectar y solventar automáticamente por parte del sistema. No
puede ser que si una falle, todo el sistema falle.
• Scale-out es inevitable pero esto no debe para el servicio cada vez que se aumente
maquinas. Incluyendo parches o updates obviamente.
• El balance de carga se tiene que hacer de forma elástica. Si se necesitan más
maquinas, algunas pueden asumir una carga mayor para liberar el resto y al reves
(poder desconectar algunas maquinas cuando no sean usadas y no se cobre su uso).
52
3. Transacciones: Se tienen que respetar las propiedades ACID en la medida de
lo posible. Necesitamos un mínimo de sistema de recuperación, de control de
concurrencia y consistencia.
4. Procesado de queries: Como optimizamos las consultas. Los gestores de consultas
en el cloud son todavía limitados hasta cierto sentido, no porque sean malos, sino
porque su espacio de búsqueda es más grande (porque incluyen distribución y/o
paralelismo y replicaciones) que el de un SGBD relacional. No siempre se encuentra
el mejor plan de acceso de forma tan eficiente.
Ventajas:
• Para acceder solamente a un subconjunto de filas/columnas que nos interesa en la
consulta.
• Normalmente son necesarios diferentes conjuntos en diferentes lugares (maquinas)
por motivos específicos.
• Facilita el paralelismo, pueden procesar cada fragmento a la vez.
Dificultades:
• La gestión del catálogo. Se ha de dejar constancia que fragmentos tiene cada tabla,
donde estan y el número de copias.
• El uso de JOIN es costoso. Puede no valer la pena, especialmente si se requiere
comunicación a través de la red.
• Si se tiene que modificar una cosa y esta en diferentes fragmentos/replicas se
vuelve más costoso.
53
Entonces se tiene que tener en cuenta una serie de características que tiene que
cumplir la estrategia de fragmentación para que sea correcta.
• Completitud: cada dato tiene que estar como mínimo en un lugar.
• Disjunción: los fragmentos tienen que ser disjuntos. No puede haber redundancia.
Excepción al atributo de JOIN (aunque no es redundancia porque no es evitable).
• Reconstruible: la tabla original se tiene que poder reconstruir a partir de los
fragmentos.
54
8 Distributed Data Processing
8.1 (Distribured) Transaction Management
8.1.1 CAP theorem
El sistema en cuestión presenta tres características fundamentales: consistencia (ase-
gura la consistencia de los datos, especialmente entre réplicas), disponibilidad (los
usuarios pueden llevar a cabo operaciones) y tolerancia (capacidad de recuperarse de
fallos de red que desconectan componentes del sistema).
El teorema establece que de estas tres características, solo es posible cumplir
simultáneamente con dos.
Configuration alternatives
• Consistencia total: Renunciamos a la disponibilidad; en este caso, las réplicas
se sincronizan de forma síncrona. En el momento en que recibo una modificación,
modifico todas las réplicas de manera que todo el sistema sea consistente. Esto se
logra siempre y cuando la red esté disponible. Si la red está caída, esta configuración
no puede llevarse a cabo.
• Eventualmente consistente: Renunciamos a la consistencia. Aquí, los cambios se
propagan a las réplicas de manera asíncrona. Recibo una modificación y poco a poco
vamos propagando los cambios. Si la red está caída, no ocurre nada; simplemente
esperamos a que vuelva a estar disponible. Esto significa que el sistema siempre
estará disponible. Siempre recibiré operaciones y las aceptaré perfectamente. En
caso de caída de la red, simplemente tomará más tiempo sincronizar, y durante este
tiempo el sistema no será consistente.
• Datos no distribuidos: Renunciamos al particionamiento, ya que no es realista
en un entorno de red. La única manera de que la red no caiga es que no exista.
Si existe, es susceptible a caídas. Renunciamos a estar en la nube; estamos en
un servidor con una única máquina, por lo que podemos tener disponibilidad y
consistencia.
No hay una configuración que sea universalmente buena; todo depende de nuestro
contexto.
55
8.1.2 Managing replicas
La replicación de los fragmentos mejora la latencia y la disponibilidad pero crea
un problema de sincronización. Entonces tenemos 4 posibilidades, dependiendo de si
modificamos la copia primaria (si existe), que es la única que podemos modificar, o per-
mitimos modificar cualquier copia. La segunda decisión que tenemos que tomar es si la
sincronización es inmediata o diferida (sin prisa).
• Eager primary copy replication: Podemos modificar solo la copia primaria;
obviamente, podemos leer de cualquier copia e inmediatamente, de forma síncrona
(inmediata), cuando guardamos la modificación en la copia primaria, la guardamos
en cualquier otra copia que tengamos.
• Lazy primary copy replication: Igual que antes, todas las modificaciones van
solo a la copia primaria. Podemos leer de cualquier copia, pero la propagación
es discontinua, lo que indica que es asíncrona. En el momento que recibimos la
modificación en la copia primaria, sin prisa vamos propagando estos cambios a las
demás copias.
• Eager distributed replication: Aceptamos escrituras tanto en una copia como en
la otra. Si tenemos 50, aceptaríamos escrituras en las 50 y luego las sincronizaríamos
de manera inmediata. Quien reciba la modificación inmediatamente se propaga a
las demás replicas.
• Lazy distributed replication: Recibimos modificaciones en cualquier réplica y
propagamos sin prisa de una a la otra. Quien reciba primero lo confirma al usuario
que ha recibido la modificación correcta y luego propaga sin prisa a las demás copias
que haya.
56
Named Situations
• Ventana de inconsistencia W < N : escribimos en menos replicas de las que
tenemos y confirmamos al usuario que ya hemos escrito. Hay una ventana desde
que hemos confirmado al usuario hasta que realmente conseguimos escribir en todas
las N.
• Strong consistency R + W > N : aunque haya una diferencia grande entre W y
N y tarde en llegar a todas las replicas, como cuando leemos miramos suficientes
copias, nos aseguramos de que todo lo que leemos es correcto. Si no hemos escrito
suficientes, al menos leemos las suficientes.
• Eventually consistent R + W <= N : como son menores que N, podría ser
que no se solaparan. Que escribamos en unas ciertas máquinas y leamos de otras,
devolviendo al usuario datos incorrectos. En el caso anterior no puede pasar porque
como mínimo habrá una intersección entre lo que leo y lo que escribo.
• Potential conflict W < (N + 1)/2: podría ser que dos usuarios estén escribiendo
en dos lugares diferentes de la red, generando un conflicto. Uno modificaría una
cosa y el otro modificaría el mismo dato y pondría otra cosa, y no sabemos con
cuál quedarnos, cuál es la que ha llegado antes.
Typical Configurations
• Fault-tolerant system N = 3, W = 2, R = 2: tenemos 3 máquinas; cuando
escribimos lo hacemos en 2 máquinas y cuando leemos lo hacemos en 2. Es un
sistema totalmente consistente ya que, aunque no escribimos en todas las copias,
cuando leemos leemos 2 y, por lo tanto, seguro que una de ellas es una que hemos
escrito antes. Si una de las máquinas falla, podemos seguir trabajando, la que falla
se ignorará siempre.
• Massive replication for read scaling R = 1: podemos tener las máquinas que
sean; la W es irrelevante. Hacemos réplicas e simplemente pedimos una lectura y
ya está.
• Read one-Write All R = 1, W = N : prioriza las lecturas, lee solo 1, pero
el problema es que penaliza mucho las escrituras. Las hacemos síncronas y nos
esperamos a haberlas escrito todas, y esto en un entorno cloud puede ser un desastre.
57
de sistemas distribuidos, en general, lo que hay que hacer es minimizar el envio de
datos a través de la red y también hay que tener en cuenta en algunas cosas el costo
de entrada/salida.
• Optimizador semantico
58
• Optimizador sintáctico: se añade una fase de localización de datos, donde están
los fragmentos. También hay que ver si todos estos fragmentos nos hacen falta
(reduction). Si el dataset tiene 50 atributos pero nuestra consulta solo pide 5 a
lo mejor estos no están en todos los fragmentos. recuperando 1 de los fragmentos
verticales o 2 a lo mejor ya tenemos estos atributos i los demás no necesitamos
recuperarlos. Lo mismo pasa con una fragmentación horizontal. Fase de reducción,
ciertos fragmentos, todo i pertenecer al dataset que ‘pide el usuario a lo mejor no
hacen falta.
• Optimizador físico: tiene una fase global i una local. Lo que hace es dividir
la consulta en trozos que envía a los diferentes workers, las maquinas que harán
la ejecución. Cada una de estas maquinas ejecutara el trozo que le toque i el
optimizador global decidirá como los datos que han generado cada woker como se
juntan para darle al usuario un resultado único.
En cada maquina tendríamos una optimización local, que depende del que tenga
cada uno de las maquinas en el hardware. El coordinador envía un trozo de la consulta
y ya es cuestión de cada worker decidir con sus características propias cual es la manera
mas diente de ejecutar ese trozo de la consulta. Cada uno hará lo que crea que sea mejor
para sus recurso disponibles y la situación de carga de trabajo-
Optimizador sintáctico
Tiene que generar nuestro árbol sintáctico donde en las hojas están las tablas o los
fragmentos y después tenemos nodos que representamos con círculos o elipses que
representan los diferentes operadores.
Mientras que si hacemos un bushy tree, no lineal, que tiene diferentes operadores
que no tienen nada que ver el uno con el otro. Todos son se pueden paralelizar porque
son independientes, uno trabajo con la A i la B mientras que el otro trabaja con la C
y la D. En el caso del left-deep tree habían dependencias. En este caso el espacio de
búsqueda es mayor.
Otras dificultados son que en vez de considerar joins binarias consideramos joins de
N entradas, de 3-4 tablas a la vez. Por lo tanto esto añade otras posibilidades a esta
generación de arboles de proceso.
59
El otro problema que tenemos es que estimar el tamaño de los resultados intermedios
es mucho más relevante en este caso, ya que nuestro cuello de botella es la red, por lo
tanto tenemos que saber que enviamos por ella.
Optimizador físico
El optimizador físico transforma el árbol sintáctico en un plan más eficiente. Decide el
algoritmo que se utiliza (por ejemplo algoritmos de hacer joins) y cual es el mas adiente
para cada caso y el método de acceso a los datos (por ejemplo uso de índices). Sobre
todo el paralelismo y buscar como explotar la localización de los datos. Tenemos que
saber de donde cogemos los datos, si tenemos datos replicados qué réplica nos conviene
más coger por ejemplo.
Para escoger qué plan de ejecución primero tenemos que tener en cuenta que la
query que quiere el usuario no puede variar, los planes deben de ser equivalentes. Esti-
maremos los costes de estes y escogeremos la mejor solución.
60
∗ Unario: por ejemplo una selección. si hemos particionada la tabla o dataset
anterior mente las diferentes particiones podrán hacer la selección por
separado, normalmente no sale a cuenta particinonar de forma dinámica
durante la consulta si no se ha hecho antes.
∗ Binario: si la operación es binaria (join) el coste puede llegar a justificar
(no siempre) que invitamos tiempo particionando un dataset que no lo
estaba, simplemente para que la consulta (join) vaya mas rápida.
– Inter-operator: depende de que arbol tengamos
∗ Independent: si teníamos un bushy tree podemos paralelizar operadores
que sean independientes, que no tienen dependencias entre ellos.
∗ Pipelined : en el caso de tener un left-deep trree que parece que los oper-
adores no se pueden paralela. También se puede paralelizar, simplemente
cogemos un granularidad mas pequeño. Lo que paralelizamos no es la
ejecución de todo el resultado intermedio (como en el bushy tree), en este
caso se paraleliza fila a fila. Si reducimos lo que estamos paralelizando,
no paralelizar dataset entero sino tupla a tupla aquí también se puede
paralelizar.
61
8.3.3 Producer-Driven Pipelining
Aquí empujamos. No tenemos estos iteradores sino que las tablas fluyen hacia los sigu-
ientes operadores. Se comporta de forma similar al anterior. Cuando el primer operador
acaba de leer de las tablas, las filas van bajando por el resto de operadores.
El problema de hacerlo de esta manera es que en el momento que uno es mas lento
que el resto, todo se colapsa. Si un operador puede estar ejecutando sus datos pero el
anterior no le envia porque es mas lento, este tampoco le envía nada al siguiente. Y al
revés, si un operador es muy rápido pero el siguiente no lo es tanto, los buffers se van
llenando y van deteniendo la propagación.
Se pueden hacer de unas asunciones de cual es la ocupación del sistema y su tiempo
de ejecución. La ocupación de sistema es el tiempo que tarda un sistema en tener un
procesador libre de todos los que estaba utilizando hasta ahora (en los ejemplos anteri-
ores seria el primer operador que lee los datos). El tiempo de ejecución es el tiempo de
sistema que requiere para que acaben todos los operadores.
62
9 Distributed Processing Engine (MapReduce)
• Se necesita que escale a la magnitud de la red
• No se quiere preocupar del paralelismo. Que el paralelismo sea por así decirlo
transparente a los usuarios.
• Todo lo que se pueda se debería ejecutar en local para evitar movimiento de los
datos que siempre es costoso. La distribución de los datos debe ser transparente a
los usuarios.
• Balancear la carga de computacion.
• Ser tolerante a los fallos, lo cual es muy probable con las miles de maquinas. En
caso de que una se estrope, no se deberia repetir todo el computo, sino el computo
de esa maquina. Fine grained fault tolerance.
63
Toda la parte de optimización local también se simplifica y se traslada al DFS. La
estructura es muy simple. Esto se hace tan sencillo porque lo que permite MapReduce
también es muy sencillo.
Cada llamada a esta función de map, regresa de 0 a muchas parejas. Lo mas impor-
tante es que la clave de entrada y de salida no tienen nada que ver (hasta con diferentes
tipos de datos).
En la entrada del MergeSort ordena y hace un merge de todos los valores diferentes
de las claves y los pone dentro de la misma lista. Se provee otra función que se envía a
todos los workers para ejecutar la parte de Reduce. Ahora los parámetros de entrada
de la función son las parejas (clave, lista) y en la salida da una clave diferente a la de
entrada.
64
9.3 Relational algebra in MapReduce
Como se puede hacer una operación en un numero limitado de maquinas de manera
paralela?
9.3.1 Projection
Operación binaria al ser dos relaciones. En el map, la clave y valor de entrada son
los mismos que para la operación anterior. Si la fila viene de una relación se hace una
cosa, sino se hace otra en la función del map. Si viene de T se aplica una función de
hash y luego se aplica de modulo para la clave y el valor es la tupla completa como en
el caso de la operación anterior.
Si viene de la tabla S, emitimos como resultado del map D tuplas clave valor, las
claves va de 0, ..D−1, el valor es el mismo de la operación anterior para todas las parejas.
D copias de la fila de la tabla S.
65
El intervalo 0, ..., D − 1 serán las claves como entrada del Reduce. Cada clave
recibe un conjunto de filas que son las que vienen de T y de S.
66
10 Distributed Processing Engine (Spark)
10.1 Background
Primero tenemos que entender cuál es el problema que intentamos resolver. Por eso
tenemos que ver cuáles son las limitaciones de MapReduce.
En la imagen vemos el flujo que sigue MapReduce. Primero tenemos las entradas,
los mappers, reducers, el algoritmo de mergesort y los combiners que hay entre medio
para reducir los datos y optimizar el acceso.
Lo importante es darse cuenta de que entre cualquiera de estas fases, leemos e escribi-
mos datos HDFS. Estamos constantemente leyendo e escribiendo datos del sistema de
ficheros.
No solo esto, sino que si encadenamos dos o más operaciones de MapReduce, por
ejemplo, para hacer un contador, otro para un ranking, y vamos haciendo, la manera
de comunicar los datos entre las diferentes fases vuelve a ser mediante el sistema de
ficheros. Esto no es la mejor manera de hacerlo. La mayor crítica que se le hacía a
MapReduce es que constantemente escribía.
67
Entonces, cualquier comunicación que haya entre estas transformaciones o dentro de
estas transformaciones puede aún pasar al disco, o que la comunicación vaya en el disco;
esto aún es posible. Es un falso mito que Spark solo corre en memoria. Pero la diferencia
es que ahora tenemos la opción también de que en la comunicación podemos hacerlo a
través de la memoria, cosa que no se podría hacer con MapReduce, donde la única
opción era en disco. Ahora tenemos ambas opciones (que nos proporciona el sistema)
según lo que sea más eficiente dependiendo de la memoria que tengamos disponible.
10.2 Dataframes
La principal herramienta para trabajar con Spark son los dataframes. La alternativa
para trabajar con datos serían tablas relacionales (SGBD) donde podemos usar SQL.
El primer problema que esto presenta es que tenemos que definir claramente cuál es el
esquema antes de hacer nada, y esto no siempre es evidente. Además, trabajar con datos
semi-estructurados no siempre es posible, complica a la hora de hacer consultas.
Por otro lado, también complica mucho el debug de las consultas. O falla la consulta
entera o funciona entera, pero no falla una parte pequeña de la consulta, cuesta ver lo
que está pasando y lo que está fallando. Esto es normal ya que SQL fue concebido para
OLTP, no para análisis de datos.
Lo que daba todo esto son operaciones más pequeñas y que se pueden componer e
crear cadenas o pipes (tuberías) de las filas o datos que van sufriendo diferentes trans-
formaciones una detrás de la otra. Esto encaja bastante con lenguajes imperativos como
Java o Python.
68
Pero con Spark, tenemos casi lo mismo, pero no exactamente. La principal diferencia
es que las columnas sí que tienen identificadores, pero las filas no. Lo que tenemos es un
conjunto sin orden y, por lo tanto, no podemos tener las filas por orden. Lo más impor-
tante es que esto reside en la nube. En general, un dataframe de Spark está distribuido
(o puede estarlo) en tantas máquinas como queramos, y podemos usar el paralelismo en
nuestras consultas y transformaciones. El otro dataframe reside en memoria y, por lo
tanto, solo se puede trabajar en la máquina en la que estamos.
69
10.2.6 Dataframe implementations
Los de pandas están en memoria, Spark en la nube (pueden estar también en una
sola máquina), pero es importante usar una sesión de Spark que es donde están los
dataframes y esta ya se configura si queremos en local, en un clúster o en la nube.
Los dataframes de pandas no escalan ya que están en memoria, cabe lo que cabe en
memoria. En el caso de Spark, todo esto es transparente; simplemente declararemos si
la sesión se ejecuta local o en la nube, y esto automáticamente se distribuye como se
crea más oportuno según el optimizador de consultas que tengamos.
10.2.7 Operations
Los dataframes de Spark tienen diferentes tipos de operaciones.
• Entrada/salida: obtener datos e convertirlos en un dataframe de diferentes fuentes
y se puede generar una salida de CSV, JSON.
• Transformaciones: no modifican el dataframe; lo que hacen es generar uno nuevo
con los mismos datos que el anterior pero con la transformación determinada.
– RDDs: abstracción por debajo.
– SQL: abstracción más alta.
• Acciones: lo que hacen es sacar los datos del cloud. Las acciones cogen un
dataframe y generan una estructura de datos en memoria que ya no es un
dataframe. Es cuando sacamos los datos en la nube y se ejecutan en cadena las
transformaciones.
• Schema management: operaciones que permiten trabajar con el esquema de
dataframe, ver qué columnas tiene, tipos, etc.
70
Entrada/Salida
Se puede crear un dataframa a partir de ... o se puede transformar un dataframe a un ...
• Matrix
• Pandas dataframe
• CSV
• JSON
• RDBMS
• HDFS file formats: (ORC, Parquet)
Transformaciones
Cualquiera de estas transformaciones tiene un dataframe como entrada y uno de salida.
El dataframe de salida es siempre diferente del de entrada.
• select
• filter/where
• sample
• distinct/dropDuplicates
• sort
• replace
• groupBy+agg
• union/unionAll/unionByName
• subtract
• join
• ...
Acciones
Reciben como entrada un dataset y resuelven un resultado que se almacenan en memoria.
Matrializan el resultado dl cloud.
• count
• first
• collect
• take/head/tail (cuidado con take porque se transfieren todas las filas del Cloud y
podrian no caber en memoria.
• show
• write
• toPandas
• ...
Schema Operations
• summary/describe
• printSchema
• columns
10.2.8 Optimizaciones
Lazy evaluation
Una transformación no hace nada; es una declaración de lo que quieres hacer. No pasa
nada hasta que usamos una acción que dispara todo esto. Nos apuntamos todas las
operaciones y buscamos de optimizarlas cuando se llama a una acción. No se puede
optimizar nada si no se tiene una secuencia de transformaciones.
71
posibilidad de guardar el resultado de la primera ejecución en caché (en memoria)
para que la segunda vez que se vuelva a disparar una acción que involucre ese
mismo dataframe no se vuelva a ejecutar absolutamente todo. Consume memoria;
si lo haces muchas veces, te quedas sin. Hay que ir desactivando este mecanismo.
Si lo usamos 2 veces y no 3, después de la segunda podemos usar unpersist.
• Una alternativa muy buena son los checkpoints. Son parecidos al cache/persist,
pero la diferencia es que en este caso se borra toda la historia previa del dataframe,
se ejecuta y guarda el resultado en el disco, y esto seguro que no se vuelve a ejecutar
nunca más. Si volvemos a llegar a ese dataframe, se cogerá del disco y no se ejecutará
nada. El checkpoint es más caro, gasta más recursos, pero garantiza que no ejecuta
nada y por otra parte nos libramos de todo el árbol de procesos.
Paralelismo
Está basado en las máquinas/cores disponibles. Hay que tener unos cuantos para que
trabajen en paralelo. Pero además, hace falta que el dataframe esté particionado para
que se ajusten a los recursos que se tengan disponibles. Por defecto se crean particiones,
pero mientras las transformaciones van aumentando con joins podemos aumentar el
número de datos o al filtrar quitar datos. Y es mejor ir reparticionando para ajustar
el número de datos a los cores que queremos utilizar, que se ajuste a los recursos que
tenemos disponibles. Si tenemos muchas particiones pero pocos cores, seremos muy
ineficientes porque gastamos más en gestionar las particiones, pero si no particionamos
el dataframe, por mucho que tengamos 10000 máquinas disponibles, no se paralelizará
nada.
10.3 Abstractions
Spark es un sistema extensible y, por lo tanto, permite las abstracciones por encima. El
concepto básico son los RDD’s. Encima de estos RDD’s se definen diferentes tipos de
abstracciones; las más básicas serían los dataframes, pero no son los únicos. También
existen SQL, grafos, librerías de machine learning...
72
esto no solo funciona sobre bases de datos relacionales, sino que se extiende a cualquier
fuente de datos. Cargamos nuestros datos en Spark, ya sea JSON, CSV, etc., y podemos
hacer consultas SQL sobre ellos.
Esto, obviamente, se tiene que traducir a un sistema procedural no declarativo, y
por eso se coge la aproximación de SGBD que es tener un optimizador de consultas.
Primero hay una fase basada en reglas que hace los predicados lo antes posible
(filtrado, selección) y la reducción de columnas también tan temprano como sea posible.
Una vez hecho esto, trabaja en un sistema basado en costes donde intenta estimar el
coste de cada ejecución y se queda con el coste más pequeño. La tercera característica
es que este sistema basado en costes es extensible, es decir, como se trata de código
abierto (Spark), cualquiera puede implementar nuevas operaciones o nuevos mecanismos
de implementación de las consultas.
73
A partir de este plan, lo que acaba generando son RDD’s, que es lo que hay por
debajo de Spark.
74
11 Big Data Architectures and Model Management
Data science es un proceso colectivo de teorías/procesos que nos permiten analizar/ex-
traer con lo que tiene que ver con entender mejor los datos.
Predictive analysis: Aprovechamos los datos importantes pero también una parte
serian lo que se llaman not obviously importante (no esta del todo claro si son relevantes
para el análisis). P.e. los clicks del usuario, su comportamiento de búsqueda, etc.
• Las actividades son comúnmente usar técnicas de machine learning para entrenar
modelos predicativos.
• El proceso es diferente del descriptive analysis.
2. Model Managment: Una vez que tenemos los datos limpios y preparados
empezamos con el análisis. Podemos entrenar un modelo, seguir limpiado los datos,
imputar los valores... Utilizamos estadística i gráficos para entender mejor los datos i
la relación que tienen con nuestro análisis.
Este es un proceso interactivo, pero una vez un algoritmo esta decente, lo que se
tiene que hacer es reflexionar un poco para definir si seguimos explorando alternativas
o ya es suficiente. Tenemos dos opciones, ir a mejorar los algoritmos o hacer un data-
centric (volver a los datos y redefinir que necesitamos para mejorar el análisis).
75
Lo que es importante es que tenemos un reto grande; Data Management y por el
otro lado Model Management. Si se hace sin sistematizar el proceso pueden surgir
desafíos.
Challenges
• Como asignamos el nombre de los ficheros.
• Como guardmos los ficheros.
• Como seguimos la evolución de los ficheros.
• Como sabemos si los datos están actualizados.
• Como se guardan los datos si son muy grandes. Y como lo hacemos de manera
eficiente?
• Como arreglamos errores, datos faltantes, errores inconsistentes,...
• Como integramos los datos
76
muy sencilla que se puede distribuir, podemos hacer partición horizontal. Se pueden
procesar de manera independiente y paralela.
También esta el problema que el schema es fijo, si queremos añadir un análisis nuevo
habría conflicto con las tablas relacionales que se tienen. Los que hacen análisis sobre
estos datos tienen que tener conocimiento del schema.
77
• Si ponemos todos los datos sin ninguna estructura ni criterio lo que podemos tener
es un Data Swamp, si no podemos orden tendremos un sistema como un Desktop
de cada uno. No hay una manera de distinguir los datos.
• Aunque las transformaciones para hacer el análisis son mas complejas. Normalmente
no se reutiliza por los diferentes analistas. Mucha redundancia.
• A la hora de introducir los datos necesitamos metadatos que nos permitan entender
un poco que hay en los datos. En lugar de acceder solamente por el nombre de
fichero saber también los atributos/esquema de los datos que contiene.
• Desarrollar mecanismos para gestión y procesamiento de los datos de manera
automática.
Paquet: no solo se pueden utilizar en la Landing Zone, sino que se pueden trasladar
al resto de zonas dependiendo de su implementación. Con Paquete se reduce el espacio
de memoria de los ficheros al tener métodos de optimización y tener un almacenamiento
por columnas.
Lo que hace es un horizontal partition pero luego se definen row groups pero para
cada una de las particiones estas se guardan por columnas. Tenemos un header y un
footer, Nos permite conocer los tipos de datos que tenemos y luego también tenemos
algunas estadísticas como min, max, avg.
Según los usuarios que acceden al cloud, se tienen Data Farms en diferentes regiones
del mundo y es mas óptimo a la hora de acceder a los datos. Otra ventaja es que pagas
por lo que usas. El coste es determinado por el tiempo de uso de la herramienta. No se
malgastan recursos como en el caso de los Warehouses.
Drawbacks
• Inconsistencias entre data lake y data warehouse. Mantenerlo constante es dificil y
costoso.
• No hay un soporte para frameworks complejos de análisis de datos avanzado.
• Coste menor por la elasticidad, pero dado que tenemos 2 layer arquitectura por el
data lake y DW podemos tener redundancia de los datos.
78
11.1.6 4th gen: Lakehouses
Un Lakehouse, combinar de alguna manera el Data Warehouse y el Data Lake. Se
necesitan muchos metadatos. Se usa parquet pero muy mejorada. Se proporciona alguna
característica de los DW y todas las de Data Lakes.
79
Appendix A Theoretical questions
1. Give examples of metadata that can be used at every step of the
Knowledge Discovery in Databases process.
• Selección de Datos:
– Datos de Validez: Información sobre la validez de los datos.
– Descripción de la Fuente de Datos: Información sobre la fuente de los
datos, incluyendo su origen, formato y método de acceso.
– Marca de Tiempo de la Recopilación de Datos: Cuándo se recopilaron
o extrajeron los datos.
– Método de Muestreo de Datos: Detalles sobre cómo se muestrearon los
datos, si es aplicable.
– Evaluación de la Calidad de Datos: Metadatos que indican la calidad de
los datos, incluyendo evaluaciones de completitud, precisión y confiabilidad.
• Preprocesamiento de Datos:
– Reglas de Negocio
– Registros de Limpieza de Datos: Registros de las operaciones de limpieza
de datos realizadas, como el manejo de valores faltantes y valores atípicos.
– Descripciones de Transformación de Datos: Información sobre cómo se
transformaron, normalizaron o codificaron los datos.
– Notas sobre Ingeniería de Características: Documentación de decisiones
de creación o selección de características.
– Metadatos sobre Reducción de Datos: Si se aplicaron técnicas de reduc-
ción de dimensionalidad, metadatos sobre el método de reducción y los
parámetros utilizados.
• Minería de Datos y Aprendizaje Automático:
– Parámetros de Entrenamiento del Modelo: Detalles sobre los parámetros
utilizados para entrenar modelos de aprendizaje automático.
– Métricas de Rendimiento del Modelo: Métricas utilizadas para evaluar el
rendimiento del modelo (por ejemplo, precisión, puntuación F1).
– Versionamiento del Modelo: Seguimiento de diferentes versiones de modelos
junto con sus hiperparámetros.
– Puntuaciones de Importancia de Características: Información sobre qué
características tuvieron un mayor impacto en las predicciones del modelo.
• Evaluación e Interpretación:
– Criterios de Evaluación: Explicación de los criterios utilizados para evaluar
los resultados de la minería de datos o el aprendizaje automático.
– Notas de Interpretación: Documentación de percepciones e interpretaciones
obtenidas del análisis de datos.
– Metadatos de Implementación del Modelo: Información sobre cómo y
dónde se implementa el modelo para uso práctico.
– Información sobre el Ciclo de Retroalimentación: Si corresponde,
metadatos sobre cómo los resultados influyen en la toma de decisiones y la
futura recopilación de datos.
80
2. Enumerate the advantages of having separate files (e.g., CSV) to be
analyzed and compare it against the advantages of having a DBMS.
3.1 Subject-oriented: puede haber duplicación de datos al usar las mismas tablas en
distintos temas.
3.2 Integrated: Porque integramos datos de diferentes fuentes, no solo de los datos
operacionales que tenemos sino también de webs, etc. y por lo tanto el conjunto de
datos es mucho más grande.
3.4 Non-volatile: Porque no borramos nada, lo único que hacemos es añadir. Si quer-
emos modificar alguna cosa lo que hacemos es añadir una nueva versión del dato.
81
Appendix B OLAP and the Multidimensional Model
B.1 Theoretical questions
1. Briefly explain the difference between the different kinds of multidimen-
sional schemas:
a) Star vs. Snowflake
El esquema estrella tiene la tabla de hechos y las tablas de dimensiones alrededor
con relaciones de muchos a uno. A diferencia del esquema snowflake, en el estrella no
aparecen las jerarquías de agregación de las dimensiones. Por lo que dan más información
al usuario.
b) Star vs. Galaxy
El esquema de galaxia son un conjunto de esquemas de estrellas, por lo que hay más
de una tabla de hechos, que comparten algunas dimensiones. Estás interconnectadas.
82
B.2 Problems
1. Identify factual and dimensional information in the following CSV
sample file, and create a conceptual multidimensional schema.
Una solución posible puede ser la tabla de hechos Detención con el número de
identificador del delito y las tablas de Distrito y Tipo como dimensiones. Eso si, si se
añade un nuevo tipo de delito, se tiene que añadir a la tabla de hechos.
Sino podría ser la tabla de hechos Detención con todos los tipos de delitos como
variables booleanas y únicamente la tabla Distrito como dimensión.
83
3. Identify some multidimensional schema (i.e., fact subject of analysis and
its corresponding analysis dimensions) in the next UML class diagram.
84
5. Given the multidimensional schema, the sequence of multidimensional
operations below, and the equivalent SQL query, justify if they corre-
spond to each other. If they don’t, briefly explain why and how the SQL
query should be fixed.
• A:=Roll-up(Buys,[Link],Sum)
• B:=Roll-up(A, [Link],Sum)
• C := Roll-up(B, [Link],Sum)
• D := ChangeBase (C, { Providers })
• E:=Selection(D, city="Barcelona”)
• F := Projection(E, #copies)
• R := Drill-down(F, [Link])
85
WHERE [Link] = [Link] AND [Link] = [Link] AND [Link] = [Link]
AND [Link] = ’BARCELONA’
GROUP BY [Link]
ORDER BY [Link];
86
1. • A:=Roll-up(borrows, [Link], Sum)
• B:=Roll-up(A, [Link], Sum)
• R:=Selection(B, [Link]=’January’)
SELECT [Link], [Link], [Link], SUM(b.#DaysBorrowed)
FROM Borrows b, Time t, Users u
WHERE [Link] = [Link] AND [Link] = [Link] AND [Link] = ’January’
GROUP BY [Link], [Link], [Link]
ORDER BY [Link], [Link], [Link]
2. • A:=Roll-up(buys,[Link],Sum)
• B:=Roll-up(A, [Link],Sum)
• C := Roll-up(B, [Link],Sum)
• D := ChangeBase (C, { Providers })
• R := Projection(D, #Copies)
SELECT ’AllProviders’, SUM(bu.#copies)
FROM Buys bu
3. • A:=Roll-up(borrows,[Link],Sum)
• B:=Roll-up(A, [Link],Sum)
• C := ChangeBase(B, { Books, Time })
• D := Drill-across (C, buys )
• R := Projection(D, Cost)
SELECT [Link], [Link], (’AllProviders’,) SUM([Link])
FROM Borrows b, Books bo, Buys bu
WHERE [Link] = [Link] AND [Link] = [Link] AND [Link] = [Link]
GROUP BY [Link], [Link]
ORDER BY [Link], [Link]
Hay que mirar el nivel de agregación (los atributos de agregación en el GROUP BY).
Como userID no aparece, el nivel de agregación es AllUsers. Se pueden eliminar las
dimensiones porque la relación es de FK y PK y no hay diferencias de tuplas.
87
7. Identify the problem in this sequence of algebraic multidimensional
operations, and briefly explain how you would solve it.
Escogería el esquema de estrella A ya que nos evitamos hacer más joins. Las
tablas de Dia, Mes y Año están juntadas en una sola tabla de Fecha. Aunque se
repitan muchos datos es la mejor opción. Tiene algunos problemas ya el número de
filas de la tabla de Fecha puede aumentar bastante, pero no superaría la cantidad
de datos de la tabla de hechos.
• A:=Roll-up(Buys,[Link],Sum)
• B:=Roll-up(A, [Link],Sum)
• C:=Roll-up(B, [Link],Sum)
• D := ChangeBase (C, { Providers })
• E := Projection(D, #copies)
• R:=Drill-down(E, [Link])
88
SELECT [Link], SUM([Link])
FROM Providers p, Buys bu
WHERE [Link] = [Link]
GROUP BY [Link]
ORDER BY [Link];
10. Give the relational representation (i.e., tables and their corresponding
integrity constraints) of the geographical dimension for a data mart in
United Nations, so that it allows to keep track of changes in territo-
ries. Assume you only need to keep track of countries and their first
administrative level (e.g., Autonomous communities in Spain). We would
like to consider the split of countries (like in the case Catalonia would
become independent), as well as annexations (like the case of Crimea
peninsula by Russian Federation, assuming that peninsula was already
a pre-existing component of Ukraine at the first administrative level).
Briefly justify your answer and explicit any assumption you make.
Territories(Country, FAL)
Tenemos diferentes opciones, una de ellas es añadir una columna para cuando
haya un cambio en los territorios. En el caso que haya cambiado esa columna tendría
el valor anterior y en el caso que no tendría valor null.
Territories(Country, FAL, OldFAL)
Otra opción sería añadir el campo de valid time para saber cuando se ha pro-
ducido el cambio y poder ver la evolución, este caso es más difícil pero generaliza
mejor, podemos poner más cambios.
Territories(Country, FAL, ValidTime)
• A:=Projection(Buys, Cost)
• B:=Roll-up(A,[Link],Sum)
• C := Selection(B,Province=’Barcelona’)
• D:=Drill-down(C,[Link],Sum)
• E:=Selection(D,TimeID=’20210115’)
• R:=ChangeBase(E, { Providers,Books } )
89
SELECT [Link], [Link], [Link], SUM([Link])
FROM Books bo, Time t, Providers p, Buys bu
WHERE [Link] = [Link] AND [Link] = [Link] AND [Link] = [Link]
AND [Link] = ’BCN’ AND [Link] = ’20210115’
GROUP BY [Link], [Link], [Link]
ORDER BY [Link], [Link], [Link];
12. Identify the main problem in the multidimensional schema below, and propose a
solution to solve it. You should assume athletes do not change the club in the middle of
the year.
El principal problema, desde un punto de vista relacional, es que hay una violación
de la clave foránea ya que esta es NULL, no puede ser ya que la clave primaria a la que
referencia no puede ser NULL. Hay un error de completez, deberíamos añadir valores
ficticios para que cuando agreguemos de el valor correcto. Por ejemplo si agregamos
el income por clubes no nos dará el valor total de income ya que hay deportistas que
no tienen euqipo. Deberíamos añadir a los deportistas individuales un valor fantasma
como ’Individual’ en la tabla que apunte a la dimensión.
13. The multidimensional schema below corresponds to events in football matches with
and without ball (e.g., pass, tackling) involving players with any role in the team
(e.g., goalkeeper, defender). Write a cube-query (SQL) over it. If you cannot do it,
briefly explain why.
No tiene atributos en la tabla de hechos, no da información . P.e no podemos hacer
agregaciones. Podemos contar número de faltas, goles, etc. (factless fact). Pero ninguna
consulta más.
90
Appendix C Extraction, Transformation and Load
C.1 Theoretical questions
1. Name three extraction mechanisms using exclusively the DBMS and
briefly explain the requirements each of these pose on it.
• Trigger-based
• Log-based: dietario donde se guardan todas las operaciones de la base de datos
por si se va la luz de manera que se puede reejecutar todo.
• Timestamp: Si estamos delante una BD temporal y tiene uns gestion de datos
temporal podemos ver qué se ha modificado desde la última carga que hicimos
en el DW.
C.2 Problems
1. A worldwide life insurance company, performs periodically a check for
all its customers of the crime rate in their city of residence (by using
an external DB with CrimeIncidence registry) in order to adapt their
policies accordingly.
• The first problem is that the CrimeIncidence registry is using city codes,
while the company’s Customer DB table stores city names instead.
• The company is specifically interested in high severity incidences (those
that can yield in customer death).
• The CrimeRate is calculated as the total number of incidences in the
city divided by the city’s population.
91
a. Propose possible performance optimizations of the ETL flow.
2. Given the ETL below, where the stickers indicate the attributes and conditions of
the nearest node, briefly explain how you would optimize its performance (a.k.a.
execution time) or justify why you think it is already optimal. Explicit any assump-
tion you need to make and annotate any change in the same diagram to facilitate
the explanation.
Primero de todo podríamos mover el filtro por origen antes del primer join para
filtrar directamente desde accidentes. De esta manera recudimos el número de filas antes
de entrar al join. También podemos mover el group by antes del segundo join, puede
parecer que no ya que no tenemos el atributo de District porque se obtiene de el csv
Districts, pero podemos suponer que el ID_district distingue unívocamente el distrito y
por lo tanto podemos hacerlo. Por último también podríamos seleccionar solo los campos
que necesitamos en vez de cargar tantos atributos de la BD.
92
Appendix D Data Quality
D.1 Problems
1. Compute the completeness (QCm (R)) of the following tables:
(a) 50%
ID A B C D E
1 a1 b1 c1 d1 e1
2 a2 b2 c2 d2 e2
3 a3 b3 c3 d3 e3
4 a4 b4 c4 d4 e4
5 a5 b5 c5 d5 e5
6 null b6 c6 d6 e6
7 a7 null c7 d7 e7
8 a8 b8 null d8 e8
9 a9 b9 c9 null e9
10 a10 b10 c10 d10 null
(b) 90%
ID A B C D E
1 a1 b1 c1 d1 e1
2 a2 b2 c2 d2 e2
3 a3 b3 c3 d3 e3
4 a4 b4 c4 d4 e4
5 a5 b5 c5 d5 e5
6 a6 b6 c6 d6 e6
7 a7 b7 c7 d7 e7
8 a8 b8 c8 d8 e8
9 a9 b9 c9 d9 e9
10 null null null null null
2. Compute the accuracy (QA (R)) of the following table, ignoring all attributes but
A. Consider that the true value of attribute A is the inverse of the ID (i.e., ID−1
) and ϵ = 0.3 :
ID A B C D E
1 1 b1 c1 d1 e1
2 0.9 b2 c2 d2 e2
3 0.8 b3 c3 d3 e3
4 0.7 b4 c4 d4 e4
5 0.6 b5 c5 d5 e5
6 0.5 b6 c6 d6 e6
7 0.4 b7 c7 d7 e7
8 0.3 b8 c8 d8 e8
9 0.2 b9 c9 d9 e9
10 0.1 b10 10 c10 d10 e10
93
|1/1 − 1| <= ϵ
|1/2 − 0.9| > ϵ −→ +1
|1/3 − 0.8| > ϵ −→ +1
|1/4 − 0.7| > ϵ −→ +1
...
QA (R) = 5/10 = 0.5
3. Compute the timeliness (QT (X)) of each of the attributes A, B, and C of the
following table, considering that A changes once per second (i.e., fu (v) = 1 ), B
changes once every 10 seconds (i.e., fu (v) = 10
1
), C changes once every 100 seconds
(i.e., fu (v) = 100 ); and the different values changed depending on the id of the
1
row and the attribute ageA (v) = id · 100 seconds, ageB (v) = id · 10 seconds, and
ageC (v) = id seconds:
ID A B C D E
1 a1 b1 c1 d1 e1
2 a2 b2 c2 d2 e2
3 a3 b3 c3 d3 e3
4 a4 b4 c4 d4 e4
5 a5 b5 c5 d5 e5
6 a6 b6 c6 d6 e6
7 a7 b7 c7 d7 e7
8 a8 b8 c8 d8 e8
9 a9 b9 c9 d9 e9
10 a10 b10 c10 d10 e10
10
1 X 1
QT (A) = · = 0.002913
10 1 + id · 100
id=1
10
1 X 1
QT (B) = · = 0.20198
10 1 + id
id=1
10
1 X 1
QT (C) = · = 0.94857
10
id=1
1
1 + 100 · id
1
QT (R) = · (QT (A) + QT (B) + QT (C) + QT (D) + QT (E))
5
4. Compute the consistency (QCn (R, BR)) of the table considering the set of business
rules BR contains these:
• All rows must have its id number in all the values.
• All values in a column must start with the letter of the corresponding attribute.
94
ID A B C D E
1 a1 b1 c1 d1 e10
2 a2 b2 c2 e2 e2
3 a3 b3 k5 d3 e3
4 ab ba c4 d4 e4
5 a5 b5 c5 d5 e5
6 a6 b6 c6 d6 e6
7 a7 b7 c7 d7 e7
8 a8 b8 c8 d8 e8
9 a9 b9 c9 d9 e9
10 a10 b10 c10 d10 e10
5. Which logic property (or properties) of data quality rules is (are) violated by the
given relational schema? Briefly explain why.
95
1. Falta primary key en la tabla flights, pero esto no afecta en nada en las propiedas
lógicas (no viola ninguna de las reglas), esto no significa que esté bien.
2. Los dos últimos checks de la tabla flights son contradictorios, pero nos salva
que duration puede ser NULL y por lo tanto podríamos inserir filas.
3. arrivalAirport tiene que ser BCN y hace referencia a Airports donde la id
tiene que ser diferente que BCN. Nos podría salvar que se permetiesen valores nulos
en arrivalAirport pero pone NOT NULL.
4. El check en Flights sobre que departureAirport sea diferente que BCN es
redundante, ya que es clave foránea a Airports y allí ya se comprueba, por lo
tanto deberíamos eliminar la constraint de la tabla Flights.
Las tres tablas están vivas pues se puede agregar por lo menos una fila en cada una de
ellas. Las restricciones de integridad no presentan problemas. Por ende el esquema es
satisfactible.
La view no está viva pues según las restricciones de las tablas, no tendrá la vista
ninguna fila. Esto sucede porque en la vista se deben mostrar las filas de t en las cuales
no haya pilotos de t (que hayan reportado) en la tabla p. Esto claramente nunca se
satisface, pues el piloto de t referencia a la tabla p.
96
(b) Given the relational schema above, is the state represented with the instances of
the Pilots and Airports tables below, reachable? Briefly explain why.
7. Determine the liveliness of the next three tables. Briefly justify your answer.
97
8. For the database schema defined below, list all the Intra-Attribute, Intra-Tuple,
Intra-Relation, and InterRelation integrity constraints defined in the schema.
• Intra-Attribute:
– Comprobación de valores NOT NULL
– Que sean de un dominio determinado. e.g. INT, DATE.
• Intra-Tuple:
– El CHECK sobre executionPlace no se puede hacer ya que
executionPlace no es un atributo de la tabla, sino que se refiere a un valor
de ckAirportOrder. Por lo tanto solo el segundo check.
• Intra-Relation:
– Ambas PRIMARY KEY de las dos tablas y el UNIQUE de la relación
Aircrafts.
• Inter-Relation:
– La FOREING KEY de aircraftRegistration hacia la tabla Aircrafts
Comprobar que tanto los ministerios como las farmacéuticas nos dan datos presentes.
Los números tendrían que coincidir, si un ministerio dice que ha enviado 5 medicamentos
de la rabia a España, la farmacéutica debería poner que ha pedido 5 medicamentos. Una
manera de medir esto sería medir como de cerca se encuentran estos números.
La accuracy, timeliness, etc. son métricas útiles pero no son las únicas. Hay que
adaptar las métricas al problema que tenemos.
98
Appendix E Schema and Data Integration
E.1 Theoretical questions
1. Name the three major steps to solve semantic heterogeneity.
Schema alignement, schema mapping, entity resolution, record merging
4. Which is the worst-case cost of the R-Swoosh algorithm and when would
it happen?
El peor caso es cuando todos tienen similitud pero no nos damos cuenta hasta el
final del bucle, es decir, siempre encontramos como similar el último elemento del
output.
La función de similitud se ejecuta más veces, pues la complejidad del algoritmo
es cuadrática. Mientras que en el mejor caso, la función de merge se ejecuta tantas
veces como el orden de cardinalidad de la entrada (todos coinciden).
E.2 Problems
1. Suppose that there are two dealers A and B, who respectively use the
schemas:
We define a global schema like the first one, except that we record the
option of having an automatic transmission, and we include an attribute
that tells which dealer has the car.
99
Dealer A:
Dealer B:
b) If dealer A wants to insert a new row through the global schema, what
SQL insert statements should it use?
INSERT INTO AutosGlobal VALUES (serialNox, modelx, colorx,
autoTransx, ’Dealer A’)
iii. Find the serial number of the blue cars from dealer A.
SELECT [Link] AS serialNo
FROM Cars c
100
WHERE [Link] = ’Blue’
Template Query
SELECT [Link], [Link], [Link],
[Link], ’DealerA’ SELECT seria1No, model, color, autoTrans, ’dealerA’
FROM Cars c, GtoL g FROM AutosGlobal
WHERE [Link] = [Link] WHERE color=’$c’;
AND [Link]=’$c’;
a) Suggest two other schemas (substantially different but not adding more
information) that computer companies C and D might use to hold data like
that of companies A and B.
C: ComputerPack(number, proc, speed, memory, hd, screen,
maxResX, maxResY)
101
Computers
SELECT [Link]
FROM Computers c
WHERE [Link] = 512 AND [Link] = 80
Monitors
SELECT [Link]
FROM Monitors m
WHERE [Link] = 19
Systems
SELECT [Link]
FROM Systems s
WHERE [Link] = 512 AND [Link] = 81,920 AND [Link] = 19
ii. Find the system with a Pentium-IV processor, running at 3.0 giga-
hertz with a 22 -inch monitor and a maximum resolution of 1600-by-1050.
Computers
SELECT [Link]
FROM Computers c
WHERE [Link] = ’Pentium-IV’ AND [Link] = 3.0
Monitors
SELECT [Link]
FROM Monitors m
WHERE [Link] = 22 AND [Link] ≤ 1600 AND [Link] ≤ 1050
Systems
SELECT [Link]
FROM Systems s
WHERE [Link] = 22 AND [Link] = 3
102
iii. Find all systems with a G5 processor running at 1.8 gigahertz, with 2
gigabytes of memory, a 300 gigabyte disk, and a 19-inch monitor.
Computers
SELECT [Link]
FROM Computers c
WHERE [Link] = ’G5’ AND [Link] = 1.8 AND [Link] = 2 AND [Link]
= 300
Monitors
SELECT [Link]
FROM Monitors m
WHERE [Link] = 19
Systems
SELECT [Link]
FROM Systems s
WHERE [Link] = 1.8 AND [Link] = 2 AND [Link] = 300 AND
[Link] = 19
33
Notice that globalColor and localColor are both alternative keys of the table and hence their relationship
is one-to-one.
103
4. Consider an integrated system with two different sources (e.g., Vueling-
V and Airbus-A). The tables are the following and the mapping between
the local and global schemas is given using GAV with relational algebra
expressions as follows ("get_date" is a function with the obvious mean-
ing):
Assuming that both databases reside in the same RDBMS (i.e., wrappers
are not needed), give the SQL query generated by the mediator on receiving
the following global one:
SELECT DISTINCT get_date([Link]) AS day, [Link] AS
aircraft
FROM Hops h JOIN Planes p ON [Link] = [Link]
WHERE [Link] > 200 AND [Link] = 21 AND [Link] = ’BCN’
104
5. Consider the following table with instances about mobile phones offered
for sale extracted from different online retail platforms during the Black
Friday promotion.
The table contains information about the retail platform from where the
data is extracted (source), the title of the product in the web page (title),
a unique code of the model where available (model_code), and the offered
price of the product (price). To integrate these data, the R-Swoosh algo-
rithm is considered.
4
i. Without considering other attributes, is using Edit distance on
attribute title a good choice for a match function?
A. If so, justify your answer and propose the possible threshold.
B. If not, justify your answer.
No sería una buena idea. Por ejemplo nos gustaría unir IPHONE X con APPLE
IPHONE X, cuya distancia de Edit es 5. Pero si marcamos un threshold como este hay
otros modelos que identificará como similares pero que no son, como por ejemplo el caso
de HUAWEI P8 con HUAWEI P8 LITE, que tienen una distancia de edit 4.
105
ii. Given the characteristics of the attribute model_code, which of the
following combinations of similarity and merge functions should be used if
this is the only attribute considered in the entity resolution process.
Similarity
Edit distance
Hamming distance
Substring matching 5
Exact string matching
Merge
Multi-valued 6
Source trustworthiness
Generate null 6
34
[Link]
4
Similar if one string is contained inside another or viceversa (e.g., abbccd ≈ bccd)
6
For multi-valued attributes, consider they are similar if at least one value from the list matches.
106
iv. Now, the DW administrator considers that instead of using individual
attributes alone in the similarity function, uses a combination of several
attributes.
Given that the similarity and merge functions in the table above over indi-
vidual attributes, and considering data instances given in the mobile phone
table, define possible combinations that can be used for entity resolution
in order to merge tuples of same mobile phone models and list all offered
prices for them. Give examples how these features would work.
Title
editDistance (x, y) 5
dist(IPHONE X, APPLE IPHONE X) = = = 0.36 > 0.25
max( length (x), length (y)) 14
Model code
El código A1901 es el mismo por lo tanto las detectamos como similares y nos quedamos
con cualquiera.
Price
min(r, s) 650
dist(650, 700.55) = = = 0.928 > 0.9
max(r, s) 700.55
En este caso si que los consideramos similares ya que supera el threshold y cogemos los
dos valores.
37 editDistance (x,y)
Edit distance relative to the length of the strings is calculated as follows: max( length (x), length (y))
107
6. Consider the following table with instances about travel arrangements
offered for sale, extracted from different online travel platforms during
the Christmas holidays promotion.
The table contains information about the travel platform from where the
data are extracted (source), the title of the offer in the web page, a destina-
tion of the trip which is a multivalued attribute (assuming the destination
names are same in all the sources), duration where the units may vary
(days/weeks), type of the offer if available - multi-valued attributed with
fixed and unique type names (enum), and the offered price of the product in
different currencies depending on the location of the travel agency (for some
offers the price is given only on the explicit demand).
To compare similar offers, and present them jointly to the user, the
R-Swoosh algorithm is considered for integrating these sources.
Similarity functions
Substring matching 8
Exact string matching
Multi-valued4
Substring matching: funcionaría bastante bien para la mayoría de casos como New
York, Washington y Beijing, Xi’ian pero fallaría en casos como por ejemplo New York
que lo juntaría con viajes combinados que contienen New York como New York, Cancun.
Exact string matching: funcionaría solo para los casos que las distinaciones son
idétnticas pero se dejaría el caso de por ejemplo Beijing, Xi’ian con Shanghai, Beijing,
Xi’ian.
108
a) Flight(flightNum: String, origin: Airport, destination: Airport)
b) FlightEnd(flightNum: String, type: {Origin, Destination}, place: Airport)
Sí que representan el mismo objecto del mundo real, en este caso un vuelo concreto.
En el primer caso (Flight) este vuelo está definido por el aeropuerto de llegada y salida,
mientras que en el segundo (FlightEnd) está definido por la ciudad de origen (Origin)
y el destino (Destination). En cualquier caso, se refieren a lo mismo pero con diferentes
atributos.
109
8. Given two book providers with the database schemas below, write one
SQL sentence returning the data in both schemas and loading dimen-
sion table BooksDim (below). Specifically: ID, Author, Edition Year,
NobelPrize, Genre. Consider that some books can be offered by both
providers at the same time. In this case, all the attributes except the
Genre should prevail from the Provider1, if available. In case Genre is
not available, it should be marked as "Miscellaneous".
SELECT FROM P1_Books, P1_Nobels, P2_Books
110
1 Distributed Data
1.1 Theoretical questions
1. Give five types of data or software resource that can usefully be shared. Give
examples of their sharing as it occurs in practice in distributed systems.
Videojuegos, internet, etc
3. The INFO service manages a potentially very large set of resources, each of which
can be accessed by users throughout the Internet by means of a key (a string
name). Discuss an approach to the design of the names of the resources that
achieves the minimum loss of performance as the number of resources in the ser-
vice increases. Suggest how the INFO service can be implemented so as to avoid
performance bottlenecks when the number of users becomes very large. 1
Give arguments for and against allowing the client requests to be executed concur-
rently by the server. In the case that they are executed concurrently, give an example
of possible "interference" that can occur between the operations of different clients.
Suggest how such interference may be prevented.
6. Explain what is (a) a distributed system, and (b) a parallel system. Compare both
of them (i.e., what has one and not the other and vice-versa).
un sistema distribuido tiene paralelismo si se puede gestionar, pero el paralelismo
no implica que sea distribuido
7. Which kind of database is this according to the distribution of data?
41
From G. Couloris et al. Distributed Systems: Concepts and Design, 5th Ed. Addisson-Wesley, 2012
111
8. Which two kinds of schema information contains the Global Conceptual Schema
that does not contain the Local Conceptual Schema in the Extended ANSI-SPARC
Architecture for DDBMS?
9. In the context of distributed data management, name the four big challenges that
need to be carefully considered in the presence of distribution from the tenant/user
point of view. I.
II.
III.
IV.
10. Name the three characteristics of fragmentation that make it correct, and for each
of them give an example of fragmentation schema where it is not fulfilled.
(a)
(b)
(c)
11. Which is the main problem in having replicas, and which is the innovation
introduced by some NOSQL tools to solve it.
• Problem: EL problema es que las replicas estén sincronizadas, no puede ser que una
copia diga A i la otra B. Que es una cosa se modifica se modifique en todas las copias
a la vez, tener el mismo resultado. EN sistemas distribuidos es mas difícil, ya que
tenemos una red que puede fallar i hacer que las replicas no se puedan sincronizar,
en centralizado es mas fácil. Para solucionar esto se hace eventually consistent. Si el
sistema deja de recibir modificaciones, este converge a un estado consistente, pero
esto casi nunca pasa ya que casi siempre hay modificaciones que hay que propagar.
• Innovation:
12. How might the clocks in two computers that are linked by a local network be syn-
chronized without reference to an external time source? What factors limit the
accuracy of the procedure you have described? How could the clocks in a large num-
ber of computers connected by the Internet be synchronized? Discuss the accuracy
of that procedure. 1
Hay un axioma que dice que cualquier mensaje llega después de ser enviado,
obviamente. Cualquier mensaje que se envía lleva la hora del reloj de la maquina
que la envía. Quien lo recibe, si esta por detrás de este reloj, como sabe que esto no
puede ser porque la hora que se ha enunciado a tardado un tiempo esta maquina
que lo recibe atrasado su reloj. Esto no consigue que todos los relojes vayan a la
112
vez pero intentan todos sincronizarse. Nunca se resolverá el problema pero como
mínimo no estaremos desencaminados. Si el sistema que recibe tiene una hora mas
tardía no se puede hacer nada.
13. What is the difference between query cost and query response time ...
a) En centralizados el coste de la query es el numero de lecturas i escrituras en
disco, el coste se mide en accesos a disco I/O, también es proporcional a los datos de la
consulta. El tiempo de respuesta es el numero de accesos a disco por una "constante"
de tiempo de acceso a disco i obtenemos el tiempo de ejecución.
b) También tenemos que añadir el impacto del paralelismo, ahora no podemos mul-
tiplicar por una constante. Si necesito saber el tiempo de respuesta necesito saber el
tiempo en secuencial.
14. Name the two factors that make impossible having linear scalability according to
the Universal Scalability Law.
(a)
(b)
1.2 Problems
1. Briefly explain (a) which fragmentation strategy has been applied for the tables
below and whether this fragmentation strategy is (b) complete, (c) disjoint and (d)
allows to reconstruct the global relations (if so, (e) indicate the operation).
Global Relations
Fragments
K1 = Kids[kidId, name]
K2 = Kids[kidId, address, age]
T1 = Toys(price ≥ 150)
T2 = Toys( price < 150)
R1 = Requests ⋉T1
R2 = Requests ⋉T2
1. Vertical. Completa ya que toos los atributos estna en los fragmentos, tambien es
disjunta ya que aunque tengamos la clave primaria no tenemos opción, la repetimos para
que pueda ser reconstruible la tabla original. En este caso la reconstruimos haciendo
una join.
2. Horizontal. Completa si no hi han nuls, pero si el prescio puede tenr valores nulos
estos no pueden ser ni > 150 ni < 150, no seria correcta. Si que es disjunta ya que el
igual solo esta en una banda y por lo tanto no se solapan los datos, una fila esta en T1 o
esta en T2 pero no en las dos a la vez. Si que es reconstruible si ponemos que no admite
nuls el precio.
3. Horizontal derivada, porque deriva de lo qu hagamos hecho antes con la tabla
de Toys. SI es completa o no depende de T1 y T2, lo que hagamos dicho antes ahora
decimos lo mismo, si antes hemos dicho que no tenemos valores nulos y es completa
ahora tambien lo es, si antes hemos dicho que no era completa ahora tampoco lo es.
Disjunta lo mismo, lo mismo que hagamos dicho de T1 y T2, se cogen las propiedadas
de antes. Reconstruible igual (con union).
2. You are a customer using an e-commernce based on heavy replication (e.g.,
Amazon):
a) Show a database replication strategy (e.g., sketch it) where:
113
i. You buy an item, but this item does not appear in your shopping cart.
ii. You reload the page: the item appears.
⇒ What happened?
Estem en una situació asíncrona, eventually consistent. Cuando tenemos replicas de
los datos, la modificacion se propaga de forma asincrona. Lazy primary copy replication.
Tambien podria suceder en el caso de lazy distributed replication.
b) Show a database replication strategy (e.g., skecth it) where:
i. You delete an item from your command, and add another one: the shopping cart
shows both items.
Eventually consistent, concretament lazy distributed replication.
⇒ What happened? Will the situation change if you reload the page?
b) How long would a single random access (i.e., reading one tuple, of for example
100 bytes, through an index) take (i.e., response time), assuming we already have the
physical address? (in secs)
42
From S. Abiteboul et al. Web Data Management. Cambridge Press, 2011.
114
Figure 2: Shared-memory architecture
Type Latency Bandwidth
Disk ≈ 5 × 10−3 s(5millisec). At best 100MB/s
c) How long would it take (i.e., response time) to read 1TB with parallel access
(Figure 2)? Assume 100 disks (i.e., 100 replicas of the whole data) on the same machine
with shared-memory and infinite CPU capacity.
d) How long would a single random access (i.e., reading one tuple, of 100 bytes,
through an index) take (i.e., response time), assuming we already have the physical
address? (in secs)
Note 2: Exchanging through the Internet is slow and unreliable with respect to
LANs.
e) How long would it take (i.e., response time) to read 1TB with distributed access
(Figure 3)? Assume 100 shared-nothing machines (with all data replicated in each of
115
them) in a star-shape LAN in a single rack where all data is sent to the center of the
star in only one network hop.
f) How long would it take (i.e., response time) to read 1TB with distributed access
(Figure 3)? Assume 100 shared-nothing machines (with all data replicated in each of
them) in a star-shape cluster of machines connected through the Internet where all
data is sent to the center of the star in only one network hop.
g) How long would a single random access (i.e., reading one tuple, of 100 bytes,
through an index) take (i.e., response time) in the case of a LAN, assuming we already
have the physical address? (in secs)
h) How long would a single random access (i.e., reading one tuple, of 100 bytes,
through an index) take (i.e., response time) in the case of an Internet connection,
assuming we already have the physical address? (in secs)
a) Response time: 1T B/100M B/s = 10000s, Latency Time: 5 · 10−3 (Latency time
is insignificant)
b) Response time: 100B/100M B/s = 1/106 , Latency Time: 5 · 10−3 (Response time
is insignificant)
SRQ RANDOM
1T B 100
a) Centralized 100M B
+ 5 ∗ 10−3 100M B
+ 5 ∗ 10−3
1T B/100
b) Shared-memory 100M B
+ 5 ∗ 10−3 10−6 + 5 ∗ 10−3
1T B/100
c) Shared-nothing (LAN) with single rack 100M B
+ 2 ∗ 10−3 + 5 ∗ 10−3 10−6 + 5 ∗ 10−3 + 2 ∗ 10−3
1T B/100 100
d) Shared-nothing (INTERNET) 10M B
+ 10−2 + 5 ∗ 10−3 10M B
+ 10−2 + 5 ∗ 10−3
Entre una centralizada y una shared memory, cuantas mas maquinas pongo, vamos
mas rapido (en la vida real no es un creciemiento lineal). Poner mas maquinas cuando
lo que intento acceder es pequeño no sale a cuenta, no tiene un impacto significativo.
Share memory or share nothing con LAN dan practicamente los mismos resultados.
El beneficio es que es mas economico y mas escalable (share nothing).En internet, la
latencia y ancho de banda son muy variables y se puede llegar a perder los beneficios.
3
Hacer joins de tablas sin tener que crear nuevos archivos
4
Lenguaje declarativo: dices lo que quieres y encuentra la mejor manera de hacerlo, optimización de consultas
116
4. What are the main differences between these two distributed access plans? Under
which assumptions is one or the other better?
Access Plan A
Access Plan B
Figure 4: Distributed Access Plans
117
Depende del tiempo de latencia y transferencia de datos: En el A transfiere menos
datos de la tabla de ’Assigned’ porque hace la seleccion antes. En el peor caso sera igual
al de B en el caso de que ’manager’ tenga pocas ocurrencias.
⇒ Database setting:
• A distributed database with 5 sites (i.e., database nodes): S1 , S2 , S3 , S4 and S5 .
• 3 relations in the database R, S and T
• Each relation is horizontally fragmented in two fragments (we refer to them by the
name of the relation and a subindex, for example: R1 , R2 ). You can consider them
to be correct (i.e., complete, disjoint and reconstructible).
• Each fragment is replicated at all sites.
• We have the following query: Q1 = σ(R) ▷◁ σ(S) ▷◁ T
⇒ Process tree of the query:
118
6. Consider a left-deep process tree corresponding to a query, where each internal node
is a join, and every leaf a data source (e.g., relational table). Knowing that the tree
contains 9 nodes (including leaves), the system has as much parallelism capacity
as needed to run all the joins in pipelining mode (no other kind of parallelism is
available), which is the occupancy if the overall cost of the serial query is 4 seconds?
Explicit any assumption you need to make.
2.1.2 Problems
1. Consider the following implementation of the Cartesian Product with MapReduce
( ⊕ stands for concatenation) and answer the questions accordingly.
119
map(keyk, value v ) 7→
if input (k ⊕ v) = T
[(hT (k) mod D, k ⊕ v)]
[(0, k ⊕ v, . . . , (D − 1, k ⊕ v)] if input (k ⊕ v) = S
T × S =⇒ reduce(key ik, vset ivs) 7→
[ crossproduct (Tik , S) |
Tik = {iv | iv ∈ ivs ∧ input (iv)T },
S = {iv | iv ∈ ivs ∧ input (iv)S}]
120
Expected output
A −2− > C
D − 2− > C
B −2− > D
C −2− > B
43
Without reflexive edges like (A,A).
121
Provide the ordered list of Spark operations (no need to follow the exact syntax, just
the kind of operation and main parameters) you’d need to retrieve for each employee
his/her department information. Do not use SQL and minimize the use of other Python
libraries or code. Save the results in [Link].
3. Consider an error log file ([Link]) like the one bellow:
[Link]
20150323;0833;ERROR;Oracle
20150323;0835;WARNING;MySQL
20150323;0839;WARNING;MySQL
20150323;0900;WARNING;Oracle
20150323;0905;ERROR;MySQL
20150323;1013;OK;Oracle
20150323;1014;OK;MySQL
20150323;1055;ERROR;Oracle
Provide the ordered list of Spark operations (no need to follow the exact syntax, just
the kind of operation and main parameters) you’d need to retrieve the lines correspond-
ing to both errors and warnings, but adding Important: at the beginning of those of
errors (i.e., only errors). Do not use SQL and minimize the use of other Python libraries
or code. Save the results in [Link].
4. Assume that "spark" variable is a Spark session and the dataset . csv contains the
two columns "Color" and "Radius". Clearly identify the problems you find in the
following Spark code and propose some fix to obtain the expected result.
122
F = [Link]("dArea",[Link]("city"))
G = E · subtract(F)
H = G · select( "dArea")
result = D. subtract(H)
(a) State in natural language the corresponding query it would answer?
(b) Clearly indicate any mistake or improvement you can fix/make in the code? For
each of them give (1) the line number, (2) pseudo-code to implement the fix, and (3)
brief rationale.
6. Given two files containing the following kinds of data:
[Link] with fields: EmployeeID; EmployeeName; YearlySalary; CityOfResi-
dence; SiteOfWork EMP1;RICARDO;250000;MADRID;DPT1
EMP2;EULALIA;150000;BARCELONA;DPT2
EMP3;MIQUEL;125000;BADALONA;DPT3
EMP4;MARIA;175000;MADRID;DPT4
EMP5;ESTEBAN;150000;MADRID;DPT3
[Link] with fields: SiteID; DepartmentName; StreetNumber; StreetName;
City
DPT1;DIRECCIO;10;PAU CLARIS;BARCELONA
DPT2;DIRECCIO;8;RIOS ROSAS;MADRID
DPT3;MARKETING;1;PAU CLARIS;BARCELONA
DPT4;MARKETING;3;RIOS ROSAS;MADRID
Give a sequence of Spark operations in pseudo-code (resembling PySpark) to obtain
for each city where employees that work in a site of a department in Barcelona live, the
sum of the salaries of those employees. The result for the exemplary data would be:
MADRID; 400000
BADALONA; 125000
7. Consider three files containing the following kinds of data:
[Link]
EMP1,CARME,400000,MATARO,DEPT1,PROJ1
EMP2,EULALIA,150000,BARCELONA,DEPT2,PROJ1
EMP3,MIQUEL,125000,BADALONA,DEPT1,PROJ3
[Link]
PROJ1,IBDTEL,TV, 1000000
PROJ2,IBDVID,VIDEO,500000
PROJ3,IBDTEF,TELEPHONE, 200000
PROJ4,IBDCOM,COMMUNICATIONS, 2000000
[Link]
DEPT1,MANAGEMENT,10,PAU CLARIS,BARCELONA
DEPT2,MANAGEMENT,8,RIOS ROSAS,MADRID
DEPT4,MARKETING,3,RIOS ROSAS,MADRID
Provide the ordered list of Spark operations (no need to follow the exact syntax,
but just the kind of operation and main parameters) you would need to obtain the
departments with all employees assigned to the same project. The result must include
department number. Save the results in [Link]. In the previous example, the result
should be DEPT2 and DEPT4.
8. Consider two files containing the following kinds of data:
[Link]
EMP4;RICARDO;250000;MADRID;DPT4
EMP5;EULALIA;150000;BARCELONA;DPT5
EMP6;MIQUEL;125000;BADALONA;DPT5
EMP7;MARIA;175000;MADRID;DPT6
EMP8;ESTEBAN;150000;MADRID;DPT6
123
[Link]
DPT1;DIRECCIO;10;PAU CLARIS;BARCELONA
DPT2;DIRECCIO;8;RIOS ROSAS;MADRID
DPT3;MARKETING;1;PAU CLARIS;BARCELONA
DPT4;MARKETING;3;RIOS ROSAS;MADRID
Provide the ordered list of Spark operations (no need to follow the exact syntax,
but just the kind of operation and main parameters) you’d need to retrieve the list
of department IDs for those departments with workers from all cities where there are
employees. Save the results in [Link].
9. Consider three files relating to a bibliographic database: author. CSV relates
authors with papers (you may assume that author names are unique, that authors
have one or more papers, and that papers have one or more authors); [Link] gives
the title of a paper (you may assume a paper has one title, but one title may be
shared by many papers); and [Link] indicates which papers cite which other
papers (you may assume that each paper cites at least one other paper, that a
paper may be cited zero or more times, and that a paper cannot cite itself).
[Link]
AUTHOR PAPERID
... ...
C. Gutierrez GP2014
C. Gutierrez AGP2013
C. Gutierrez GZ2011
... ...
J. Perez GP2014
J. Perez AGP2013
J. Perez P2017
... ...
R. Angles AGP2013
R. Angles AKK2016
... ...
[Link]
PAPERID TITLE
... ...
GP2014 Semantics of SPARQL
AGP2013 Deduction for RDF
GZ2011 Graph databases
... ...
[Link]
PAPER CITES
... ...
GP2014 AGP2013
AGP2013 GZ2011
P2017 AKK2016
... ...
The headers are shown for illustration here. They do not need to be considered.
The count of self-citations for an author A, denoted self(A), is defined as the number
of citation pairs (P1 , P2 ) where A is an author of both. The count of citations given by
an author A, denoted give (A), is the count of citation pairs (P1 , P2 ) such that A is an
author of P1 . The count of citations received by A, denoted receive (A), is the count
of citation pairs (P1 , P2 ) where A is an author of P2 . The ratio of selfcitations to all
sel(A) self(A)
citations given and received are then defined, respectively, as give(A) and receive(A) . In
124
case that receive (A) = 0, you should omit the author A from the results (note that give
(A) cannot be 0 as an author must have at least one paper and a paper must have at
least one citation). We provide an example output for the input data:
Author SelfGiveratio SelfReceiveratio
C. Gutierrez 1.000 1.000
J. Perez 0.333 1.000
R. Angles 0.000 0.000
... ...
Headers are only shown for illustration. We will use Apache Spark to perform the
analysis and compute the output. You should not assume any ordering of the input files.
You do not need to order the output file in any particular way.
Given this input and desired output, design a Spark process to complete the required
processing. In particular, you should draw the high-level DAG of operations that the
Spark process will perform, detailing the sequence of transformations and actions. You
should briefly describe what each step does, clearly indicating which steps are transfor-
mations and which are actions. You should also indicate which RDDs are virtual and
which will be materialized. You should use caching if appropriate. You should provide
details on any functions passed as arguments to the transformations/actions you use.
125
126
127
128
129
130