TFG, Business Intelligence Data Lake
TFG, Business Intelligence Data Lake
TFG, Business Intelligence Data Lake
13 de enero de 2019
Esta obra está sujeta a una licencia de
Reconocimiento-NoComercial-SinObraDerivada
3.0 España de Creative Commons
FICHA DEL TRABAJO FINAL
This paper implements a Business Intelligence solution following the Data Lake
paradigm on Hadoop’s Big Data platform with the aim of showcasing the
technology for this purpose.
i
Traditional data warehouses require incoming data to be transformed before
being stored by means of an ETL process (Extract-Transform-Load) to adopt a
predefined data model.
However, the Data Lake paradigm proposes storing first the organization’s data
in its original format in such a way that they can later be transformed and
consumed by ad hoc processes based on the business needs.
Finally, there is a review of the advantages and disadvantages of deploying a
unified data platform for both Big Data and traditional Business Intelligence use
cases as well as the importance of using solutions based on open source and
open standards.
Business Intelligence, Data Lake, Data Warehouse, Big Data, Hadoop, ETL,
Schema-on-read, Hive
ii
Índice
1. Introducción .................................................................................................... 1
Hardware ....................................................................................... 11
Software ......................................................................................... 11
Topología ....................................................................................... 12
iii
3.2. Juego de datos “The complete journey” ................................................. 15
Descripción .................................................................................... 15
4
5. Implementación de la solución ..................................................................... 32
Arquitectura.................................................................................... 32
Componentes................................................................................. 33
Procesos ........................................................................................ 37
6. Conclusiones ................................................................................................ 63
7. Glosario ........................................................................................................ 67
8. Bibliografía ................................................................................................... 68
5
Lista de figuras
Página 2
• Un tipo de productos que sea fácilmente categorizable, de manera
que se facilite la generación de modelos predictivos.
Página 3
ID Tarea Inicio Fin Duración
11 Venta online 23/10/18 24/10/18 2
12 Visitas web 25/10/18 25/10/18 1
13 Diseño de solución 26/10/18 16/11/18 16
14 Data Mart 26/10/18 30/10/18 3
15 Cubo OLAP 31/10/18 02/11/18 3
16 Dashboard Ejecutivo 05/11/18 06/11/18 2
17 Dashboard Tactico 07/11/18 08/11/18 2
18 Dashboard Operacional 09/11/18 12/11/18 2
20 Big Data Analytics 13/11/18 14/11/18 2
19 Modelo predictivo 15/11/18 16/11/18 2
791 PEC-2 19/11/18 19/11/18 0
21 Implementación de solución 19/11/18 31/12/18 31
44 Diseño 19/11/18 22/11/18 4
22 Arquitectura 19/11/18 19/11/18 1
23 Componentes 20/11/18 20/11/18 1
24 Procesos 21/11/18 22/11/18 2
54 Entorno 23/11/18 12/12/18 14
57 Crear VM 23/11/18 23/11/18 1
56 Instalar Ubuntu 18.04 26/11/18 26/11/18 1
55 Instalar Hortonworks HDP 27/11/18 27/11/18 1
58 Configurar HDP 28/11/18 12/12/18 11
59 Ambari 28/11/18 28/11/18 1
60 Hive 29/11/18 29/11/18 1
61 Kafka 30/11/18 04/12/18 3
62 Kylin 05/12/18 07/12/18 3
63 Flume 10/12/18 11/12/18 2
64 Zeppelin 12/12/18 12/12/18 1
65 Desarrollo 13/12/18 31/12/18 13
66 Modelo de datos 13/12/18 14/12/18 2
45 Schemas Hive 13/12/18 13/12/18 1
49 Cubo OLAP Kylin 14/12/18 14/12/18 1
67 ETL 17/12/18 21/12/18 5
46 Batch RDBMS 17/12/18 18/12/18 2
47 Realtime Ventas 19/12/18 20/12/18 2
48 Realtime Website 21/12/18 21/12/18 1
69 BD Analytics 24/12/18 31/12/18 6
51 Consultas SQL 24/12/18 24/12/18 1
52 Spark-R en R-Studio 25/12/18 26/12/18 2
53 Recomendador compra 27/12/18 31/12/18 3
Página 4
ID Tarea Inicio Fin Duración
858 PEC-3 24/12/18 24/12/18 0
70 Análisis comparativo 01/01/19 02/01/19 2
72 Data Warehouse 01/01/19 01/01/19 1
74 Big Data sin DW 02/01/19 02/01/19 1
71 Conclusión 03/01/19 04/01/19 2
76 Para el futuro 03/01/19 03/01/19 1
75 Tendencias del mercado 04/01/19 04/01/19 1
Diagrama de Gantt
Página 5
Ilustración 1 Diagrama de Gantt
1.5. Sumario de los productos obtenidos
Página 8
2. Descripción de la empresa modelo
2.1. Modelo de gestión de la información de partida
Modelo de negocio
Página 9
utilizar técnicas habituales de reparto de comida rápida pero aplicadas a
la entrega de cestas de compra de pequeño tamaño.
Cadena de suministro
Página 10
Por otra parte, también preocupa la falta de control efectivo sobre las
tiendas, especialmente en la ejecución de acciones estratégicas, sobre
todo de marketing. El motivo principal es la estructura de recursos
humanos con la que cuenta la empresa, que debido al pequeño tamaño
de las tiendas no cuenta con personal de gestión con dedicación completa
y tiene un único coordinador de zona en cada localidad a las órdenes del
delegado regional.
Delegado
Regional
Coordinador
de Zona
Cajero
Cajero Cajero
Reponedor
Reponedor Reponedor
Encargado
Hardware
Software
Página 11
• Compras y almacén. Proporcionada por la propia central de
compras a la que pertenece la cadena de supermercados por lo
que se accede mediante su extranet.
Topología
IPSEC VPN
Extranet LAN
Clientes Repartidores
TPV Tiendas
Administración de la web
Workstation
Personal de Sede
Página 12
Como resultado, los Sistemas de Información y fuentes primarias de datos
escogidos son:
• Servidor web, que recoge la información las visitas (flat files con los
registros de acceso).
Así, un servicio web asociado a la tienda online publica los pedidos firmes
a una cola a la que está suscrito el servicio web que alimenta la aplicación
móvil que utilizan los repartidores.
1 https://www.dunnhumby.com/careers/engineering/sourcefiles
Página 13
Modelo de datos del registro de acceso del servidor web
Se basa en ficheros de texto plano que contienen una línea por cada
petición de acceso que ha recibido el servidor por parte de un navegador
web. La información capturada incluye:
• Fecha y hora.
• URL solicitada.
Se guarda un fichero de log por cada día y servidor incluido en el pool del
balanceador de carga de la web, por lo que para tratar estos datos será
necesario combinarlos en orden.
Log 1
Servidor Apache 1
Log 2
Servidor Apache 2
Log 3
Servidor Apache 3
Página 14
3. Juego de datos de simulación
3.1. Introducción
Descripción
• Transacciones:
• Familias:
• Campañas:
2 https://www.dunnhumby.com/about-us
Página 15
o 30 campañas en total, realizadas a lo largo de dos años y
dirigidas a 1.584 de las familias, que promocionan 44.133
productos mediante 1.135 cupones.
• Productos:
Modelo de datos
Página 16
HH_DEMOGRAPHIC
Columna Descripción
HOUSEHOLD_KEY Identificador único de la unidad familiar
AGE_DESC Rango de edad estimado
MARITAL_STATUS_CODE Estado civil: casado (M), soltero (S), desconocido (U)
INCOME_DESC Nivel de ingresos
HOMEOWNER_DESC Situación de la vivienda: propiedad, alquiler
HH_COMP_DESC Composición de la unidad familiar
HOUSEHOLD_SIZE_DESC Tamaño de la unidad familiar
KID_CATEGORY_DESC Número de niños
TRANSACTION_DATA
Columna Descripción
HOUSEHOLD_KEY Identificador único de la unidad familiar
BASKET_ID Identificador del tique de compra
DAY Dia de la transacción
PRODUCT_ID Identificador único del producto
QUANTITY Numero de productos del tique
SALES_VALUE Cantidad de dólares recibidos por el vendedor
STORE_ID Identificador único de tienda
COUPON_MATCH_DISC Descuento aplicado para igualar cupón del fabricante
COUPON_DISC Descuento aplicado por cupón del fabricante
RETAIL_DISC Descuento aplicado por tarjeta de cliente del vendedor
TRANS_TIME Hora del día en que ocurrió la transacción
WEEK_NO Semana de la transacción (secuencial de 1 a 102)
PRODUCT
Columna Descripción
PRODUCT_ID Identificador único del producto
DEPARTMENT Agrupación de productos similares – Nivel 1
COMMODITY_DESC Agrupación de productos similares – Nivel 2
SUB_COMMODITY_DESC Agrupación de productos similares – Nivel 3
MANUFACTURER Código identificador del fabricante
BRAND Marca blanca o gran marca
CURR_SIZE_OF_PRODUCT Tamaño del paquete
CAMPAIGN_TABLE
Columna Descripción
HOUSEHOLD_KEY Identificador único de la unidad familiar
CAMPAIGN Identificador único de campaña (de 1 a 30)
DESCRIPTION Tipo de campaña: A, B o C
Página 17
CAMPAIGN_DESC
Columna Descripción
CAMPAIGN Identificador único de campaña (de 1 a 30)
DESCRIPTION Tipo de campaña: A, B o C
START_DAY Fecha de inicio de la campaña
END_DAY Fecha de fin de la campaña
COUPON
Columna Descripción
CAMPAIGN Identificador único de campaña (de 1 a 30)
COUPON_UPC Identificador único del cupón (familia y campaña)
PRODUCT_ID Identificador único del producto
COUPON_REDEMT
Columna Descripción
HOUSEHOLD_KEY Identificador único de la unidad familiar
DAY Dia de la transacción
COUPON_UPC Identificador único del cupón (familia y campaña)
CAMPAIGN Identificador único de campaña (de 1 a 30)
CAUSAL_DATA
Columna Descripción
PRODUCT_ID Identificador único del producto
STORE_ID Identificador único de tienda
WEEK_NO Semana de la transacción (secuencial de 1 a 102)
DISPLAY Ubicación de la oferta en la tienda
MAILER Ubicación de la oferta en el folleto
DISPLAY, MAILER
Display Mailer
0 – No se muestra 0 – Sin anuncio
1 – Principio de tienda A – Recuadro en página interior
2 – Final de tienda C – Artículo en página interior
3 – Cabecera en principio de tienda D – Recuadro en portada
4 – Cabecera en mitad de tienda F – Recuadro en contraportada
5 – Cabecera en final de tienda H – Desplegable en portada
6 – Lateral de cabecera J – Desplegable cupón interior
7 - Pasillo L – Desplegable en contraportada
9 – Ubicación secundaria P – Cupón en página interior
A - Estantería X – Suelto en página interior
Z – Suelto en portada, contra o desplegable
Página 18
Implementación en MySQL
3 http://gdsotirov.blogspot.com/2018/07/mysql-wb-data-import-slow.html
Página 19
El comando utilizado ha sido el siguiente, para cada fichero CSV:
Modelo de datos
Página 20
La guía completa4 adjunta al juego de datos incluye información adicional
a la mostrada en este apartado.
4 https://www.dunnhumby.com/sites/default/files/filepicker/1/dunnhumby_-_Let_s_Get_Sort-of-
Real_User_Guide.pdf
5 https://kafka.apache.org/
6 https://spark.apache.org/streaming/
Página 21
3.4. Juego de datos EDGAR
Se ha escogido esta fuente porque los ficheros agregados por día, cuenta
con un volumen de tráfico muy elevado y además opera mediante un
balanceador de carga, de forma similar a la arquitectura planteada en el
caso, lo que nos permitirá reproducir los procesos de unificación de logs
desde las distintas instancias de Apache asociadas al pool del
balanceador.
Una vez se han definido los distintos juegos de datos primarios a simular,
es necesario establecer el volumen relativo de los mismos, de manera que
el conjunto esté alineado con el caso planteado.
Página 22
Estimación del volumen de operaciones
Por otra parte, la muestra de 2.500 unidades familiares que compran con
frecuencia y hacen uso de su tarjeta de fidelidad incluye ventas por
aproximadamente 3,5 millones de euros por año, pero es necesario tener
en cuenta de que se trata de una muestra sesgada que hace uso intensivo
de la tarjeta de fidelidad de la cadena de tiendas.
7 https://www.lidl.es/es/lidl-espana.htm
Página 23
Internet, podemos asumir que alcance un nivel similar al del mercado
asiático en la actualidad.
Página 24
4. Diseño de la solución y casos de uso típicos
4.1. Introducción a Apache Hadoop
Sobre estos dos elementos se han ido creando una serie de aplicaciones
que consumen sus servicios y operan siguiendo distintos paradigmas de
manera que en función de los casos de uso existentes se utilizará una pila
tecnológica ad hoc.
Ilustración 9 Arquitectura core de Hadoop
MapReduce
Motor de computación por lotes
TEZ
Motor de computación interactivo
YARN
Gestor de recursos de clúster
HDFS
Sistema de ficheros distribuido y redundante
Página 25
datos almacenados en HDFS: nombres de columna, tipos de dato,
relaciones, así como el formato del fichero y la relación entre
ambos.
Por lo tanto, permite tanto definir los esquemas como realizar consultas
mediante el lenguaje SQL.
Schema-on-write Schema-on-read
(RDBMS tradicional) (Apache Hive)
• Modelo de datos prescriptivo. • Modelo de datos descriptivo.
• Primero se crea el esquema y • Primero se copian los datos en
se definen los tipos de datos. su formato nativo.
• Transforma los datos para el • Crea un esquema adecuado a
formato del RDBMS (ETL). los tipos de los datos.
• Consulta los datos en el • Consulta los datos, que siguen
formato del RDBMS. en su formato nativo.
• Las columnas nuevas deben • Los datos nuevos pueden
añadirse antes de poder importar añadirse en cualquier momento
nuevos datos. y aparecerán retroactivamente
cuando un esquema los describa.
Página 26
De acuerdo con Grover8, los esquemas que se crean antes de los datos
son adecuados para escenarios donde ya sabemos lo que nos es
desconocido, por lo tanto, tenemos toda la información para tomar una
decisión acerca del formato y tipo de lo datos.
Redes Sociales
Logs Web
ERP
Marketing
Data Lake
OLTP
Minería de Datos
CRM
Data Warehouse
Por otra parte, la flexibilidad del DDL de Hive junto con HCatalog permite
definir formatos de datos optimizados para diferentes usos:
• Formato AVRO, que serializa por filas y por tanto está optimizado
para recuperar filas completas.
Página 27
Además, numerosas aplicaciones del ecosistema de Hadoop también se
han integrado9 con Hive Metastore, incluso aunque no utilicen paradigmas
relacionales de acceso a la información y con independencia de si
procesan la información por lotes o en tiempo casi real10.
Esquema en estrella
9 https://cwiki.apache.org/confluence/display/HCATALOG/HCatalog+HBase+Integration+Design
10 https://henning.kropponline.de/2015/01/24/hive-streaming-with-storm/
Página 28
La tabla de hechos estará constituida por la tabla de transacciones y se
utilizarán las dimensiones cliente, producto, fecha y tienda.
• Transacciones: transaction_data
• Cliente: hh_demographic
• Producto: product
• Fecha: transaction_data.day
• Tienda: transaction_data.store_id
Dimensión Dimensión
Cliente Producto
Dimensión Dimensión
Transacciones
Fecha Tienda
• Tienda: store_id
Página 29
4.5. Cuadro de mando de gestión
• Informar del nivel de pedidos por Internet para preparar las cestas
de la compra cuando el nivel de servicio en tienda lo permita.
Página 30
4.8. Modelo predictivo
Página 31
5. Implementación de la solución
5.1. Diseño
Arquitectura
11 https://www.datameer.com/
Página 32
CONSULTAS
RESULTADOS
ORIGENES
DE DATOS
CONSULTAS
RESULTADOS
Así, los datos siguen dos procesos de ingestión paralelos, uno mediante
procesos por lotes, con frecuencias relativamente bajas (por ejemplo,
diario, semanal, mensual o trimestral) y otro mediante motores de
procesado de eventos en tiempo casi real, de manera que estarán
siempre disponibles a medida que se generan en los sistemas de origen
(Ilustración 13 Arquitectura Lambda).
Componentes
Distribución de Hadoop
12 http://druid.io/
13 https://hortonworks.com/products/data-platforms/hdp/
14 https://github.com/hortonworks
Página 33
• HDFS, el sistema de ficheros distribuido y tolerante a fallos de
Apache.
Página 34
• Oozie, sistema para la coordinación de los distintos flujos de
ejecución de las tareas de Hadoop. Permite programar la ejecución
(sustituyendo a las tareas cron de Unix) y monitorizar el estado
aplicando reglas lógicas para la recuperación desde los distintos
estados de fallo.
Zeppelin Notebook
En particular, permite:
Spark-R
Página 35
Apache Druid
Apache Superset
15 https://airbnb.io/projects/superset/
Página 36
Con respecto a sus características, ofrece las siguientes funcionalidades:
Apache Kylin
Procesos
Página 37
Sqoop opera en dos pasos diferenciados, como se observa en Ilustración
14 Proceso de importación de MySQL en Hive:
Apache
Hive
MAPEO
HDFS
Job #1
1. Obtener Metadatos
MySQL APACHE
The Complete Job #2
Journey PK 1..360
SQOOP
Página 38
Ilustración 15 Recogida de logs de Apache con Flume
Página 39
Python Script
CSV
CSV
CSV
CSV
CSV
Apache Superset
Página 40
La instalación se ha llevado a cabo mediante la aplicación Ambari de
Apache, una herramienta especializada en la instalación, configuración,
monitoreo y mantenimiento de clústeres Hadoop.
Instalación de HDP
Página 41
El siguiente paso es la selección de las aplicaciones del ecosistema
Hadoop que se desean instalar, seguido de la asignación de los diferentes
servidores y clientes de cada solución a los distintos nodos, en función de
sus capacidades de almacenamiento y de memoria.
• Servicio HDFS
Página 42
aunque no se recomienda su uso en entornos de producción, por
lo que en nuestro caso hemos creado y configurado una base de
datos MySQL que ha requerido de la instalación adicional del
conector de Java JDBC para MySQL y la configuración de su
ubicación en el servicio ambari-server.
Página 43
Ilustración 19 Instalación de HDP completada
Página 44
Ilustración 20 Alertas de varianza fuera de límites en HDFS
Configuración de HDP
NFS Gateway
Página 45
Ilustración 21 Configuración de la pasarela NFS
Apache Kylin
Página 46
Ilustración 22 Detalle de instalación de Kylin
Una vez lanzado y tras autenticarse con los valores por defecto, es posible
cargar un juego de datos de prueba proporcionado con el paquete y
generar un cubo:
Página 47
5.3. ETL
Modelo de datos
Se ha indicado que se trata de una tabla externa, por lo que los datos sólo
residen en los ficheros CSV y no se copian a la base de datos aunque son
plenamente accesibles mediante el paradigma de schema-on-read.
Página 48
También se indica el formato del fichero en HDFS (TextInputFormat) así
como el formato de datos con el que deben ser interpretados por Apache
Hive (HiveIgnoreKeyTextOutputFormat).
Página 49
Ilustración 24 Creación de la tabla TRANSACTION_DATA
Una vez creada los datos están disponibles inmediatamente ya que están
asociados a los ficheros presentes en la ruta indicada, por lo que no se
habla de ETL (Extract-Transform-Load) sino de ELT (Extract-Load-
Transform).
Para ilustrar este hecho, resulta útil generar las estadísticas de la tabla
dónde además se parecía como las consultas SQL se transforman en
tareas distribuidas MapReduce que son gestionadas por el motor
optimizado de Apache Tez, como se observa en Ilustración 25 Tareas
asociadas al comando ANALYZE TABLE ... COMPUTE STATISTICS:
Página 50
En Ilustración 26 Resultado del análisis de la tabla se observan las
estadísticas ya computadas, indicando más de 307 millones de filas
(tiempo de procesamiento aproximado: 20 minutos).
Página 51
Se debe tener en cuenta que Apache Sqoop, como cualquier otro
procesamiento en Hadoop, transformará los comandos invocados en una
serie de tareas distribuidas del paradigma MapReduce, por lo que las
cargas se realizan en paralelo y su rendimiento es proporcional al número
de nodos del clúster empleado.
Tienda
Sitio web
Página 52
5.4. Consultas exploratorias SQL
16 https://docs.oracle.com/javase/8/docs/technotes/guides/jdbc/
Página 53
Ilustración 30 Grafo de ejecución de la consulta SQL
Página 54
• Control de acceso en la base de datos, mediante privilegios de
usuario.
Así, se elimina el proceso ETL del flujo de vida habitual del Data
Warehouse y sólo es necesario indicar a Kylin qué tablas de Hive se
desean sincronizar (y como hemos visto, las tablas de Hive pueden
apuntar a simples ficheros CSV), un proceso instantáneo ya que sólo se
cargan los metadatos:
Página 55
Ilustración 33 Definición de hechos y dimensiones
Página 56
Ilustración 36 Agregaciones válidas
Página 57
Ilustración 37 Configuración del cubo
Página 58
El cubo resultante puede consultarse mediante lenguaje SQL, ya que
Kylin proporciona una interfaz JDBC, así como un cliente basado en la
web para realizar consultas interactivas.
Página 59
Así como la generación de gráficas directas desde los resultados SQL:
Página 60
La solución se ha implementado en lenguaje R17 mediante la librería
SparkR18 que permite el acceso a los datos almacenados en Hive desde
R. En particular se ha utilizado el entorno de desarrollo RStudio19 Server,
que permite desarrollar aplicaciones R desde el propio servidor Hadoop.
Cuaderno RStudio
17 https://www.r-project.org/
18 https://spark.apache.org/docs/latest/sparkr.html
19 https://www.rstudio.com/products/rstudio
Página 61
En este punto los datos están en el formato adecuado para poder entrenar
el modelo, dónde se utiliza un soporte y una confianza del 1%:
Como primer resultado, podemos obtener una lista de los 5 productos más
frecuentes en las listas de la compra:
Consideraciones clave:
Página 62
6. Conclusiones
6.1. Descripción de las conclusiones
Página 63
multidisciplinar y no se puedan limitar a dominar una única
herramienta líder en el mercado, como sucede en muchos casos.
Página 64
La intención original era conectar SupetSet con Apache, pero la versión
proporcionada por Hortonworks en su distribución HDP incluye conectores
y documentación únicamente para Apache Druid.
Página 65
• Impacto del despliegue de una plataforma de datos única en la
estructura organizativa de las áreas de Inteligencia de Negocio y
Big Data Analytics, dado que la separación de sus objetivos de
negocio es relativamente difusa pero habitualmente operan de
manera independiente.
Página 66
7. Glosario
AVRO – Formato de serialización y almacenamiento de datos por filas en
Hadoop.
DDL – Data Definition Language, utilizado para definir los esquemas de tablas
en Hive.
Página 67
8. Bibliografía
130115_relationship_between_supermarkets.pdf [en línea], [sin fecha]. S.l.: s.n.
[Consulta: 17 noviembre 2018]. Disponible en: http://www.promarca-
spain.com/pdf/130115_relationship_between_supermarkets.pdf.
Benchmarking Apache Kafka: 2 Million Writes Per Second (On Three Cheap
Machines). [en línea], 2014. [Consulta: 12 diciembre 2018]. Disponible en:
https://engineering.linkedin.com/kafka/benchmarking-apache-kafka-2-million-
writes-second-three-cheap-machines.
BREWER, E.A., 2000. Towards robust distributed systems. PODC. S.l.: s.n.,
CHANG, F., DEAN, J., GHEMAWAT, S., HSIEH, W.C., WALLACH, D.A.,
BURROWS, M., CHANDRA, T., FIKES, A. y GRUBER, R.E., 2008. Bigtable: A
distributed storage system for structured data. ACM Transactions on Computer
Systems (TOCS), vol. 26, no. 2, pp. 4.
KIMBALL, R. y ROSS, M., 2013. The data warehouse toolkit : the definitive guide
to dimensional modeling. [en línea]. Disponible en:
http://www.books24x7.com/marc.asp?bookid=56391.
MARZ, NATHAN, 2011. How to beat the CAP theorem - thoughts from the red
planet - thoughts from the red planet. [en línea]. [Consulta: 11 diciembre 2018].
Disponible en: http://nathanmarz.com/blog/how-to-beat-the-cap-theorem.html.
MAURI, C., 2003a. Card loyalty. A new emerging issue in grocery retailing.
Journal of Retailing and Consumer Services, pp. 13.
MAURI, C., 2003b. Card loyalty. A new emerging issue in grocery retailing.
Journal of Retailing and Consumer Services, vol. 10, no. 1, pp. 13-25.
Página 68
NICHOLSON, C. y YOUNG, B., 2012. The relationship between supermarkets
and suppliers: What are the implications for consumers. Consumers
International, vol. 1, pp. 7-8.
Nielsen Global Connected Commerce Report January 2017.pdf [en línea], [sin
fecha]. S.l.: s.n. [Consulta: 19 noviembre 2018]. Disponible en:
https://www.nielsen.com/content/dam/nielsenglobal/de/docs/Nielsen%20Global
%20Connected%20Commerce%20Report%20January%202017.pdf.
NORI, S. y SCOTT, J., 2016. BI & Analytics on a Data Lake. S.l.: MAPR.
WANG, K., TANG, L., HAN, J. y LIU, J., 2002. Top down fp-growth for association
rule mining. Pacific-Asia Conference on Knowledge Discovery and Data Mining.
S.l.: Springer, pp. 334-340.
What’s in-store for online grocery shopping [en línea], 2017. enero 2017. S.l.:
Nielsen. Disponible en:
https://www.nielsen.com/content/dam/nielsenglobal/de/docs/Nielsen%20Global
%20Connected%20Commerce%20Report%20January%202017.pdf.
Página 69