Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Especificació
Identificar Determinar
n de
usuarios las
requisitos de
necesidades
documentos
de análisis
B Agrega
Inclusión tardía r
de apoyo soporte
espacial espaci
al
Definir
Verifique la Definir
esquema esquemas y
conceptual disponibilidad de asignacione
inicial datos y s
especifique conceptuale
asignaciones s finales
Figura 11.16 Pasos del enfoque basado en análisis para almacenes de datos espaciales.
(a) Fase de especificación de requisitos. (b) Fase de diseño conceptual
Como se explica en el Cap. 10, este enfoque se basa en los datos de los
sistemas de origen. Al igual que en el enfoque basado en análisis, el apoyo
espacial puede incluirse al principio o al final del proceso de diseño. Dado
que las bases de datos operativas son la fuerza impulsora de este enfoque,
la elección entre la inclusión temprana o tardía de los requisitos espaciales
depende de si estas bases de datos son espaciales o no.
a
Identificar Especificació
Aplicar proceso
sistemas n de
de
de origen requisitos de
derivación
documentos
Validar el esquema
Definir esquema conceptual inicial conceptual con los usuarios
Definir esquemas y asignaciones conceptual
Figura 11.17 Pasos del enfoque basado en fuentes para almacenes de datos espaciales.
(a)
Fase de especificación de requisitos. (b) Fase de diseño conceptual
a
Enfoque Especificació
Determinar
basado en Identificar n de
las
análisis usuarios requisitos de
necesidades
documentos
de análisis
Especificació
Enfoque Identificar Aplicar proceso
n de
basado en sistemas de
requisitos de
fuentes de origen derivación
documentos
Figura 11.18 Pasos del enfoque basado en análisis / fuente para almacenes de datos
espaciales.
(a) Fase de especificación de requisitos. (b) Fase de diseño conceptual
11.9 Resumen
11.1 ¿Qué son las bases de datos espaciales? Describir dos formas
complementarias de modelar datos espaciales en aplicaciones de
bases de datos.
11.2 Describir los distintos tipos de datos espaciales a nivel conceptual,
dando para cada uno de ellos un ejemplo de su uso.
11.3 Defina las diversas relaciones topológicas en términos del límite,
interior y exterior de los valores espaciales.
11.4 ¿Qué son los campos continuos? ¿Cómo se implementan a nivel
conceptual?
11.5 Dé ejemplos de operaciones asociadas con tipos de campo. Explique
las operaciones de tasa de cambio para tipos de campo.
11.6 Explique por qué se deben eliminar las operaciones tradicionales
para los tipos de campo. Ilustre esto con ejemplos.
11.7 Discuta los siguientes conceptos: dimensión espacial, nivel espacial,
atributo espacial, hecho espacial, medida espacial, jerarquía
espacial y relación topológica.
11.12 4
11.8 ¿Cuáles son las diferencias entre un nivel espacial, un nivel espacial
con atributos espaciales y un nivel no espacial con atributos
espaciales?
11.9 Dé un ejemplo de cada una de las siguientes jerarquías espaciales:
jerarquías equilibradas, desequilibradas y generalizadas.
11.10 ¿Cuál es la diferencia entre jerarquías espaciales alternativas y
paralelas?
11.11 ¿Por qué se necesitan relaciones topológicas n-arias en hechos
espaciales? Están
tales relaciones habituales en las bases de datos espaciales?
11.12 ¿En qué se diferencia una medida espacial de una medida numérica
calculada con operaciones espaciales? ¿Una medida espacial
requiere estar relacionada con dimensiones espaciales?
11.13 Dé un ejemplo de un esquema multidimensional que contenga una
medida espacial. Transforma la medida espacial en una dimensión
espacial. Compare los dos esquemas con respecto a las diversas
consultas que se les pueden dirigir.
11.14 Defina el geoide y el elipsoide. ¿Para qué se usan? ¿Cuáles son las
diferencias entre ellos? ¿Qué es un dato?
11.15 ¿Qué son los SRS?
11.16 ¿Cuál es la diferencia entre el vector y los modelos de datos ráster
para representar datos espaciales?
11.17 Describe los tipos de datos espaciales implementados en SQL / MM.
11.18 Describa cómo se implementan los tipos de campo en PostGIS. ¿En
qué se diferencia esta implementación de la definición abstracta de
tipos de campo?
11.19 Analice las reglas de mapeo para traducir un esquema MultiDim
espacial en un esquema relacional. Indique las ventajas y
desventajas de las asignaciones alternativas.
11.20 ¿Cómo se representa una relación topológica entre niveles
espaciales en un esquema lógico?
11.21 ¿Cómo se puede comprobar en un esquema lógico la relación
topológica de un hecho?
11.22 Describir desde una perspectiva metodológica cómo se pueden
incluir los datos espaciales en los almacenes de datos.
11.12 Ejercicios
Familia
Geografí
Apellido
País Cliente
Nombre del país País Geom
Departamento Identificación del cliente Primer nombre Inic
Nombre de Nb Vivienda para niños Dueño de la casa
Expresar Geom de cliente de propiedad de Nb Cars
Departamento
Nombre del Estado Estado Geom
CategoríaCiudad
nombre de laNombre de la ciudad Ciudad Geom
categoría
Subcategoría
Nombre de la
subcategoría
Geografía Tienda
Producto de clase ID de tienda Nombre de la tienda Tipo deAño
tienda
ID del Producto Nombre del producto SKUde tienda Tienda Pies cuadrados Supermercados Pies cuadrados C
Gerente
SRP Año No
Marca
Trimestre
Marca Marca
Nombre del
trimestre
Mes
Mes No
Nombre del
mes
Promoción
país Tienda
cliente
country_id country_name country_geom
store_id store_type region_id nombre_tien
Identificación del cliente
store_street_address store_city store_stat
núm_cuenta
store_sqft grocery_sqft frozen_sqft meat_s
lname
fname
mi Expresa
Dirección 1 r
dirección 2
dirección3 state_id
dirección4 state_name
ciudad state_geom
Provincia del estado country_id
código postal
país
customer_region_id ciudad
teléfono1
phone2 city_id
fecha de nacimiento city_name
estado civil city_geom
Ingresos anuales state_id
género
total_children promoción
num_children_at_home
educación id_promoción promoción_distrito_id nombre_promoción media_type
costo fecha_inicio fecha_finalización
date_accnt_opened
tarjeta_miembro
ocupación
dueño de casa
num_cars_owned
customer_geom
city_id producto
sales_fact
ID del Producto product_class_id brand_n
time_by_day SRP store_id store_sales store_cost un
product_id time_id customer_id Promotion_id
peso_bruto peso_neto_paquete_reciclable
time_id the_date the_day the_month the_year day_of_month week_of_year month_of_year trimestre fisca
clase_producto
Los tipos temporales representan valores que cambian con el tiempo, por
ejemplo, para realizar un seguimiento de la evolución de los salarios de los
empleados. Conceptualmente, los tipos temporales son funciones que
asignan a cada instante un valor de un dominio particular. Se obtienen
aplicando un constructor temporal (). Por tanto, un valor ·de tipo temporal
(real) (por ejemplo, que representa la evolución del salario de un
empleado) es una función continua f: instantánea → real.
12.2 Tipos 4
http://www.foursquare.com
1
4 12 almacenes de datos de
Salari 20 30
o
John
Salario 60
María
Figura 12.1 Ejemplos de reales temporales que representan la evolución de los salarios
′ F (t + δ) - F (t)
F (t) = lim
δ→0 δ .
• TVarianza: (F (X)-TAvg)2
dx .
∫ √ T
• TStDe
Para Por ejemplo, la operación TAvg calcula la media ponderada de un
valor temporal, teniendo en cuenta la duración en la que la función toma
un valor. En nuestro ejemplo, TAvg (SalaryJohn) arrojará 23.25, dado que
John tuvo un salario de 20 durante 182 días y un salario de 30 durante 92
días. Además, TVariance y TStDev calculan la varianza y la desviación
estándar de un tipo temporal. Finalmente, TMin y TMax devuelven,
respectivamente, el valor mínimo y máximo tomado por la función. Estos
se obtienen por Min (RangeValues ()) y Max (RangeValues ()) donde Min y
Max son las operaciones
· clásicas sobre valores numéricos.
La generalización de las operaciones sobre tipos no temporales a tipos
temporales se denomina lifting. La elevación de una operación sobre tipos
no temporales reemplaza cualquiera de sus tipos de argumento por el tipo
temporal respectivo y devuelve un tipo temporal. Como ejemplo, la
operación menor que (<) ha levantado versiones donde uno o ambos de sus
argumentos pueden ser tipos temporales y el resultado es un booleano
temporal. Intuitivamente, la semántica de tales operaciones elevadas es
que el resultado se calcula en cada instante utilizando la operación no
elevada.
Se pueden aplicar varias definiciones de una operación cuando se
combinan dos tipos temporales definidos en diferentes extensiones
temporales. Una primera solución podría ser que el resultado se de fi ne en
la intersección de ambas extensiones e indefinidas.
en otra parte. Otra solución podría ser que el resultado se de fi ne en la
unión
de las dos extensiones, y un valor predeterminado (como 0, para la suma) se
utiliza para
las extensiones que pertenecen a un solo tipo temporal. Para las
operaciones elevadas, suponemos que el resultado se define en la
intersección de ambas extensiones.
De manera análoga, las operaciones de agregación también se pueden
levantar. Por ejemplo, una operación Avg elevada combina un conjunto de
reales temporales y da como resultado un nuevo real temporal en el que se
4
calcula 12 almacenes
el promedio en cada instante. Como ejemplo, dadosdelos
datos
dosdevalores
temporales anteriores, Avg (SalaryJohn, SalaryMary) da como resultado un
real temporal cuya representación gráfica se da en la Fig. 12,2.
12.2 Tipos 4
Salari 2030
o
John
60
Salari
o
María 2040604560
Prom
edio
Y
8:25
8:10
2 8:20
T1
8:15
1
T2
8:00
123 X
8:05
8:05
8:10 8: 158: 20t
Figura 12.4 Distancia entre las trayectorias de los dos camiones en la Fig. 12,3
aBC
t
v v
t v
t
t
y temporal (campo campo (temporal (·))
(·))
X
Disponible en http://temporal.projects.pgfoundry.org/
2
4 12 almacenes de datos de
devoluciones
T INTEGER (20 PERÍODOS ('2012-04-01', '2012-07-01'),
30 PERIODO ('2012-10-01', '2012-11-01'))
resultará en el valor
T REAL (20 PERIODO ('2012-01-01', '2013-04-
01')
40 PERIODO ('2012-04-01', '2012-10-01')
60 PERIODO ('2012-10-01', '2012-10-01')
45 PERIODO ('2012-10-01', '2013-01-01')
60 PERIODO ('2013-01-01', '2013-04-01'))
Nosotros inserte ahora dos tuplas en esta tabla, que contienen información
de dos entregas realizadas por dos camiones T1 y T2 el mismo día, 10 de
enero de 2012:
INSERTAR EN LOS VALORES DE ENVÍO ( 'T1', '2012-01-10',
PUNTO T (Punto (0 0) '08:00', Punto (2 2) '08:10', Punto (2 2)
'08:25' ) ) INSÉRTESE EN LOS VALORES DE ENVÍO ( 'T2', '2012-01-10',
PUNTO T (Punto (1 0) '08:05', Punto (3 1) '08:15', Punto (3 2) '08:20' ))
Figura 12.7 Una segmentación alternativa de trayectorias con respecto a las zonas de
entrega
En la Fig. 12,6, asociamos los tipos de campo al nivel State. Esto permite
una manipulación más eficiente de los campos cuando el enfoque del
análisis está en el nivel estatal. Sin embargo, como veremos más adelante,
para algunas consultas es necesario mantener los campos generales
cubriendo todo el espacio de interés, sin particiones.
Figura 12,8 extiende nuestro ejemplo con tales campos globales. Por lo
tanto, un campo temporal global como la temperatura puede verse como
un cubo espacio-temporal que
asocia un valor real a cualquier punto dado en el espacio y el tiempo. En
este caso, dichos campos se relacionan con hechos o dimensiones a través
de operaciones espaciales o espacio-temporales.
12.5 Consultar el almacén de datos de trayectoria de Northwind 4
SELECTR.RoadKey, CONTAR(*)
DESDE Segmento S, Carretera R, Hora T, Camión U
WHERES.RoadKey = R.RoadKey Y S.TimeKey = T.TimeKey Y S.TruckKey
= U.TruckKey Y U.TruckBrand = 'Volvo' Y
T.Date >= '2012-02-01' Y T.Fecha < '2012-03-01'
GRUPO POR RoadKey
En este caso, podemos ver que es más eficiente usar el campo global que el
campo particionado. Sin embargo, hay casos en los que trabajar al revés es
más eficiente.
Tenga en cuenta que la consulta anterior no incluye datos temporales, ya
que no menciona una geometría temporal como la ruta de medida ni un
campo temporal como la temperatura. La siguiente consulta involucra
ambos atributos temporales.
Consulta 12.7. Velocidad promedio y temperatura máxima durante el
segmento, para segmentos de trayectoria ocurridos el 1 de febrero de 2012.
SELECCIONE S.SegmentKey, S.AvgSpeed, TMax (AtMGeometry (E,
S.Route)) FROMSegment S, Time T, Temperature mi
DONDE S.TimeKey = T.TimeKey Y T.Date = '2012-02-01'
12.5 Consultar el almacén de datos de trayectoria de Northwind 5
En la consulta anterior, usamos el campo de temperatura global que se
muestra en la Fig. 12,8. De lo contrario, necesitaríamos hacer la unión de
los campos en el atributo Temp del nivel State para todos los estados
atravesados por el camión. La función AtMGeometry proyecta el campo
temporal a la pista de movimiento del segmento, lo que da como resultado
un real temporal. En otras palabras, la función calcula la posición del
segmento de la trayectoria en cada instante de tiempo, y luego del campo
válido en ese instante, obtiene la temperatura. Finalmente, la función
TMax obtiene el valor máximo de temperatura durante el segmento.
Nuestro siguiente ejemplo de consulta implica la agregación de campos.
Consulta 12.8. Temperatura promedio por mes y por estado.
Aquí, necesitamos una función auxiliar que, dado un mes y un año,
devuelva el período compuesto por todos los días del mes. La función,
denotada PeriodMonth, se define de la siguiente manera:
CREAR O REEMPLAZAR FUNCIÓN PeriodMonth (Month int, Year int)
DEVOLUCIONES PERIODO COMO $ PeriodMonth $
DECLARAR
PerStart CHAR
(10); PerEnd CHAR
(10);
EMPEZAR
PerStart = CAST ($ 2 como CHAR (4)) '-'
|||| ||
CAST ($ 1 como CHAR (2)) '-
01'; SI $ 1 < 12 ENTONCES
PerEnd = CAST ($ 2 como CHAR (4)) || '-' || CAST ($ 1 + 1 como CHAR
(2)) || '-01';
DE
PerEnd = CAST ($ 2 + 1 como CHAR (4)) '-01-01'
|
TERMINARA SI;
PERIODO DE DEVOLUCIÓN (PerStart,
PerEnd); FINAL;
$ PeriodMonth $ IDIOMA plpgsql;
12.6 Resumen
12.1 ¿Qué son los objetos en movimiento? ¿En qué se diferencian de los
objetos espaciales?
12.2 Dé ejemplos de diferentes tipos de objetos en movimiento, y para
cada uno de estos tipos, ilustre un escenario en el que el análisis de
ellos es importante.
12.3 ¿Qué es una trayectoria?
12.4 Analice los diferentes criterios que se pueden utilizar para
segmentar el movimiento. ¿Cómo impactan los requisitos de
análisis en esta segmentación?
12.5 ¿Cuál es la diferencia entre trayectorias continuas y discretas?
12.6 Defina los términos bases de datos de trayectoria y almacenes de
datos de trayectoria. Mencione las principales diferencias entre los
dos conceptos.
12.7 ¿Qué son los tipos temporales? ¿Cómo se construyen?
12.8 Defina la hora válida y la hora de la transacción.
12.9 Dé un ejemplo de un tipo de base temporal, un tipo espacial
temporal y un tipo de campo temporal.
12.10 Dé ejemplos de operaciones asociadas con cada uno de los tipos
temporales en la pregunta anterior.
12.11 Explique por qué se deben eliminar las operaciones tradicionales
para los tipos temporales. Ilustre esto con ejemplos.
12.12 Dé una pista sobre cómo se pueden implementar los tipos
temporales en una plataforma como PostGIS. ¿En qué se diferencia
esta implementación de la definición abstracta de tipos temporales?
12.13 Analice cómo se pueden agregar tipos temporales a un esquema
multidimensional.
12.14 Analice las implicaciones de incluir trayectorias como dimensiones
o medidas en un almacén de datos.
12.15 ¿Qué significa el término similitud de trayectorias? Indique por qué
este concepto es importante en el contexto del almacén de datos.
12.16 Comente dos formas diferentes de incluir tipos de campo en un
esquema multidimensional. Proporcione ejemplos de consultas que
aprovechen una representación sobre la otra.
5 12 almacenes de datos de
12.9 Ejercicios
(p1, 300)
(p2, 200)
(p3, 300)
(pág. 4, 300)
...
(p1, 200)
(p2, 200)
(p3, 500)
(pág. 4, 100)
...
Reducir con
MapShuffle función MAX
13.2.1 Colmena
Hive, desarrollado en Facebook, trae los conceptos de tablas, columnas,
particiones y SQL a la arquitectura de Hadoop, manteniendo la
extensibilidad y fl exibilidad de Hadoop. Hive organiza los datos en tablas y
particiones. Al igual que en los sistemas relacionales, las particiones se
pueden definir de acuerdo con intervalos de tiempo, lo que permite a Hive
podar los datos mientras procesa una consulta. Además, Hive proporciona
un dialecto SQL llamado Hive Query Language (HiveQL) para consultar
datos almacenados en un clúster de Hadoop. HiveQL no es solo un
lenguaje de consulta, sino también un lenguaje de definición y
manipulación de datos. El lenguaje de definición de datos se utiliza para
crear, modificar y eliminar bases de datos, tablas, vistas, funciones e
índices. El lenguaje de manipulación de datos se utiliza para insertar,
actualizar y eliminar a nivel de tabla; estas operaciones no se admiten a
nivel de fila.
El modelo de datos de Hive incluye tipos de datos primitivos como
BOOLEAN y
INT y tipos de datos de recopilación como STRUCT, MAP y ARRAY. Los
tipos de datos de colección permiten, por ejemplo, representar relaciones
de varios a varios, evitando las relaciones de clave externa entre tablas.
Por otro lado, introducen la duplicación de datos y no refuerzan la
integridad referencial. Como ejemplo, mostramos a continuación una
representación simplificada de la tabla Empleados de la base de datos
Northwind en la Fig.2.4, donde los atributos que componen una dirección
completa se almacenan en una ESTRUCTURA y el atributo Territorios es
un ARRAY que contiene el conjunto de nombres de territorios con los que
está relacionado el empleado. Hive no tiene control sobre cómo se
almacenan los datos y admite diferentes formatos de archivo y registro. El
esquema de la tabla se aplica mientras se leen los datos del
almacenamiento, implementando lo que se conoce como esquema al leer.
El siguiente ejemplo incluye la definición de formato de archivo
(TEXTFILE en este caso) y los caracteres delimitadores necesarios para
analizar cada registro:
13.1 MapReduce y Hadoop
CREAR TABLA Empleados (
5
EmployeeID INT, nombre STRING,
13.2 Idiomas de alto nivel para Hadoop 5
Dirección STRUCT<Calle: STRING, Ciudad: STRING, Región:
STRING, Código postal: STRING, País: STRING>,
Territorios
FORMACIÓN<CUERDA> ) FORMATO
DE FILA
CAMPOS DELIMITADOS TERMINADOS POR
',' ARTÍCULOS DE LA COLECCIÓN
|
TERMINADOS POR '' LÍNEAS TERMINADAS
\
POR ' norte'
ALMACENADO COMO TEXTFILE;
13.2.2 Jerga
Pig es un lenguaje de flujo de datos de alto nivel para consultar datos
almacenados en HDFS. Fue desarrollado en Yahoo! Investigue y luego se
trasladó a la Apache Software Foundation. Hay tres formas diferentes de
ejecutar Pig: (a) como un script, simplemente pasando el nombre del
archivo de script al comando Pig; (b) usando la línea de comando gruñido;
y (c) llamar a Pig desde Java en su forma incrustada. Un programa Pig
Latin es una colección de declaraciones, que pueden ser una operación o
un comando. Por ejemplo, la operación LOAD con un nombre de archivo
como argumento carga datos de un archivo. Un comando podría ser un
comando HDFS usado directamente dentro de Pig Latin, como el comando
ls para listar todos los archivos en el directorio actual. La ejecución de una
declaración no necesariamente da como resultado un trabajo que se ejecuta
en el clúster de Hadoop.
Pig no requiere información de esquema, lo que lo hace adecuado para
datos no estructurados. Si se dispone de un esquema de los datos, Pig lo
utilizará, tanto para la comprobación de errores como para la
optimización. Sin embargo, si no hay ningún esquema disponible, Pig
seguirá procesando los datos haciendo las mejores conjeturas que pueda.
Tipos de datos de cerdo
puede ser de dos tipos. Los tipos escalares son los tipos de datos
habituales, como INTEGER, LONG, FLOAT y CHARARRAY. Por otro lado,
se admiten tres tipos de tipos complejos en Pig, a saber, TUPLE, BAG y
MAP, donde el último
es un conjunto de pares clave-valor. Por ejemplo, según la disponibilidad
del esquema, podemos cargar los datos de los empleados de varias formas
de la siguiente manera:
Empleados = CARGAR 'Empleados' AS (Nombre: chararray, Ciudad: chararray,
Edad: int); Empleados = CARGAR'Empleados' AS (nombre, ciudad, edad);
Empleados = CARGAR 'Empleados';
Las dos primeras declaraciones cargan los dos archivos en dos variables,
Empleados y Pedidos. La instrucción JOIN BY realiza la unión, de manera
similar a SQL, y GENERATE realiza la proyección.
Las combinaciones externas izquierda y derecha se realizan de manera
similar, agregando las palabras clave LEFT OUTER y RIGHT OUTER,
respectivamente, después de JOIN BY
13.2 Idiomas de alto nivel para Hadoop 5
cláusula. Por ejemplo, en la consulta anterior, escribiríamos JOIN
Employees BY (EmployeeID, PostalCode) LEFT OUTER.
C1 C2 C3 C4 C5 C6 C7 C8C1 C2 C3 C4 C5 C6 C7 C8
filas
...
Página 1 Página n
B
C1 C2 C3 C4 C5 C6 C7 C8
...
paginas
a
RowId EmployeeKey CustomerKey ProductKey ···
1 e1 c1 p1 ···
2 e1 c1 p4 ···
3 e1 c2 p4 ···
4 e1 c2 p4 ···
5 e1 c2 p4 ···
6 e2 c2 p5 ···
7 e2 c2 p5 ···
8 e2 c2 p1 ···
9 e3 c3 p2
···
10 e3 c3 p2
···
··· ··· ··· ···
···
bcd
F v l F v l F v l
1 e1 5 1 c1 2 1 p1 1
6 e2 3 3 c2 6 2 p4 4
9 e3 2 9 c3 2 6 p5 2
... ... ... ... ... ... 8 p1 1
... ... ... ... ... ... 9 p2 2
... ... ... ... ... ... ... ... ...
Figura 13.3 Almacenar columnas de una tabla de hechos, una tabla por columna. (a)
Tabla de hechos Ventas. (b) Columna EmployeeKey. (c) Columna CustomerKey. (d)
Columna ProductKey
1
Esta figura está inspirada en la arquitectura SAP HANA (descrita más
adelante en el capítulo), aunque la mayoría de IMDBS siguen una
arquitectura similar.
5 13 nuevas tecnologías de
Memoria principal
Datos activos
Tienda principal
Almacén de búfer Estructura adicional
13.5.1 Vertica
Vertica2 es un DBMS relacional distribuido masivamente paralelo, que se
basa en el proyecto de investigación C-Store realizado alrededor del año
2005. Aunque Vertica soporta las operaciones INSERT, UPDATE y
DELETE SQL, está diseñado principalmente para soportar cargas de
trabajo analíticas. Vertica tiene una arquitectura híbrida en memoria / en
disco. Ésta es la principal diferencia con nuestra arquitectura general en la
Fig.13,4, donde el almacenamiento principal y el almacenamiento
intermedio residen en la memoria y solo los datos pasivos se almacenan en
el disco. Vertica agrupa los datos en disco por columna en lugar de por fila,
con las ventajas ya comentadas para consultas analíticas. Además, los
datos se comprimen utilizando diferentes técnicas, no solo codificación de
longitud de ejecución.
Vertica organiza los datos en subconjuntos ordenados de los atributos de
una tabla. Estos se llaman proyecciones. Normalmente, hay una
proyección grande llamada superproyección (que contiene todas las
columnas de la tabla) y muchas proyecciones pequeñas. Tenga en cuenta
que esto puede considerarse análogo a las columnas combinadas en la
Fig.13,4. Vertica también admite proyecciones preunidas, aunque se ha
informado que en realidad no se utilizan con frecuencia. Vertica tiene dos
almacenes optimizados para lectura y escritura, que de alguna manera son
variantes de los almacenes principal y búfer de la Fig.13,4. El almacén
optimizado para escritura (WOS) es una estructura en memoria que está
optimizada para insertar, eliminar y actualizar datos. Los datos en el WOS
están descomprimidos, sin clasificar y segmentados y podrían almacenarse
en una forma orientada a filas o columnas. Esto permite una latencia baja
para un análisis de datos rápido en tiempo real. El almacén optimizado
para lectura (ROS) es un almacén basado en disco donde reside la mayoría
de los datos. Los datos en ROS se almacenan como conjuntos de pares
índice-valor, llamados contenedores ROS. Cada contenedor ROS se
compone de dos archivos por columna de la base de datos: uno que
contiene la columna en sí
13.5 Sistemas 5
http://www.vertica.com/
2
5 13 nuevas tecnologías de
13.5.2 MonetDB
MonetDB3 es un IMDBS de almacén de columnas desarrollado en
Centrum Wiskunde & Informatica (CWI)4 en los Paises Bajos. Las
principales características de MonetDB son un almacenamiento en
columnas; un álgebra de consulta masiva, que permite una rápida
implementación en hardware moderno; algoritmos conscientes de la
memoria caché; y nuevos modelos de costos, que dan cuenta del costo del
acceso a la memoria.
Por lo general, en el procesamiento de consultas RDBMS, al ejecutar un
plan de consulta, normalmente necesitamos escanear una relación R y
filtrarla usando una condición φ. El formato de R solo se conoce en el
momento de la consulta; por tanto, se necesita un intérprete de
expresiones. La idea de MonetDB se basa en el hecho de que la CPU se
utiliza básicamente para analizar la expresión de la consulta; por lo tanto,
los costos de procesamiento se pueden reducir optimizando el uso de la
CPU. Para simplificar la interpretación de consultas, el álgebra relacional
fue reemplazada por un álgebra más simple.
MonetDB también utiliza particiones verticales, donde cada columna de
la base de datos se almacena en la llamada tabla de asociación binaria
(BAT). Un BAT es una tabla de dos columnas en la que la columna de la
izquierda se denomina encabezado (en realidad, un identificador de objeto)
y la columna de la derecha, el final (el valor de la columna). El lenguaje de
consulta de MonetDB es un álgebra de columnas llamada MIL (Lenguaje
de interpretación de Monet). Los parámetros de los operadores tienen un
formato fijo: son tablas de dos columnas o constantes. La expresión
calculada por un operador también es fija, así como el formato del
resultado.
Sin embargo, el rendimiento no es óptimo ya que cada operación
consume MTD materializadas y produce una MTD materializada. Por lo
tanto, por un lado, dado que utiliza una técnica de evaluación de columna a
la vez, MIL no tiene el problema de gastar el 90% de su tiempo de
ejecución de consultas en una sobrecarga de interpretación de tupla a la
vez, como en RDBMS tradicionales, porque los cálculos funcionan en MTD
enteras, y el diseño de estas matrices se conoce en
13.5 Sistemas 5
http://www.monetdb.org/
3
http://www.cwi.nl/
4
5 13 nuevas tecnologías de
tiempo de compilación. Por otro lado, las consultas que contienen cálculos
complejos sobre muchas tuplas materializan una columna de resultado
completa para cada función en la expresión, incluso cuando no se
requieren en el resultado de la consulta, sino solo como entrada para otras
funciones en la expresión. Si los resultados intermedios son pequeños, la
materialización no es realmente necesaria y produce una gran sobrecarga.
UPC
Motor de ejecución X100
Árbol de consultas
Escanear
Datos de columna
Memoria principal
Almacenamiento
Disco Disco Disco
http://www.saphana.com
5
13.5 Sistemas 5
como inserciones y actualizaciones frecuentes. Este último tiene una tasa
de compresión más baja y un rendimiento de consulta más bajo en
comparación con el motor basado en columnas. Esta arquitectura permite
soportar cargas de trabajo mixtas en un mismo servidor, realizando
complejos cálculos analíticos sin necesidad de materializar tablas. Ambos
motores relacionales admiten SQL y MDX. Los cálculos se pueden realizar
en la base de datos sin mover los datos a la capa de la aplicación, a través
de un lenguaje de secuencia de comandos SQL que se puede utilizar para
introducir la lógica de la aplicación de datos intensivos en la base de datos.
El almacenamiento de filas o columnas se puede seleccionar en el
momento en que se crea una tabla, pero se puede cambiar posteriormente.
Ambos motores comparten una capa de persistencia común (el almacén de
datos no volátiles de la Fig.13,4), donde la gestión de páginas y el registro
son compatibles como en las bases de datos tradicionales.
La arquitectura de almacenamiento de datos es similar a la genérica que
se muestra en la Fig. 13,4, con un área de almacenamiento de columnas
optimizada y un área de búfer no optimizada para permitir inserciones y
actualizaciones. Las inserciones, eliminaciones y actualizaciones se
manejan en HANA siguiendo la noción de administración de por vida de
un dato.
registro. Un almacenamiento delta de nivel L1, organizado como un área de
almacenamiento orientada a filas, se utiliza para actualizaciones
individuales. Las actualizaciones masivas omiten el nivel L1 y se
administran en un almacenamiento delta de nivel L2, organizado en
columnas comprimidas, aunque está menos optimizado que el área de
almacenamiento principal. Finalmente, la tienda principal es la
almacenamiento de columna en memoria altamente comprimido explicado
anteriormente. Normalmente, los registros se mueven durante su ciclo de
vida desde el nivel L1 al nivel L2 y al almacén principal.
En cuanto al particionamiento, los datos se dividen en subconjuntos y se
almacenan en un clúster de servidores, conformando una base de datos
distribuida. Este enfoque se llama escalamiento horizontal. Una tabla de
base de datos individual se puede colocar en diferentes servidores dentro
de un clúster o se puede dividir en varias particiones, ya sea
horizontalmente (un grupo de filas por partición) o verticalmente (un
grupo de columnas por partición), con cada partición residiendo en un
servidor separado. dentro del clúster.
Atomicidad, la consistencia y el aislamiento son propiedades ACID que
no se ven afectadas por el almacenamiento en memoria. Sin embargo,
como se explicó anteriormente, la durabilidad no se puede lograr
simplemente almacenando datos en la memoria principal, ya que se trata
de un almacenamiento volátil. Para que los datos sean persistentes, deben
residir en un almacenamiento no volátil, como discos duros o dispositivos
flash. HANA divide la memoria principal en páginas. Cuando una
transacción cambia los datos, las páginas afectadas se marcan y escriben en
un almacenamiento no volátil a intervalos regulares. Además, un registro
de la base de datos captura todos los cambios realizados por las
transacciones. Cada transacción comprometida genera una entrada de
registro que se escribe en un almacenamiento no volátil, lo que garantiza
que todas las transacciones sean permanentes. SAP HANA almacena las
páginas cambiadas en los puntos de guardado, que se escriben de forma
5 13 nuevas tecnologías de
asincrónica en el almacenamiento persistente a intervalos regulares (de
forma predeterminada, cada 5 minutos). Una transacción no se confirma
antes de que la entrada de registro correspondiente se escriba en el
almacenamiento persistente, para cumplir con el requisito de durabilidad
(en la administración de base de datos tradicional, esto se denomina
registro de escritura anticipada). Después de un corte de energía, la base de
datos se puede reiniciar desde los puntos de guardado como una base de
datos basada en disco: los registros de la base de datos se aplican para
restaurar los cambios.
13.5 Sistemas 5
que no se capturaron en los puntos de guardado, lo que garantiza que la
base de datos se pueda restaurar en la memoria al mismo estado que tenía
antes de la falla.
Finalmente, compresión se realiza utilizando diccionarios de datos. La
idea es que cada valor de atributo en una tabla se reemplace por un código
entero y la correspondencia de códigos y valores se almacene en un
diccionario. Por ejemplo, en la columna Ciudad de la tabla Cliente, el valor
Berlín se puede codificar como '1' y la tupla (Berlín, 1) se almacenará en el
diccionario. Así, si es necesario, se accederá una sola vez al valor
correspondiente (Berlín, en este caso). Por lo tanto, el movimiento de datos
se reduce sin imponer una carga de CPU adicional para la descompresión.
El factor de compresión logrado por este método depende en gran medida
de los datos que se comprimen. Los atributos con pocos valores distintos se
comprimen bien (por ejemplo, si tenemos muchos clientes de la misma
ciudad), mientras que los atributos con muchos valores distintos no se
benefician tanto.
http://www.oracle.com/us/products/database/timesten/overview/index.html
6
13.5 Sistemas 5
El análisis, la auditoría y el archivo a más largo plazo se almacenan en la
base de datos de Oracle. Esto es análogo a la arquitectura general
representada en la Fig.13,4. Además, el escenario anterior se puede
distribuir. Por ejemplo, la empresa Northwind puede tener una base de
datos Oracle centralizada y muchas aplicaciones que se ejecutan en varios
nodos de servidores de aplicaciones en varios países. Para realizar análisis
de pedidos y ventas casi en tiempo real, podemos instalar una base de
datos de caché IMDB en cada nodo. Por el contrario, no es necesario
almacenar los perfiles de los clientes en todos los nodos. Cuando un nodo
aborda una orden de venta, el perfil del cliente se carga desde la ubicación
más actualizada, que podría ser un nodo o la base de datos central. Cuando
finaliza la transacción, el perfil del cliente se actualiza y se almacena de
nuevo en la base de datos central. La caché de IMDB también se puede
utilizar como caché de solo lectura, por ejemplo, para proporcionar un
acceso rápido a estructuras de datos auxiliares, como tablas de búsqueda.
Por otro lado, El envejecimiento de los datos es una operación que elimina
los datos que ya no son necesarios. Hay dos tipos generales de algoritmos
de antigüedad de datos: los que eliminan los datos antiguos en función de
un valor de marca de tiempo y los que eliminan los datos utilizados menos
recientemente. Como los otros sistemas comentados en este capítulo,
TimesTen usa la compresión de tablas a nivel de columna. Este mecanismo
proporciona reducción de espacio para las tablas al eliminar los valores
duplicados dentro de las columnas, mejorando el rendimiento de las
consultas SQL que deben realizar escaneos completos de la tabla.
Finalmente, TimesTen logra durabilidad de manera similar a SAP HANA,
es decir, mediante el registro de transacciones en una versión de la base de
datos basada en disco. TimesTen mantiene la versión basada en disco
usando una operación de punto de control que ocurre en segundo plano,
con bajo impacto en las aplicaciones de base de datos. TimesTen también
tiene un punto de control de bloqueo que no requiere archivos de registro
de transacciones para su recuperación y debe ser iniciado por la aplicación.
TimesTen utiliza el registro de transacciones para recuperar transacciones
con fallas, deshacer transacciones que se deshacen, replicar cambios en
otras bases de datos de TimesTen y / o
a las tablas de Oracle y permitir que las aplicaciones detecten cambios en las
tablas.
Además de lo anterior, Oracle también comercializa un dispositivo
llamado Oracle Exalytics In-Memory Machine, 7 similar al dispositivo SAP
HANA estudiado en la Sect. 13.5.4. Exalytics se compone de hardware,
software de inteligencia empresarial y Oracle TimesTen IMDBS. El
hardware consta de un único servidor configurado para análisis en
memoria de cargas de trabajo de inteligencia empresarial. Exalytics viene
con Oracle BI Foundation Suite y Essbase, un servidor OLAP
multidimensional mejorado con una sintaxis MDX más potente y un motor
de consultas MDX de alto rendimiento. Oracle Exalytics complementa
Oracle Exadata Database Machine, que admite un alto rendimiento para
aplicaciones OLAP y OLTP.
5 13 nuevas tecnologías de
7
http://www.oracle.com/us/solutions/ent-performance-bi/business-intelligence/
exalytics-bi-machine / visión general / index.html
13.5 Sistemas 5
13.5.6 SQL Server xVelocity
El enfoque de Microsoft hacia la tecnología de almacenamiento en
columnas difiere de los descritos anteriormente. Microsoft decidió
mantener SQL Server como su único producto de base de datos e
incorporar la tecnología de almacenamiento de columnas en forma de
índice opcional. Microsoft SQL Server incluye una colección de tecnologías
de administración de datos en memoria y optimizadas para memoria
denominadas xVelocity.8 El motor de análisis en memoria xVelocity,
anteriormente conocido como VertiPaq, es un motor de almacenamiento
de columnas en memoria para consultas analíticas, que utiliza las cuatro
técnicas principales que discutimos anteriormente: almacenamiento en
columnas, técnicas de compresión, almacenamiento en caché en memoria
y alto paralelismo. escaneo de datos y
algoritmos de agregación. El motor xVelocity funciona con los modelos
tabulares de PowerPivot para Excel, SharePoint y Analysis Services, pero
no con las herramientas multidimensionales y de minería de datos de
Analysis Services.
El motor xVelocity proporciona índices de almacenamiento de columnas,
que apuntan a
mejorar el procesamiento de consultas en los almacenes de datos de SQL
Server. Cada columna se almacena por separado como en una base de
datos de almacenamiento de columnas. Además, xVelocity incluye una
tecnología de ejecución de consultas basada en vectores llamada
procesamiento por lotes para acelerar aún más el procesamiento de
consultas. Los datos se llevan a una memoria caché optimizada para la
memoria a pedido, aunque el rendimiento completo de las consultas en
memoria se logra cuando todos los datos necesarios para una consulta ya
están en la memoria principal. El índice de almacenamiento de columnas
de xVelocity agrupa y almacena datos para cada columna y luego une todas
las columnas para completar el índice completo. El procesador de
consultas de SQL Server puede aprovechar este tipo de índice para mejorar
significativamente el tiempo de ejecución de las consultas.
Una característica clave de los índices de almacenamiento de columnas
es que están integrados en SQL Server, que es un RDBMS de
almacenamiento de filas de propósito general, y los índices se pueden
definir como cualquier otro. Dada la ganancia de rendimiento que este
enfoque logra para muchos tipos de consultas de almacenamiento de datos,
incluso podemos deshacernos de la necesidad de crear y mantener tablas
de resumen. Sin embargo, estas características se combinan con algunas
limitaciones que discutiremos más adelante.
La sintaxis para crear un índice de almacén de columnas se introdujo en
el Cap. 7. Como ejemplo, indexamos las columnas de la tabla de hechos de
ventas en el almacén de datos de Northwind de la siguiente manera:
CREAR ÍNDICE DE COLUMNSTORE NO CLASIFICADO Ventas de CSIdx
EN Ventas (ProductKey, EmployeeKey, CustomerKey);
http://msdn.microsoft.com/en-us/library/hh922900.aspx
8
Mapa de bits de filas
13.5 Sistemas 5
Lote de filas
Vectores de columna
ProductKey
CustomerKey ...
Suponga que esta tabla se actualiza una vez al día y que necesitamos
datos de hechos actuales. A continuación mostramos una partición en
tiempo real de granularidad de transacciones, llamada Partition Sales, que
almacena las transacciones que ocurrieron durante el último día, que no se
han cargado en la tabla de hechos.
Una consulta que solicite las ventas totales por empleado y cliente
necesitaría acceder a ambas tablas, de la siguiente manera:
SELECCIONE EmployeeKey, CustomerKey, SUM
(SalesAmount) DESDE (SELECCIONAR
EmployeeKey, CustomerKey,
SUM (SalesAmount) AS SalesAmount
FROMEmployee E, Customer C, Sales S
WHEREE.EmployeeKey = S.EmployeeKey
Y
C.CustomerKey =
S.CustomerKey GROUP BY EmployeeKey,
CustomerKey UNION
SELECCIONE EmployeeKey, CustomerKey,
SUM (SalesAmount) AS SalesAmount
FROMEmployee E, cliente C, ventas de
partición S WHEREE.EmployeeKey = S.EmployeeKey
Y
C.CustomerKey = S.CustomerKey
GROUP BY EmployeeKey, CustomerKey) AS
FactFull
GROUP BY FactFull.EmployeeKey, FactFull.CustomerKey
a
Fuentes de datos Base de datos provisional
Base de datos provisional
Almacén de datos
B
Fuentes de datos Base de datos provisional
Almacén de datosAlmacén de datos
ExtractLoadTransform
Figura 13.7 (a) Proceso de extracción, transformación y carga (ETL). (b) Proceso
de extracción, carga y transformación (ELT)
13.8 Resumen
Tenemos estudió los cambios que los requisitos de análisis de big data están
introduciendo en el mundo del almacenamiento de datos y las respuestas
que la academia y la industria han ideado para ellos. Presentamos el
modelo MapReduce y su implementación más popular, Hadoop. También
presentamos dos lenguajes de consulta de alto nivel para Hadoop, a saber,
Pig Latin y HiveQL. También estudiamos dos arquitecturas de bases de
datos que están ganando impulso en el almacenamiento de datos y la
inteligencia empresarial: bases de datos de almacenamiento de columnas e
IMDBS. Describimos las principales características de algunos de los
sistemas de bases de datos basados en estas tecnologías: Vertica,
MonetDB, SAP HANA, Oracle TimesTen y Microsoft xVelocity. Por último,
analizamos dos paradigmas modernos que se utilizan cada vez más en el
almacenamiento de datos y la inteligencia empresarial: el almacenamiento
de datos en tiempo real y ELT.
13.10 Preguntas de repaso 535
13.11 Ejercicios
1
http://www.w3.org/2004/OWL/
2
http://www.w3.org/TR/rdf11-concepts/
3
http://www.w3.org/TR/rdf-schema/
14.1 Web 5
propiedades y representan relaciones entre recursos, agregando semántica
a los términos en un vocabulario. De manera intuitiva, RDF nos permite
describir instancias, mientras que RDFS agrega información de esquema a
esas instancias. Un estudio completo de la semántica formal de RDFS está
más allá del alcance del libro, pero proporcionamos a continuación los
conceptos básicos que usaremos en las siguientes secciones.
Entre los muchos términos del vocabulario RDFS, el fragmento que
representa las características esenciales de RDF es el subconjunto
compuesto por los siguientes términos: rdf: type, rdf: Class, rdfs: Resource,
rdfs: Property, rdfs: range, rdfs: domain , rdfs: subClassOf y rdfs:
subPropertyOf. Por ejemplo, una clase triple Employee rdf: type indica que
Employee es una clase que agrega objetos del mismo tipo, en este caso
empleados (dejamos los problemas sintácticos para presentarlos más
adelante, ya que en realidad todos los recursos deben definirse mediante
IRI). El triple Davolio rdf: type Employee dice que Davolio es miembro de
la clase Employee. El término rdfs: Resource denota la clase de todos los
recursos y rdf: Property la clase de todas las propiedades. Es importante
destacar que la pertenencia a una clase no es exclusiva, ya que un recurso
puede pertenecer a varias clases diferentes. Elementos pertenecientes a la
clase rdf: La propiedad representa las relaciones entre los recursos, que se
utilizan en la parte de predicado de los triples RDF. Por ejemplo, hasSalary
puede definirse como una propiedad de un empleado usando la instrucción
hasSalary rdf: type rdf: Property. El predicado rdfs: subClassOf nos
permite definir relaciones de generalización entre clases. Por ejemplo, el
rdf triple TemporaryEmployee: subClassOf Employee dice que cada
empleado temporal también es un empleado. De manera análoga, el
predicado rdfs: subPropertyOf nos permite definir relaciones de
generalización entre propiedades. Por ejemplo, hasLowSalary rdfs:
subPropertyof hasSalary indica una subpropiedad para describir a los
empleados con salarios bajos. Un sistema de reglas se puede definir
utilizando estos y otros predicados, lo que permite inferir conocimientos a
partir de un gráfico RDF. La semántica RDF utilizado en la parte de
predicado de los triples RDF. Por ejemplo, hasSalary puede definirse como
una propiedad de un empleado usando la instrucción hasSalary rdf: type
rdf: Property. El predicado rdfs: subClassOf nos permite definir relaciones
de generalización entre clases. Por ejemplo, el rdf triple
TemporaryEmployee: subClassOf Employee dice que cada empleado
temporal también es un empleado. De manera análoga, el predicado rdfs:
subPropertyOf nos permite definir relaciones de generalización entre
propiedades. Por ejemplo, hasLowSalary rdfs: subPropertyof hasSalary
indica una subpropiedad para describir a los empleados con salarios bajos.
Un sistema de reglas se puede definir utilizando estos y otros predicados,
lo que permite inferir conocimientos a partir de un gráfico RDF. La
semántica RDF utilizado en la parte de predicado de los triples RDF. Por
ejemplo, hasSalary puede definirse como una propiedad de un empleado
usando la instrucción hasSalary rdf: type rdf: Property. El predicado rdfs:
subClassOf nos permite definir relaciones de generalización entre clases.
Por ejemplo, el rdf triple TemporaryEmployee: subClassOf Employee dice
que cada empleado temporal también es un empleado. De manera análoga,
el predicado rdfs: subPropertyOf nos permite definir relaciones de
generalización entre propiedades. Por ejemplo, hasLowSalary rdfs:
5 14 almacenes de datos y la web semántica
subPropertyof hasSalary indica una subpropiedad para describir a los
empleados con salarios bajos. Un sistema de reglas se puede definir
utilizando estos y otros predicados, lo que permite inferir conocimientos a
partir de un gráfico RDF. La semántica RDF hasSalary se puede definir
como una propiedad de un empleado usando la instrucción hasSalary rdf:
type rdf: Property. El predicado rdfs: subClassOf nos permite definir
relaciones de generalización entre clases. Por ejemplo, el rdf triple
TemporaryEmployee: subClassOf Employee dice que cada empleado
temporal también es un empleado. De manera análoga, el predicado rdfs:
subPropertyOf nos permite definir relaciones de generalización entre
propiedades. Por ejemplo, hasLowSalary rdfs: subPropertyof hasSalary
indica una subpropiedad para describir a los empleados con salarios bajos.
Un sistema de reglas se puede definir utilizando estos y otros predicados,
lo que permite inferir conocimientos a partir de un gráfico RDF. La
semántica RDF hasSalary se puede definir como una propiedad de un
empleado usando la instrucción hasSalary rdf: type rdf: Property. El
predicado rdfs: subClassOf nos permite definir relaciones de
generalización entre clases. Por ejemplo, el rdf triple TemporaryEmployee:
subClassOf Employee dice que cada empleado temporal también es un
empleado. De manera análoga, el predicado rdfs: subPropertyOf nos
permite definir relaciones de generalización entre propiedades. Por
ejemplo, hasLowSalary rdfs: subPropertyof hasSalary indica una
subpropiedad para describir a los empleados con salarios bajos. Un sistema
de reglas se puede definir utilizando estos y otros predicados, lo que
permite inferir conocimientos a partir de un gráfico RDF. La semántica
RDF el triple TemporaryEmployee rdf: subClassOf Employee dice que cada
empleado temporal también es un empleado. De manera análoga, el
predicado rdfs: subPropertyOf nos permite definir relaciones de
generalización entre propiedades. Por ejemplo, hasLowSalary rdfs:
subPropertyof hasSalary indica una subpropiedad para describir a los
empleados con salarios bajos. Un sistema de reglas se puede definir
utilizando estos y otros predicados, lo que permite inferir conocimientos a
partir de un gráfico RDF. La semántica RDF el triple TemporaryEmployee
rdf: subClassOf Employee dice que cada empleado temporal también es un
empleado. De manera análoga, el predicado rdfs: subPropertyOf nos
permite definir relaciones de generalización entre propiedades. Por
ejemplo, hasLowSalary rdfs: subPropertyof hasSalary indica una
subpropiedad para describir a los empleados con salarios bajos. Un sistema
de reglas se puede definir utilizando estos y otros predicados, lo que
permite inferir conocimientos a partir de un gráfico RDF. La semántica
RDF permitiendo así inferir conocimientos a partir de un gráfico RDF. La
semántica RDF permitiendo así inferir conocimientos a partir de un gráfico
RDF. La semántica RDF4 La especificación define una semántica precisa y
los correspondientes sistemas completos de reglas de inferencia para RDF
y RDFS. Finalmente, observemos que, en general, las triples que
representan el esquema y los datos de instancia coexisten en conjuntos de
datos RDF.
4
http://www.w3.org/TR/rdf11-mt/
5
http://www.w3.org/TR/rdf-syntax-grammar/
6
http://www.w3.org/TR/turtle/
5 14 almacenes de datos y la web semántica
http://example.org/NWDW#hasEmployee
Tenga en cuenta que Turtle proporciona una sintaxis mucho más simple y
menos detallada, en comparación con RDF / XML, por lo que usamos
Turtle en el resto del capítulo.
Los tipos de datos se admiten en RDF a través del sistema de tipos de
datos XML. Por ejemplo, de forma predeterminada, ex: HireDate se
interpretaría como un valor de cadena en lugar de un valor de fecha. Para
definir explícitamente los tipos de datos para el ejemplo anterior,
escribiríamos en Turtle:
14.1 Web 5
@pre fi x rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@pre fi x ex:<http://example.org/NWDW#> .
@pre fi x xsd: <http://www.w3.org/2001/XMLSchema#> .
ex: iri ex: hasEmployee ex: employee1.
ex:mimetroployee1 rdf: tipo ex:MImetroployee ; ex: FirstNametromi
''Nancy''∧∧xsd: cadena ; ej .: Apellido ''Davolio''∧∧xsd: cadena; ex:
HireDate''1992-05-01''∧∧xsd: fecha .
A Para simplificar aún más la notación, Turtle permite que rdf: type sea
reemplazado por 'a'. Por lo tanto, en lugar de
ex: employee1 rdf: type ex: Employee;
podríamos escribir
ex: employee1 a ex: Employee;
Además, el atributo xml: lang nos permite indicar el idioma del texto en
el triple. Por ejemplo, para indicar que el nombre del empleado es un
nombre en inglés, podemos escribir en Turtle:
ej .: empleado1 ej .: Nombre ''Nancy''@en; ej .: Apellido''Davolio''@en.
a
SalesKey ProductKey CustomerKey TimeKey Cantida
d
s1 p1 c1 t1 100
s2 p1 c2 t2 100
··· · ·· ··· ··· ···
B
ProductKey Nombre del Cantidad por Precio Interrumpido Nombre de la
producto unidad unitario categoría
p1 prod1 25 60 No c1
p2 prod2 45 60 No c1
··· ··· · ·· ··· · ·· ···
Mapeo directo
http://www.w3.org/TR/rdb-direct-mapping/
7
14.1 Web 5
<Product / ProductKey =''p1''> rdf: tipo <Producto> .
<Product / ProductKey =''p1''> <Producto # ProductKey> ''p1'' .
<Product / ProductKey =''p1''> <Ventas # ProductName> ''prod1'' .
<Product / ProductKey =''p1''> <Ventas # CantidadPerUnidad> ''25'' .
<Product / ProductKey =''p1''> <Ventas # UnitPrice> ''60'' .
<Product / ProductKey =''p1''> <Ventas # descontinuado> ''No'' .
<Product / ProductKey =''p1''> <Ventas # CategoryKey> ''c1'' .
<Product / ProductKey =''p1''> <Ventas # ref-CategoryKey>
<Category / CategoryKey =''c1''> .
...
dice que el sujeto (la primera fila en Ventas) contiene una clave externa en
la columna ProductKey (el predicado en el triple) que se refiere al triple
identificado en el objeto (el triple cuyo sujeto es <Product / ProductKey = ''
p1 ''>). Como puede verse, el mapeo directo es muy sencillo, aunque rígido,
en el sentido de que no permite ningún tipo de personalización. De hecho,
la estructura del gráfico RDF resultante refleja directamente la estructura
de la base de datos, el vocabulario RDF de destino refleja directamente los
nombres de los elementos del esquema de la base de datos, y ni la
estructura ni el vocabulario pueden
ser cambiado.
Mapeo R2RML
http://www.w3.org/TR/r2rml
8
5 14 almacenes de datos y la web semántica
#TriplesMap_Product
<Producto
#TriplesMap> a rr:
TriplesMap;
rr: tablaLógica [rr: nombreTabla ''Producto'' ]; rr:
subjectMap [
rr: plantilla ''http://example.org/product/ ProductKey '' ;
{ }
rr: clase ex: producto];
rr: predicateObjectMap [rr:
predicado ex: productName;
rr: objectMap [rr: columna ''Nombre del producto'' ; rr: idioma''en'' ]; ]; rr:
predicateObjectMap [
rr: predicado ex: unitPrice;
rr: objectMap [rr: columna ''Precio unitario'' ; rr: tipo de datos rdfs: integer]; ].
14.2 SPARQL
http://www.w3.org/TR/sparql11-query/
9
5 14 almacenes de datos y la web semántica
Esta consulta define un patrón de gráfico que vincula las ventas con los
clientes y las ciudades. Antes de agrupar, necesitamos encontrar los triples
que satisfagan el patrón del gráfico y seleccionar los clientes de San
Francisco. A continuación, agrupamos por pares de? Cust y? Prod y, para
cada grupo, tomamos la suma del atributo? Qty. Finalmente, se ordenan
los triples resultantes.
Subconsultas
En SPARQL, una subconsulta se usa para buscar un cierto valor en una
base de datos y luego usar este valor en una condición de comparación.
Una subconsulta es una consulta encerrada entre llaves que se utilizan
dentro de una cláusula WHERE. La consulta externa se denomina consulta
externa.
Como ejemplo, consideremos la consulta "Para cada cliente, calcule el
monto máximo de ventas entre todos sus pedidos". La consulta se escribe
de la siguiente manera:
SELECCIONAR (MAX (? TotalSales) como?
MaxSales) DONDE
{
SELECCIONE? Cust? OrderNo (SUM (? Sales) as? TotalSales)
¿DÓNDE? Ventas un ex: Ventas;
{
ej .: Sales # Customer? cust;
ej .: Sales # OrderNo? orderNo; ej .: Ventas # SalesAmount?
ventas.
cust a ex: cliente.
}
5 AGRUPAR POR? Cust?
14 almacenes de datos y la web semántica
}
OrderNo GROUP BY? Cust
14.3 Representación RDF de datos 5
La consulta interna calcula el monto total de ventas de cada cliente y
pedido. Luego, en la consulta externa, para cada cliente seleccionamos el
monto máximo de venta entre todos sus pedidos.
Las subconsultas se utilizan comúnmente con las palabras clave UNION y
MINUS.
El UNION combina patrones de gráficos para que coincida uno de varios
patrones de gráficos alternativos. Por ejemplo, la consulta "Productos que
han sido pedidos por clientes de San Francisco o suministrados por
proveedores de San José" se puede escribir de la siguiente manera:
SELECT DISTINCT? ProdName
DONDE
{
SELECCIONAR? Prod
¿DÓNDE? Ventas por ejemplo: Ventas; ej .: Ventas #
{
Producto? prod; ex: Sales # Customer? cust
.
cust a ex: cliente; ex: Cliente # Ciudad? custCity.
? custCity a ex: City; ej .: Ciudad # Nombre?
custCityName. FILTRO (? CustCityName =''San
Francisco'') } }
UNIÓN
{
SELECCIONAR? Prod
¿DÓNDE? Ventas por ejemplo: Ventas; ej .: Ventas #
{
Producto? prod; ej .: Ventas # Proveedor?
sup .
? sup a ex: Proveedor; Ej .: Proveedor # Ciudad? supCiudad.
? supCity a ex: Ciudad; ej .: Ciudad # Nombre?
supCityName. FILTRO (? SupCityName =''San
Jose'') } }}
De manera análoga, la operación MENOS calcula la diferencia entre los
resultados de dos subconsultas. Un ejemplo es la consulta: "Productos que
no han sido pedidos por clientes de San Francisco", que se puede escribir
de la siguiente manera:
SELECT DISTINCT? Prod
¿DÓNDE? Ventas por ejemplo: Ventas; ej .: Sales # Product? prod .
{
MENOS
{
SELECCIONAR? Prod
¿DÓNDE? Ventas por ejemplo: Ventas; ej .: Ventas #
{
Producto? prod; ex: Sales # Customer? cust
.
cust a ex: cliente; ej .: Cliente # Ciudad? ciudad.
? ciudad a ex: Ciudad; ej .: Ciudad #
Nombre? cityName. FILTRO (? CityName
=''San Francisco'') }}}}
La consulta interna calcula los productos pedidos por los clientes de San
Francisco. La consulta externa obtiene todos los productos que se han
pedido y les resta los productos obtenidos en la consulta interna.
Nosotros ahora están listos para estudiar dos enfoques para representar
5 14 almacenes de datos y la web semántica
datos multidimensionales en RDF, a saber, QB y QB4OLAP. Suponga que
la empresa Northwind quiere analizar los datos de ventas con datos
económicos y demográficos,
14.3 Representación RDF de datos 5
publicados como datos abiertos en la web. En lugar de cargar y mantener
esos datos de forma permanente en el almacén de datos local, podría ser
más eficiente cargarlos temporalmente en el almacén para su análisis u
operar sobre un cubo directamente en formato RDF, como estudiaremos
en las siguientes secciones. Poder publicar cubos de datos en RDF también
permitirá a la empresa publicar datos en la web para que sean compartidos
por todas las sucursales de la empresa.
En nuestro estudio, utilizaremos una ontología de Ordnance Survey que
contiene la geografía administrativa y las áreas de votación civil en Gran
Bretaña.10 En esta ontología, las unidades administrativas se definen como
clases y la relación geográfica entre ellas se define a través de propiedades.
Por ejemplo, GovernmentO ffi ceRegion (GOR) y UnitaryAuthority (UA)
son clases, mientras que hasGORCode, hasUACode y hasName son
propiedades. La relación entre UA, GOR y países (en el Reino Unido) se da
a nivel de instancia, en lugar de a nivel de esquema. Por ejemplo, la
Autoridad Unitaria de Lectura, con el código 00MC, se encuentra en la
Región de la Oficina de Gobierno del Sureste. A modo de ejemplo,
mostramos a continuación una parte de la ontología correspondiente a
Lectura:
@pre fi x rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
@prefijo id: <http://data.ordnancesurvey.co.uk/id/>
@pre fi x admgeo: <http://data.ordnancesurvey.co.uk/ontology/admingeo/>
@pre fi x skos: <http://www.w3.org/2004/02/skos/core#>
<http://data.ordnancesurvey.co.uk/id/7000000000038895>
a admgeo: Municipio; a admgeo: UnitaryAuthority;
rdf: etiqueta ''El distrito de Reading'' ; admgeo: gssCode''E06000038''
; admgeo: hasAreaCode''UTA'' ; admgeo: hasUACode''00MC'' ; skos:
prefLabel''El distrito de Reading'' .
10
http://data.ordnancesurvey.co.uk/ontology/admingeo/
5 14 almacenes de datos y la web semántica
Todas todas
Año
País GOR UA 2006 2007 2008
Milton Keynes 92 94 96
Sureste
Inglater Leer 58 58 60
ra Sur oeste Bournemouth 71 72 73
Cardi ff 132,1 134,2 136,7
Gales Gales
Newport 58,7 59,6
Figura 14.5 Una instancia del cubo de datos HouseholdCS en formato tabular
11
http://www.w3.org/TR/vocab-data-cube/
12
http://sdmx.org/?page id = 10
14.3 Representación RDF de datos 5
qb: componentProperty
qb: estructura qb: sliceKey qb: dimensión qb: atributo
qb: qb: medir
qb: Conjunto de datos qb: SliceKey componentProperty
skos:
qb: rebanada
qb: qb:
qb: observación qb: subSlice
sdmx:
qb:
sdmx:
FrequenceRole sdmx: qb: codeList
CountRole sdmx:
EntityRole sdmx: sdmx:
TimeRole sdmx: skos:
MeasureTypeRole
sdmx: NonObsTimeRole
sdmx: IdentityRole sdmx: CodeList
sdmx: PrimaryMeasureRole
13
http://www.w3.org/2009/08/skos-reference/skos.html
14.3 Representación RDF de datos 5
ns2: 921 a adgeo: País; rdfs:
etiqueta''Inglaterra''@en; skos: inScheme ex:
geo; skos: más estrecho ns1: J.
ns1: J a adgeo: GovernmentO ffi ceRegion; rdfs:
etiqueta''Sureste''@en; skos: inScheme ex: geo; skos: más
estrecho ns0: 00mc.
ns0: 00mc a adgeo: UnitaryAuthority; rdfs: etiqueta''El distrito de Reading''@en; skos:
inScheme ex: geo.
La dimensión se denota ex: Geography, y se define como miembro de las
clases qb: DimensionProperty y qb: CodedProperty. Esta dimensión está
asociada a un esquema de concepto ex: geo, un miembro de la clase skos:
ConceptScheme, usando la propiedad qb: codeList. Intuitivamente, esta
lista de códigos representa el conjunto de valores de la dimensión,
organizados jerárquicamente utilizando el esquema conceptual. El
miembro de dimensión ns2: 921 se define como el concepto superior en ex:
geo usando la propiedad skos: hasTopConcept. También se afirma que
dicho elemento es una instancia de la clase adgeo: Country, denominada
Inglaterra. Las relaciones jerárquicas entre los miembros se establecen
utilizando la propiedad skos: más estrecha, desde los conceptos más
generales hasta los más específicos, es decir, de adgeo: Country a través de
adgeo: GovernmentO ffi ceRegion a adgeo: UnitaryAuthority.
Remarcamos, una vez más,
14
http://purl.org/qb4olap/cubes
5 14 almacenes de datos y la web semántica
qb4o:
rdf: tipo qb4o: hasAggregateFunction
qb:
qb: componentProperty
qb: componente
qb: dimensión qb:
atributo qb: medida
qb: estructura qb: sliceKey qb4o: nivel
qb: componentProperty
qb: Conjunto de datos qb: SliceKey
qb:
skos:
qb:
sdmx:
qb: qb:
sdmx: FrequenceRole
sdmx:
qb:
CountRole sdmx: sdmx: qb: codeList
EntityRole sdmx: TimeRole
sdmx: MeasureTypeRole
sdmx: NonObsTimeRole skos:
sdmx: IdentityRole sdmx:
PrimaryMeasureRole
sdmx: CodeList
Empleado
Ciu
Territori
ID de
empleado Proveedor dad
Nombre CityName
Identificación
Apellido
Geografí
del proveedor
Título Fecha
Nombre de la
de
empresa Expresar
nacimiento
Dirección
Fecha de
Código postal Nombre del Estado
contratación
EnglishStateName
Fecha
StateType StateCode
Dirección Cliente StateCapital
Ciudad
Geografí
Región Identificación
PostalCode del cliente
Supervi
Hora
Fecha Canti
DayNbWeek
dad de
ventas
DayNameWeek Fecha de Precio por unidad:
DíaNbMes orden
Promedio +! Descuento:
DíaNbAño Promedio +!
Fecha de País
Cantidad de ventas
vencimie
nto Nombre del país
WeekNbYear Código de país
Fecha de envío
País Capital
/Importe neto
Calendario Subdivisión de
población
Mes
Producto
Continente
MonthNumber
MonthName ID del Producto
ContinentName
Nombre del
producto
Quarter CantidadPerUni
dadUnidadPreci
Quarter o Descatalogado
Expedidor
Categorias
ShipperID Nombre
Semestre de empresa
Categoría
Semestre
Categoria ID Pedido
Categoría
Año Nombre N º de pedido
Descripción OrderLineNo
Año
Esta consulta calcula las ventas totales por empleado, las clasifica en orden
descendente de las ventas totales y conserva los tres primeros resultados.
Consulta 14.6. Empleado más vendido por producto y año.
SELECT? ProdName? YearNo? MaxSales? FName?
LName WHERE
{
# Ventas máximas de empleados por producto y año
SELECCIONE? ProdName? YearNo (MAX (? TotalSales) as?
{
MaxSales) DONDE
{
SELECT? ProdName? YearNo? Emp (SUM (? Sales) AS?
{
TotalSales) WHERE? O qb: dataSet nwi: dataset1; nw: producto?
{
prod; nw: OrderDate? odate; nw: empleado? emp ;
nw: SalesAmount? ventas.
? prod qb4o: inLevel nw: Producto; nw: productName? prodName.
? emp qb4o: inLevel nw: Empleado.
? odate qb4o: inLevel nw: OrderDate; skos: ¿más amplio? mes.
? mes qb4o: inLevel nw: mes; skos: un cuarto más amplio.
? trimestre qb4o: inLevel nw: trimestre; skos: ¿más amplio? sem.
? sem qb4o: inLevel nw: Semestre; skos: año más amplio.
? año qb4o: inLevel nw: año; nw: año? año No.}
AGRUPAR POR? ProdName? YearNo? Emp }}
5 14 almacenes de datos y la web semántica
La primera consulta interna calcula para cada país las ventas totales y las
ventas acumuladas de todos los países que tienen ventas totales mayores o
iguales a las ventas totales del país. La segunda consulta interna calcula el
valor de umbral, que representa las ventas acumuladas mínimas mayores o
iguales al 50% de las ventas totales. Finalmente, el FILTRO selecciona
todos los países cuyas ventas acumuladas son menores o iguales al valor
umbral.
Consulta 14.8. Ventas totales y ventas medias mensuales por empleado y
año.
SELECT? FName? LName? YearNo (SUM (? MonthlySales) AS? TotalSales) (AVG (?
MonthlySales) AS? AvgMonthlySales)
DÓNDE
{
# Ventas mensuales por empleado
SELECT? FName? LName? Month (SUM (? Sales) AS? MonthSales)
{
¿DÓNDE? O qb: dataSet nwi: dataset1; nw: empleado? emp ;
{
nw: OrderDate? odate; nw: SalesAmount? ventas.
? emp qb4o: inLevel nw: Empleado; nw: firstName? fName; nw:
apellido? lName.
? odate qb4o: inLevel nw: OrderDate; skos: ¿más amplio? mes.
? mes qb4o: inLevel nw: mes.
}
AGRUPAR POR? FName? LName? Mes
}
skos del mes: trimestre más amplio.
5 14 almacenes de datos y la web semántica
Aquí, la consulta interna calcula las ventas totales por pedido. La consulta
externa luego acumula el resultado anterior al nivel del mes y calcula las
medidas solicitadas.
Consulta 14.15. Para cada empleado, monto total de ventas, número de
ciudades y número de estados a los que está asignada.
SELECT? FName? LName (SUM (? Sales) / COUNT (DISTINCT? City) AS?
TotalSales) (COUNT (DISTINCT? City) AS? NoCities)
(COUNT (DISTINCT? State) AS? NoStates)
¿DÓNDE? O qb: dataSet nwi: dataset1; nw: empleado? emp; nw: SalesAmount? ventas
{
.
? emp qb4o: inLevel nw: Empleado; nw: firstName? fName; nw:
apellido? lName; skos: ¿más amplia? ciudad.
? ciudad qb4o: inLevel nw: Ciudad; skos: ¿más amplio?
? estado qb4o: inLevel nw: estado.
}
AGRUPAR POR? FName?
LName ORDER BY?
FName? LName
Recuerde que existe una relación de muchos a muchos entre los empleados
y las ciudades. Por lo tanto, la consulta anterior se acumula en los niveles
de ciudad y estado y luego agrupa el resultado por empleado. Luego, en la
cláusula SELECT, sumamos la medida del monto de las ventas y la
dividimos por el número de ciudades distintas asignadas a un empleado.
Esto resuelve el problema de la doble contabilización al que nos referimos
en la Sec.4.2.6.
14.6 Resumen
Hay muchos libros que explican los conceptos básicos de la web semántica,
por ejemplo, [82]. Un libro completamente dedicado a SPARQL es [41]. En
el momento de escribir este libro, no hay mucho trabajo sobre el tema de la
aplicación de OLAP directamente sobre datos RDF. Sección14.3 de este
capítulo se basa en el trabajo de investigación de Etcheverry y Vaisman
sobre QB4OLAP [52, 53]. K¨ampgen y Harth [99] También proponen
aplicar operaciones OLAP sobre QB, aunque este enfoque no resuelve las
limitaciones discutidas en este capítulo con respecto a la ausencia de
estructura de dimensiones en QB. En una secuela [100], los mismos
autores propusieron cargar datos estadísticos vinculados en un triple
almacén RDF y responder consultas OLAP utilizando SPARQL. Para ello,
implementan un motor OLAP a SPARQL que traduce las consultas OLAP a
SPARQL.
Nosotros También mencionó que otro enfoque de investigación estudia
cómo extraer datos multidimensionales de la web semántica y luego
analizar estos datos utilizando técnicas OLAP tradicionales. Los métodos
para hacer esto se basan en ontologías, que nos permiten extraer datos de
forma semiautomática. La idea es utilizar ontologías para identificar
hechos y dimensiones que pueden poblar un cubo de datos. A continuación
mencionamos brevemente algunos de estos trabajos.
Niinim¨aki u n D n ort e iemi [145] t u se ontología mapp En g t o convertir
Data fuentes a RDF y luego consultar estos datos RDF con SPARQL para
completar el esquema OLAP. El proceso ETL está guiado por la ontología.
Además, los autores crean una ontología OLAP, de alguna manera similar a
los vocabularios discutidos en este capítulo. Las ontologías se expresan en
RDF y OWL. En la misma línea, Romero y Abell´o [180]abordar el diseño
del almacén de datos a partir de una ontología OWL que describe las
fuentes de datos. Identifican las dimensiones que caracterizan un concepto
central bajo análisis (el concepto de hecho) buscando conceptos conectados
a él a través de relaciones de uno a muchos. La misma idea se utiliza para
descubrir los diferentes niveles de las jerarquías dimensionales, partiendo
del concepto que representa el nivel base. La salida del método es un
esquema de estrella o copo de nieve que garantiza la resumibilidad de los
datos, aptos para ser instanciados en una base de datos multidimensional
tradicional. Finalmente, Nebot y Berlanga [142] propuso un método
semiautomático para extraer datos semánticos bajo demanda en una base
de datos multidimensional. De esta forma, los datos podrían analizarse
utilizando técnicas OLAP tradicionales. Aquí, los autores asumen que los
datos se representan como una ontología OWL. Una parte de esta ontología
contiene los axiomas de la ontología de dominio y aplicación, mientras que
la otra parte contiene el almacén de instancias real. Un esquema
multidimensional debe primero ser
14.9 Ejercicios 575
5 14 almacenes de datos y la web semántica
14.1 ¿Cuáles son los dos enfoques principales para realizar análisis
OLAP con datos de web semántica?
14.2 Describa brevemente RDF y RDFS y sus principales construcciones.
14.3 Dé un ejemplo de las serializaciones RDF / XML y Turtle de datos
RDF.
14.4 ¿Qué es SPARQL? ¿En qué se diferencia su semántica de la de SQL?
14.5 Dé un ejemplo de una consulta SPARQL, describa sus elementos y
analice cómo se evaluará.
14.6 Explique los dos enfoques estándar para representar datos
relacionales en RDF. ¿En qué se diferencian entre sí?
14.7 ¿Cómo podemos representar datos multidimensionales en RDF?
14.8 Explica brevemente el vocabulario del cubo de datos QB.
14.9 ¿Cómo se pueden representar las jerarquías en QB?
14.10 ¿Es posible realizar una operación de acumulación de datos
representados en QB?
14.11 ¿Cómo supera el vocabulario QB4OLAP las limitaciones anteriores?
14.12 Analizar y discutir la implementación de roll-up en QB4OLAP.
14.13 Explique cómo realizar consultas OLAP en SPARQL.
14.9 Ejercicios
Ventas
ID del identifi Identificaci ID de ID de ventas en costo de las ventas
Producto cación ón del promoción tienda la tienda la tienda de
de cliente unidades
tiempo
219 738 567 0 1 7.16 2.4344 3
684 738 567 0 1 12,88 5.0232 2
551 739 639 7 2 5,20 2.236 4
Producto
ID del nombre del producto nombre de ID de clase de
Producto la marca producto
219 Chips de maíz de la Mejor 12
mejor elección elección
551 Patatas fritas rápidas Rápido 12
bajas en grasa
684 Yogur de arándanos Gorila 6
gorila
Clase de
producto
ID de clase de subcategoría de categoria de departamento de familia de
producto producto producto producto productos
6 Yogur Lácteos Lácteos Comida
12 Papas Meriendas Meriendas Comida
fritas
Tiempo a dia
identifica la fecha El dia el mes el año dia del mes semana del mes del año trimest
ción de año re
tiempo
738 1998-01-07 miércoles enero 1998 7 4 1 Q1
739 1998-01-08 jueves enero 1998 8 4 1 Q1
Cliente
marital anual
identifi fname mi lname ciuda Expr país estado ingreso género educación
cación d esar
de
cliente
567 Charles L. Christensen Santa Fe DF México S $ 50K- $ F Solteros
639 Miguel J. Troyer Kirkland Was EE.U METRO 70K METR Escuela
hing U $ 30K- $ O secundaria
ton 50K
Promoción
identifi nombre del baile tipo de medio
cación
del
baile
0 Sin promoción Sin multimedia
7 Descuentos Periódico dominical,
fantásticos Radio, TV
Tienda
ID de tipo de nombre de ciudad de estado de país de la tienda
tienda tienda la tienda la tienda la tienda tienda sqft
1 Supermercad Tienda 1 Acapulco Guerrero México 23593
2 o Tienda 2 Bellingham Washing EE.UU 28206
Pequeña ton
tienda de
comestibles
Capítulo 15
Conclusión
intervalo e incluyendo una versión para un hecho y una versión para cada
dimensión asociada con un hecho. Siempre que se produzcan cambios en
las dimensiones o los hechos a nivel de esquema, se crea una nueva versión
estrella. Wrembel y Bebel adoptaron un enfoque similar [230], donde cada
cambio en el esquema o en el nivel de instancia da como resultado la
creación de una nueva versión del esquema, aunque esa versión tenga la
misma estructura que la original en el caso de cambios en el nivel de
instancia. Otras propuestas sobre este tema son, por ejemplo, [31, 140,
208, 231]. La sutil interrelación entre los almacenes de datos temporales y
la multiversión aún debe investigarse. Por ejemplo, una actualización del
esquema de una tabla de origen puede desencadenar un cambio en el
esquema del almacén de datos, por lo que se crea una nueva versión del
almacén de datos. Sin embargo, no sería confiable crear una nueva versión
del almacén de datos cada vez que cambia una instancia. Para ello, marcar
con el tiempo la asociación entre niveles sería claramente una mejor
opción. Por otro lado, si la fuente de datos fuera una base de datos
temporal, un almacén de datos temporal que contabilice, por ejemplo, los
cambios de esquema y parece natural.
A pesar de los avances en el campo, las bases de datos temporales no se
han
adoptado por los profesionales de la base de datos y, como consecuencia, lo
mismo ocurre en el campo del almacén de datos. Ésta es la razón principal
por la que no incluimos los almacenes de datos temporales en este libro.
Sin embargo, vale la pena señalar que la última versión del estándar SQL
lanzada en 2011 tiene facilidades temporales. Además, los sistemas de
administración de bases de datos actuales como Oracle, Teradata y DB2
también brindan soporte temporal. La disponibilidad de tales
características implica que los sistemas de almacenamiento de datos
temporales se convertirán en una realidad en un futuro cercano, pero para
que eso suceda, las bases de datos temporales deben usarse más de lo que
lo han sido hasta ahora.
Hay muchos problemas abiertos que resolver para hacer realidad los
almacenes de música. Además, todavía no existe un modelo de datos claro
ni un lenguaje de consulta. Finalmente, los autores identifican diez
desafíos para los almacenes de música. Algunos de ellos son la definición
de funciones de agregación apropiadas para datos acústicos, recuperación
consciente de la precisión, soporte de varios tipos de jerarquías e
integración de nuevos tipos de datos. Como puede verse, la mayoría de los
problemas ya resueltos en los data warehouses tradicionales siguen
abiertos en el ámbito musical, abriendo así un interesante campo de
investigación para los próximos años.
http://www.neo4j.org/
2
http://thinkaurelius.github.io/titan/
3
15.5 Análisis de gráficos y almacenes de datos de gráficos 587
5 15
Cliente
nombre
Tipo de
entidad
(descripción
breve)
atrib Cliente
dentificación del cliente Nombre (1,1) Apellido Fecha de nacimiento Salario Rango No Niños (0,1) Profesión (1, n) Dirección
Calle de ciudad uto de
Aficiones (0, n) Nombre Rangoidentificador de cardinalidad predeterminada
nombre
simple monovaluado
atributos cardinalidades
atributo compuesto
de atributo atributo compuesto
multivalor multivalor
atributos de los componentes
atributos de los
componentes
Tipo de
entidad
(con atributos e identificadores mostrados)
Tipo de entidad
Sección
débil (descripción
breve)
Sección
Semestre Año
Página de inicio (0,1)
mostrados) cardinalidades
(0, n) (1, n)
Participar
nombre
Tipo de relación
(descripción
breve)
cardinalidad
es
(0, n) (1, n)
Participar
atrib
StartDate EndDate Salario
utos de
nombre
Cliente
Tipo de relación de
generalización /
especialización
A.3 Modelo MultiDim para almacenes de 5
nom Producto
bre atributo ProductKey ProductNumber ProductName Descripción
de clave
primaria
atributos
Categoría
atributo de Producto
CategoryKey atributo de
clave
ProductKey clave
primari Categoría
Número de primaria
a producto Nombre
Nombre del Descripción
producto
atributo de Descripción
clave Integridad
externa
referencial
atributos
nomb Product
re atributo o atributo de
Product Número nombre Descripción Clave de clave
de clave o de del catego
primaria Clave product produc ría externa
o to
1 QB876 Leche ... C1 instancias
nombre Producto
Nivel
(Breve
Producto
descripción)
atrib
uto de Número de producto ProductName Descripción Tamaño
identificador de
nombre
atributos descriptivos
Nivel
(con atributos e identificadores mostrados)
5 Una notación gráfica
Ventas
nombre
Hecho
(Breve descripción)
Ventas
medi
Cantidad Cantidad
das de nombre
Hecho
(con las medidas mostradas)
(0,1)
(1,1)
(0, n)
(1, n)
Cardinalidades
Categoría Departamento
Número de
producto Nombre de la categoría Descripción
Nombre de Departamento Descripción
ProductName
Descripción
Tamaño
nivel padre
nivel
infantil jerarquía equilibrada
A.3 Modelo MultiDim para almacenes de 5
Categoría 1 categoría 2
Rama Banc
Cajero automático Agencia o
BranchName Nombre del
ATMNumber Modelo de dirección
Nombre de agencia Habla a NoEmpleados
Estruc
banco
... ... Habla a Habla a
Capital Sede
... ...
Jerarquía desequilibrada
Empleado
Supervisión
Subordinar
Jerarquía generalizada
Región
Expresar País
RegionName Código de región
...
Subdivisi
Nombre del Estado Código del estado Capital del estado Nombre del país Población de capital
... ...
Jerarquía irregular
5 Una notación gráfica
atributo de distribución
OrgStuct
ID de empleado Nombre de empleado
... Nombre de sección Descripción
...
Jerarquía no estricta
Trimes
tre Año fiscal
fiscal
Hora Trimestre No Año fiscal
Mes ... ...
Ho
Fecha
MonthName
... ... Trimestre
calendar Año del
io calendario
Trimestre No Año del
... calendario
...
Jerarquía alternativa
Ciuda Expre
d sar
Cliente Nombre de la Nombre del
ciudad Estado
Viv
AgeGroupId Descripción
E
Ciudad
TerritoryName Descripción
Hora Venta
s
Fecha Día Cantidad
Nombre Unidad Producto
Semana Precio
ID del Producto Producto Nombre Cantida
Semana Nb Ventas
Año Monto
Expre País
Ciudad sar
Geografí
tipo de datos
nombre espaciales para el
Expresar
nivel
Nivel espacial
(breve
descripción)
atrib tipo de datos
Expresar
espaciales para
uto de
el Población
Nombre del Estado Estado nivel Estado Área Estado Mayor Capita
identificador de
nombre
espacial
(con atributos e identificadores mostrados)
relación
topológica
condado
Expresar
Ubicación
Jerarquía
CountyName Condado espacial
Población Condado Área
Nombre
del Estado
Mantenimi Estado Capital
nombre ento de de la población
carreteras relación
topológica
Hecho
espacial (breve
descripción)
nombre Mantenimien
to de relación
medida carreteras
calculada con topológica
operadores
espaciales Hecho espacial tipo de datos
Longitud espaciales para
medida (con las medidas
CommonAr medir
espacial mostradas)
A.5 Notación BPMN para 5
Carga de producto
Actividad
Carga
+
Subproceso
Bucle
Actividad Subproceso
+
Bucle
Terrible Fusión
Dividir y fusionar pasarelas
Actividad Actividad
Cancela Compensado
do Enviar Corregi
mensaje r error
Datos de
entrada Datos de Datos de Insertar datos
entrada entrada
Insertar
datos Actualizar DataDelete Datos Añadir columna
Clasificar Multidifusión
Aporte*: CityName,
Aporte*: CityName, StateKey, CountryKey StateKey,
Salida: CityName, Condición:
CountryKey
StateKey, EmployeeID
Salida:
CountryKey = EmployeeKey
CityName,
Mantener StateKey, Tipo
No de combinación: Unión
CountryKey
duplicados:
Recuperar:
Recuperar: CountryKey Base de datos: StateKey Base
NorthwindDW Tabla:dePaís
datos: NorthwindDW
Dónde:
Reemplazar: Query:
Coincidencias
CountryKey State
Base Join
de países: deReemplazar:
Country
CountryName
datos: Donde:
StateKey
State,
NorthwindDW Base
Country
dePaís
Tabla: datos:
Coincide:
NorthwindDW
Dónde: StateNa
Coinciden
Condición: ¿Encontró?
Y Encontró
Buscar norte Buscar
Extraviado
Jerarquías irregulares 98
6 Índ