EVALUACIÓN DE MODELOS DIMENSIONALES ALTERNATIVOS PARA
REPRESENTAR Y MANIPULAR DATOS ESTADÍSTICOS
CRISTIAN JAVIER BENJUMEA URIBE
UNIVERSIDAD DE LOS ANDES
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN
BOGOTÁ D.C.
2002
EVALUACIÓN DE MODELOS DIMENSIONALES ALTERNATIVOS PARA
REPRESENTAR Y MANIPULAR DATOS ESTADÍSTICOS
CRISTIAN JAVIER BENJUMEA URIBE
Tesis para optar al título de Ingeniero de Sistemas y Computación
Asesor
JOSE EUSEBIO ABÁSOLO PRIETO
UNIVERSIDAD DE LOS ANDES
FACULTAD DE INGENIERÍA
DEPARTAMENTO DE SISTEMAS Y COMPUTACIÓN
BOGOTÁ D.C.
2002
CONTENIDO
Pág.
INTRODUCCIÓN 1
OBJETIVO GENERAL 2
OBJETIVOS ESPECÍFICOS 3
1. JUSTIFICACIÓN 4
2. MARCO CONCEPTUAL 5
2.1 BODEGAS DE DATOS (DATA WAREHOUSES) Y DATA MARTS 5
2.2 ANÁLISIS OLAP (On line Analytical Processing) 6
2.3 HERRAMIENTAS OLAP 7
2.3.1 Herramientas rolap (OLAP olap relacional) 8
2.3.2 Herramientas molap (OLAP olap multidimensional) 8
2.4 EL MODELO DIMENSIONAL 8
2.4.1 Diferencias con el modelo entidad – relación (e-r) 9
2.4.2 La tabla de hechos (fact table) 10
2.4.3 Tablas de dimensiones 10
3. DESARROLLO DEL PROYECTO 12
3.1 FUENTE DE LOS DATOS 12
3.2 DATOS 12
3.3 MODELAJE FORMAL DE LOS DATOS (DISEÑO LOGICO) 15
3.3.1 Modelo 1. 15
3.3.2 Modelo 2. 20
3.4 ETL. Extracción, transformación y cargue de los datos 27
3.5 CONSULTAS PROPUESTAS 32
3.6 PLATAFORMA UTILIZADA 35
3.7 RESULTADOS Y ANÁLISIS 35
CONCLUSIONES Y RECOMENDACIONES 39
BIBLIOGRAFÍA 43
LISTA DE TABLAS
Pág
Tabla 1. Detalle de las dimensiones del modelo 1 18
Tabla 2. Detalle de las dimensiones del modelo 2 25
Tabla 3. Tiempos de ejecución de consultas 35
LISTA DE FIGURAS
Pág
Figura 1. Diagrama modelo 1 18
Figura 2. Diagrama modelo 2 25
LISTA DE ANEXOS
Pág
Anexo A. Valores predeterminados de algunos de los datos
incluídos en la encuesta de población. 44
Anexo B. Archivos de control para el cargue de los datos a tablas
temporales utilizando SQL Loader. 48
Anexo C. Código SQL y Plan de Ejecución de las Consultas 50
ISC-2002-2-9
1
INTRODUCCIÓN
El proyecto es un trabajo de investigación sobre diferentes alternativas para
evaluar modelos dimensionales para representar y manipular datos estadísticos.
El documento presenta el proceso de la implementación de los modelos, desde el
diseño hasta las consultas pasando por el proceso de extracción, carga y
transformación de los datos.
Basado en la teoría y un amplio análisis de los resultados de la implementación,
se dan algunas recomendaciones para tener en cuenta a la hora de modelar
información estadística.
ISC-2002-2-9
2
OBJETIVO GENERAL
El objetivo general del presente proyecto es evaluar diferentes alternativas de
modelaje dimensional para datos estadísticos.
ISC-2002-2-9
3
OBJETIVOS ESPECÍFICOS
• Diseñar e implementar dos modelos para almacenar datos de tipo censal o
de encuestas de población. Esto incluye el modelo lógico y físico, la
extracción transformación y cargue de los datos y la ejecución de consultas
en cada uno de los modelos.
• Comparar los dos modelos propuestos con el fin de establecer cuál de los
dos responde mejor dependiendo de los requerimientos. La comparación se
hace teniendo en cuenta tres aspectos: velocidad de respuesta de las
consultas, complejidad de las consultas y la flexibilidad para crecer en caso
de que se quieran agregar nuevas variables o modificaciones.
• Recomendar uno de los modelos dependiendo de los resultados de la
comparación y pruebas mencionados en el punto anterior.
ISC-2002-2-9
4
1. JUSTIFICACIÓN
El manejo de información estadística proveniente de censos o encuestas de
población no es muy común cuando se habla de Data Marts o de Bodegas de
Datos. Es más común encontrar información que se refiere exclusivamente a un
negocio determinado, por ejemplo, datos personales y algunos datos de llamadas
para un negocio de celulares, datos de ventas y de productos en el caso de una
tienda por departamentos etc.
El proyecto se hace porque el trabajo con información estadística es muy
interesante por los grandes volúmenes de información que se pueden manejar y,
por lo tanto, por los análisis que se pueden hacer de ésta. Además es un campo
novedoso pues como se menciona anteriormente, no es objeto de mucho estudio
como lo es otro tipo de información más específica.
Se quiere hacer un estudio de modelaje de este tipo de información para que en
caso de que se quiera implementar una Bodega de Datos o un Data Mart, las
personas encargadas puedan obtener información y recomendaciones que le
sirvan de guía para llevar a la realidad este tipo de proyectos.
ISC-2002-2-9
5
2. MARCO CONCEPTUAL
2.1 BODEGAS DE DATOS (DATA WAREHOUSES) Y DATA MARTS
Una bodega de datos es una base de datos que extrae, transforma, almacena y
utiliza datos que provienen de diferentes sistemas de procesamiento de
transacciones, como por ejemplo: sistemas de inventario, sistemas de cartera y
sistemas de facturación entre otros.
Las bodegas de datos tienen algunas características especiales que las
diferencian de los sistemas operacionales, también llamados OLTP (On line
transactional process) 1:
• Son orientantadas a un tema. Los sistemas OLTP están diseñados para
que guarden información de un tema específico, por ejemplo, en una
empresa puede haber un sistema OLTP que se encarga de manejar las
ventas de minoristas, otro para el de las de mayoristas etc. Una bodega de
datos recopilaría la información de ventas en minoristas, mayoristas etc…
• Tienen datos integrados. Generalmente reúnen datos que provienen de
fuentes diferentes y por lo tanto deben utilizar un proceso de transformación
1 COREY, M and ABBEY, M. Oracle 8i Data Warehousing. Osborne/McGraw Hill. 1999. p. 9 -15
ISC-2002-2-9
6
para que al momento de cargarlos, almacenen la información de una forma
estándar.
• No es volátil. Son bases de datos que solamente se utilizan para consulta y
no se está escribiendo constantemente en ellas. La información en las
bodegas de datos es histórica y no se actualiza. Las escrituras se hacen
cada cierto tiempo y se caracterizan por la gran cantidad de datos. En los
sistemas OLTP, por el contrario, contínuamente se está escribiendo y
leyendo.
• Dependen del tiempo. El tiempo es un elemento fundamental de las
bodegas de datos y los data marts ya que el objeto de estos es hacer
análisis de los datos. Generalmente, el análisis de datos es mucho más
valioso cuando se hace a través del tiempo.
Las bodegas de datos se diferencian de los data marts en que la información de
las segundas es más específica, está dirigida a sun grupo de usuarios que tienen
dominio de un tema específico. Varios data marts pueden o no, formar una bodega
de datos.
2.2 ANÁLISIS OLAP (On line Analytical Processing)
Mientras que las bodegas de datos o data marts se construyen con el fin de
almacenar información, las herramientas OLAP se encargan de obtener
información de éstas. Son complementarias.
ISC-2002-2-9
7
Las herramientas OLAP se distinguen por ciertas características2:
• Habilidad para hacer “drill down” o “roll up” a los datos. Esta es la
característica que les permite a los usuarios mostrar la información más
detalladamente o más generalmente. Otras operaciones comunes del
análisis OLAP incluyen el ranking, el top, las razones (ratios), y
agrupaciones (tiles).
• Habilidad para intercambiar dimensiones. Es decir, poder cambiar
fácilmente las variables de una consulta, con el fin de obtener nueva
información. Esta técnica también es llamada rotación. Las herramientas
OLAP deben ser muy flexibles para los usuarios finales.
• Permite alteraciones en la apariencia de los datos mostrados. Para
presentar los resultados de una manera agradable y fácil de entender.
• Cubos que permiten ser manipulados en línea o localmente.
2.3 HERRAMIENTAS OLAP
Existen tres tipos de herramientas OLAP:
2 THOMSEN, E. OLAP Solutions: Building Multidimensional Information Systems. John
Wiley & Sons, Inc., 2001.
ISC-2002-2-9
8
2.3.1 Herramientas rolap (OLAP relacional)
Las herramientas ROLAP almacenan los datos con un enfoque relacional. Esta
técnica tiene como ventaja optimiza el manejo del espacio en la base de datos, ya
que no hay ninguna redundancia. Además, el mantenimiento de la base de datos
será mucho menos costoso y más ordenado. Este es un modelo más escalable
que el multidimensional. Algunos ejemplos de herramientas rolap son el
Discoverer (Oracle) y el Axsys (Information Advantage).
2.3.2 Herramientas molap (OLAP multidimensional)
Estas herramientas almacenan los datos de forma multidimensional. Estas
herramientas tienen ventajas en cuanto a las capacidades para hacer las
consultas, pues los querys son más sencillos y se ejecutan a mayor velocidad.
Algunas herramientas molap son Express Server (Oracle) y el PowerPlay
(Cognos).
Existe también el HOLAP que es un híbrido entre el ROLAP y el MOLAP.
2.4 EL MODELO DIMENSIONAL
El modelaje dimensional muestra los datos al usuario de una manera en que este
los pueda entender y consultar fácil e intuitivamente. Este modelo busca la
eficiencia por medio de la desnormalización, es decir, permite la redundancia de
datos, y está más orientado para trabajar con herramientas OLAP.
ISC-2002-2-9
9
En el enfoque dimensional, se trabaja con estructuras llamadas cubos. Estos
cubos son el resultado de la unión de varias “dimensiones” que representan cada
una de las variables de las cuales se está obteniendo información. Por ejemplo,
supongamos que tenemos una hoja de cálculo con las ventas de un almacén que
se encuentra en varias ciudades, con las columnas representando un lugar y las
filas representando un mes del año; en las celdas de la intersección se muestra
los ingresos. Esto es puede ser visto como un “cubo” en dos dimensiones en el
que las dimensiones son el lugar, y el mes (tiempo). Así, se puede seguir
agregando dimensiones al “cubo” y la intersección de esas dimensiones constituye
el dato como tal.
2.4.1 Diferencias con el modelo entidad – relación (E-R)
• El modelo entidad relación (E-R) es normalizado, es decir, no existe
redundancia en los datos. El modelo E-R, es más complicado de entender
para los usuarios. Este modelo, utiliza tablas para representar las entidades
y las relaciones entre ellas.
• El modelo dimensional es mucho mas intuitivo para los usuarios y sí
permite la redundancia de datos, esta última característica le permite ser
más eficiente en cuanto a la velocidad con que responde a las consultas y,
hace más sencillos los querys o consultas.
• A diferencia del modelo E-R, utiliza una tabla de hechos (Fact Tables) para
representar las medidas y unas dimensiones para representar las variables
ISC-2002-2-9
10
que quiero analizar junto con sus atributos. Al modelo dimensional también
se le llama modelo estrella debido a que por la ubicación de las tablas de
hechos y sus dimensiones, se parece a una estrella3.
2.4.2 La tabla de hechos (fact table)
Esta es la tabla en la que se presentan todas las medidas numéricas. Cada
registro en la Fact Table representa la intersección de las dimensiones. Es decir,
como una celda dentro del cubo. Los hechos o facts dentro de esta tabla pueden
ser aditivos o no aditivos. Por ejemplo, el salario de una persona o la cantidad de
dinero gastada en compras mensualmente son cantidades aditivas, las cuales son
las más valiosas para el análisis ya que generalmente, las consultas no quieren
obtener detalles de cada registro en la fact table, lo más interesante son los datos
que involucran a todos los registros.
Generalmente para los hechos no aditivos, lo que se hace es contarlos para poder
obtener información de todos los registros en general.
2.4.3 Tablas de dimensiones
Las tablas de dimensiones son aquellas donde se encuentran descritas las
dimensiones o variables que se están analizando. Como aquí se están
describiendo los registros, los atributos son del tipo texto. Estos atributos son
importantes porque después permitirán hacer las consultas teniendo en cuenta
3 KIMBALL, R. The Data Warehouse Toolkit. John Wiley & Sons, Inc., 1996. pag 10.
ISC-2002-2-9
11
sus valores. Es decir, si tenemos una dimensión geográfica, vamos a poder hacer
las consultas dependiendo del país o del estado.
ISC-2002-2-9
12
3. DESARROLLO DEL PROYECTO
3.1 FUENTE DE LOS DATOS
Los datos que se usan fueron extraídos de la encuesta de población CPS (Current
Population Survey) hecha por el Departamento del Censo de los Estados Unidos
(U.S. Census Bureau).
Los datos contienen variables demográficas y de empleo de los años 1992, 1993,
1994 y 1995 en los Estados Unidos. Los datos fueron extraídos a través del
Sistema de Extracción de Datos (DES – Data Extraction System), interfaz web:
http://blue.census.gov/des/l1.
Para cada uno de los años que se mencionaron anteriormente se tiene un archivo
con sus datos.
3.2 DATOS Dentro de los datos hay información estadística de distintas personas que fue
obtenida a través de un censo. Existen aproximadamente unos 199.523 registros.
Cada uno de los registros tiene la siguiente información:
ISC-2002-2-9
13
• edad
• clase de trabajador
• código de industria
• código de ocupación
• ingresos totales ajustados
• nivel de educación
• salario por hora
• estado civil
• Industria
• Ocupación
• trabajó sobre tiempo
• origen hispano
• sexo
• miembro de un sindicato
• razón de desempleo
• estatus de trabajo de medio tiempo o completo
• ganancias de capital
• pérdidas de capital
• discapacitado o con problema de salud
• dividendos de las acciones
• estatus de contribuyente (impuestos)
ISC-2002-2-9
14
• región donde vivía anteriormente
• estado de la residencia anterior
• vivió en esta casa hace un año
• num. personas trabajando para el empleador
• miembros de la familia menores de 18 años
• total de ganancias de la persona
• país de nacimiento del padre
• país de nacimiento de la madre
• país de nacimiento
• ciudadanía
• total de ingresos de la persona
• cantidad de ingresos a contribuir (impuestos)
• llenó aplicación para ser admitido como veterano
• beneficios de veterano
• número de semanas que trabajó en el año
• salario
Los datos que se incluyen en este censo son de diferentes tipos: de texto,
numéricos y booleanos entre otros.
Algunos datos como por ejemplo el estado civil cuentan con valores
predeterminados, por ejemplo, casado, separado, divorciado, viudo. Otros de los
ISC-2002-2-9
15
datos sólo son indicadores, por ejemplo el que dice si es una persona está
empleada o desempleada. Otros datos, por su parte son continuos, que son los
que tienen que ver en su mayoría con la información financiera, ejemplo, es sueldo
por hora, las ganancias al año y la cantidad de ingresos que debe contribuir o
pagar de impuestos.
En el Anexo A se presentan los valores que pueden tomar los datos con valores
predeterminados en la fuente original.
3.3 MODELAJE FORMAL DE LOS DATOS (DISEÑO LOGICO)
3.3.1 Modelo 1.
Cada una de las características o datos de las personas (representadas por cada
registro) se toman como una dimensión.
Data marts y dimensiones
Data Mart. Se tiene una sola fuente de los datos, por lo tanto sólo se tiene un Data
Mart que equivale al censo o encuesta actual de población.
Dimensiones. Las dimensiones posibles son:
Edad
Industria
ISC-2002-2-9
16
Ocupación
Educación
Estado Civil
País de origen de la persona
País de origen de la madre
País de origen del padre
Clase de trabajador
Origen Hispano
Sexo
Estado de la residencia anterior
Ciudadanía
Año (que equivale al año en el que se realizó la encuesta o censo)
Fact Table
Grano de la Información. Como la información viene por registros y cada registro
representa ciertos datos de una persona, el grano que se tiene en cuenta para el
modelo es la persona censada.
Medidas o Facts. Las medidas o facts que se incluyen en la Fact Table
representan la información financiera de las personas censadas. Las siguientes
son las medidas:
Ingresos totales ajustados
ISC-2002-2-9
17
Salario por hora
Ganancias de capital
Pérdidas de capital
Dividendos de las acciones
Total de ganancias de la persona
Total de ingresos de la persona
Cantidad de ingresos a pagar en impuestos
Dentro de la Fact Table se incluyen las llaves de las dimensiones y algunos datos
del censo como dimensiones degeneradas:
Estatus de trabajo de medio tiempo o completo
Estatus de contribuyente (impuestos)
Número de semanas que trabajó en el año
Vivió en esta casa hace un año
Num. personas trabajando para el empleador
Miembros de la familia menores de 18 años
Propio negocio o independiente
Llenó aplicación para ser admitido como veterano
Beneficios de veterano
Discapacitado o con problema de salud
Trabajó sobre tiempo.
ISC-2002-2-9
18
Diagrama y detalle de la Fact Table
Figura 1. Diagrama Modelo 1.
Detalle de la Dimensiones Dim Año
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Año El año en que se realizó la encuesta 1 No se actualiza 1992
Dim Estado Civil
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Estado Civil Estado civil 7 No se Actualiza Nunca Casado
Dim Sexo
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Sexo Género del encuestado 2 No se Actualiza Masculino
Dim País de Origen
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
ISC-2002-2-9
19
País País de nacimiento de la persona 43 No se Actualiza Colombia
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Colombia
Dim País de Origen del Padre
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de nacimiento del padre de la persona 43 No se Actualiza Estados Unidos
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Colorado
Dim País de Origen de la Madre
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de nacimiento de la madre de la persona 43 No se Actualiza Puerto Rico
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Puerto Rico
Dim Residencia Anterior
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de nacimiento de la madre de la persona 43 No se Actualiza Corea del Sur
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Corea del Sur
Dim Clase de Trabajador
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Clase de Trabajador Para qué tipo de organización trabaja 9 No se Actualiza Gobierno Local
Dim Ciudadanía
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Ciudadanía Ciudadanía, hace referencia a si es ciudadano de estados unidos o no.
5 No se Actualiza Extranjero, no es ciudadano de los Estados Unidos
ISC-2002-2-9
20
Dim Industria
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Nombre Industria en la que trabaja 24 No se Actualiza Minería
Dim Ocupación
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Ocupación Ocupación en la que trabaja la persona encuestada 16 No se Actualiza Ejecutivo
Dim Educación
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Educación Nivel educativo 17 No se Actualiza Graduado de Maestría
Dim Edad
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Rango edad Rango de edades 6 No se Actualiza 21-25
Dim Origen Hispano
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Origen Hispano Que tipo de origen hispano tiene la persona 10 No se Actualiza Chicano
Tabla 1. Detalle de las dimensiones del modelo 1.
3.3.2 Modelo 2.
Elaboración de perfiles y minidimensiones.
Data marts y Dimensiones
Data Mart. Se tiene una sola fuente de los datos, por lo tanto sólo hay un Data
Mart que equivale al censo o encuesta actual de población.
Dimensiones. Las dimensiones posibles son:
ISC-2002-2-9
21
Dimensión Demográfica. Tendría como atributos la edad, el sexo, estado civil,
ciudadanía y miembros de la familia menores de 18 años y educación. Lo que se
trata de hacer es combinar estos atributos para formar varias combinaciones que
expresan cada una un perfil demográfico diferente. Para los datos contínuos,
como por ejemplo la edad, se pueden establecer rangos, por ejemplo, menores de
18 años, entre 18 y 24, entre 24 y 35 etc. Así, el número de combinaciones es
menor y se tiene una dimensión con menos registros.
Dimensión Ocupación.
Dimensión Industria.
Dimensión Año. Como se tienen datos de la encuesta de varios años, se adiciona
la dimensión año (que se refiere al tiempo en que se recolectaron los datos), con
el fin de hacer análisis a través del tiempo.
Dimensión geografía. Hay varios datos importantes que tienen que ver con la
geografía, origen de la madre, origen del padre, origen de la persona y lugar en
donde vivió hace un año entre otros.
Cada uno de estos sería una dimensión aparte. Esta es la situación de las
dimensiones que juegan varios roles. Esta es la dimensión geográfica pero tiene
roles diferentes, entonces, en este caso, se haría una tabla física en la base de
datos y se harían vistas para cada una de estas dimensiones. Dentro de las
ISC-2002-2-9
22
dimensiones geográficas se tiene el país y también el estado y la región. Como
para los otros países no se especifica el estado, se debe escoger un estado que
lleva el mismo nombre del país.
Fact Table
Grano de la Información. Como la información viene por registros y cada registro
representa ciertos datos de una persona, el grano que se tiene en cuenta para el
modelo es la persona censada.
Medidas o Facts. Las medidas o facts que se incluyen en la Fact Table
representan la información financiera de las personas censadas. Las siguientes
son las medidas:
Dentro de la información existen algunas medidas que no aplican para todos los
registros. Si la persona es desempleada, una medida como lo es el salario de la
persona por hora tampoco tiene sentido dentro del registro. Por lo tanto se
propone que se hagan varias Fact Tables. Como hay datos heterogéneos, esta
forma de modelar los datos, llamada familias de Fact Tables por Kimball en su
libro The Data Warehouse Lifecycle Toolkit, puede solucionar el problema
mencionado anteriormente.
Las Fact Tables se unen por medio de una llave a la Fact Table núcleo o principal.
Las dimensiones de las que hablábamos anteriormente son dimensiones
ISC-2002-2-9
23
conformes. Una dimensión conforme es una dimensión que significa lo mismo lo
mismo con cualquier Fact Table a la que pueda estar unida.
Medidas para la Fact Table Persona
Esta es la Fact Table principal y no tiene medidas. Las medidas se encuentran en
las otras Fact Tables secundarias. En esta tenemos algunas dimensiones
degeneradas. Estos datos tienen sentido para cualquiera de las dos personas, ya
sean empleados o desempleados. Entre ellas están:
Recibe beneficios como veterano.
Problema de salud o discapacitado.
Medidas para la Fact Table Trabajador
Aquí se encuentran las medidas financieras, se parece a la Fact Table del modelo
uno.
Ingresos totales ajustados
Salario por hora
Ganancias de capital
Pérdidas de capital
Dividendos de las acciones
Total de ganancias de la persona
ISC-2002-2-9
24
Total de ingresos de la persona
En esta Fact Table también se incluyen las siguientes dimensiones degeneradas:
Estatus de trabajo tiempo medio/completo
Miembro de Sindicato
Trabaja Sobre tiempo
Clase de Trabajador
Medidas para la Fact Table Desempleado
Únicamente está la dimensión degenerada razón de desempleo.
ISC-2002-2-9
25
Diagrama y detalle de la Fact Table
Figura 2. Diagrama Modelo 2. Detalle de la Dimensiones Dim Año
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Año El año en que se realizó la encuesta 1 No se actualiza 1992
Dim Demográfica
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Edad Rango de edades 6 No se Actualiza 21-25
ISC-2002-2-9
26
Estado Civil Estado civil 7 No se Actualiza Nunca Casado Sexo Género del encuestado 2 No se Actualiza Masculino
Ciudadanía Ciudadanía, hace referencia a si es ciudadano de estados unidos o no.
5 No se Actualiza Extranjero, no es ciudadano de los Estados Unidos
Dim Ocupación
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Nombre Ocupación en la que trabaja la persona encuestada 16 No se Actualiza Ejecutivo
Dim Industria
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Nombre Industria en la que trabaja 24 No se Actualiza Minería
Dim Educación
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
Educación Nivel educativo 17 No se Actualiza Graduado de Maestría
Dim País de Origen
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de nacimiento de la persona 43 No se Actualiza Colombia
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Colombia
Dim País de Origen del Padre
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de nacimiento del padre de la persona 43 No se Actualiza Estados Unidos
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Colorado
Dim País de Origen de la Madre
Nombre De Atributo Descripción del Atributo Cardinalidad Política de Actualización Ejemplo de Valores
País País de naciemiento de la madre de la persona 43 No se Actualiza Puerto Rico
Estado
Estado dentro del país (si el país no es Estados Unidos, el estado se llama igual que el país)
96 No se Actualiza Puerto Rico
Tabla 2. Detalle de las dimensiones del modelo 2.
ISC-2002-2-9
27
3.4 ETL. Extracción, transformación y cargue de los datos
Antes de que fueran cargados los datos se hizo un proceso de transformación que
se explicará a continuación.
La información venía en un archivo de texto, y cada persona encuestada es
representada por una línea dentro de ese archivo de texto, de la siguiente manera:
990015910936010390000029210410777108100402000210100001141481882921136777000057057057011002101 70857 60186 0 0 0 8239 0 35000 35152 0 0 0 46558 0 52 35000
Cada uno de los archivos tenía información acerca de la posición en la cual se
encuentraban cada uno de los campos con la información. Por ejemplo, para la
variable con código AAGE que representaba la edad se tenía la siguiente
información:
Posición incial 6, longitud 2. En el registro anterior entonces, la edad sería de 59
años. De la misma manera se puede extraer la información del resto de la línea
para las demás variables.
Primero, se cargó la información sin ningún tipo de cambios a tablas temporales
con nombre DATOS_año donde año podría ser 1992,1993, 1994 o 1995. El
cargue de esta información se hizo utilizando la aplicación SQLLDR (SQL Loader)
de Oracle. En el Anexo B se encuentran los scripts utilizados para hacer el cargue
ISC-2002-2-9
28
de los datos por medio del SQL Loader así como los archivos con las reglas
utilizadas.
Una vez se tenían los datos en tablas temporales se les hizo una transformación
para pasarlos a las tablas definitivas. Los motivos por los cuales se transformaron
los datos son los siguientes:
• Algunos de los datos que se encontraban en los archivos originales no
fueron incluídos en los modelos y por lo tanto debían ser excluidos.
• Algunos datos fueron agregados a las encuestas de población de 1994 y
1995, por lo tanto habían datos en estos años que no eran disponibles en
los de 1992 y 1993 y había que darles el un valor como el de no disponible.
• Se introdujo una jerarquía geográfica de país y estado y había que
acomodar los datos a esta jerarquía.
• En el caso del segundo modelo propuesto, se hizo una dimensión perfil
demográfico con sus respectivos valores. Por lo tanto, para había que hacer
comparaciones de los datos en los campos de los archivos de texto y
dependiendo de sus valores asignarles la llave correspondiente a su perfil
demográfico.
A continuación se muestran los scripts con los cuales se hizo la transformación de
los datos.
ISC-2002-2-9
29
Scripts para el paso de datos de las tablas temporales al modelo 1
INSERT INTO MOD1_PERSONA SELECT Llave, AMARITL, ASEX, 4, ACLSWKR, PRCITSHP, AHGA, AMJIND, AMJOCC, AWKSTAT, CASE WHEN AAGE < 18 THEN 1 WHEN AAGE BETWEEN 18 AND 24 THEN 2 WHEN AAGE BETWEEN 25 AND 44 THEN 3 WHEN AAGE BETWEEN 45 AND 64 THEN 4 WHEN AAGE > 64 THEN 5 END, AREORGN, PEMNTVTY, PEFNTVTY, PENATVTY, AGI, CAPGAIN, CAPLOSS, DIVVAL, PEARNVAL, PTOTVAL, WKSWORK, DECODE (AUNMEM, 0, 'Not in universe', 1, 'Yes', 2, 'No'), DECODE (VETYN, 0, 'Not in universe', 1, 'Yes', 2, 'No'), DECODE (DISHP, 0, 'Not in universe', 1, 'Yes', 2, 'No'), DECODE (AUNTYPE, 0, 'Not in universe', 1, 'Job loser - on layoff', 2, 'Other job loser', 3, 'Job leaver', 4, 'Re-entrant', 5, 'New entrant') FROM DATOS_1995;
ISC-2002-2-9
30
Scripts para el paso de datos de las tablas temporales al modelo 2
INSERT INTO MOD2_PERSONA SELECT D1995.Llave, (SELECT LLAVE_PERFIL_DEMOGRAFICO FROM PERFIL_DEMOGRAFICO, (SELECT D1995_INT.LLAVE, CASE WHEN D1995_INT.AAGE < 18 THEN '< 18' WHEN D1995_INT.AAGE BETWEEN 18 AND 24 THEN '18 - 24' WHEN D1995_INT.AAGE BETWEEN 25 AND 44 THEN '25 - 44' WHEN D1995_INT.AAGE BETWEEN 45 AND 64 THEN '45 - 64' WHEN D1995_INT.AAGE > 64 THEN '> 65' END AAGE, CASE WHEN D1995_INT.ASEX = 1 THEN 'M' WHEN D1995_INT.ASEX = 2 THEN 'F' END ASEX, CASE WHEN D1995_INT.AMARITL = 1 THEN 'Married' WHEN D1995_INT.AMARITL = 2 THEN 'Married' WHEN D1995_INT.AMARITL = 3 THEN 'Married' WHEN D1995_INT.AMARITL = 4 THEN 'Widowed' WHEN D1995_INT.AMARITL = 5 THEN 'Divorced' WHEN D1995_INT.AMARITL = 6 THEN 'Separated' WHEN D1995_INT.AMARITL = 7 THEN 'Never married' END AMARITL, CASE WHEN D1995_INT.PRCITSHP = 1 THEN 'Native: Born in the United States' WHEN D1995_INT.PRCITSHP = 2 THEN 'Native: Born in Puerto Rico or U.S. Outlying' WHEN D1995_INT.PRCITSHP = 3 THEN 'Native: Born abroad of American Parents' WHEN D1995_INT.PRCITSHP = 4 THEN 'Foreign born: U.S. citizen by naturalization' WHEN D1995_INT.PRCITSHP = 5 THEN 'Foreign born: Not a citizen of U.S.' WHEN D1995_INT.PRCITSHP = 0 THEN 'NA' END PRCITSHP, CASE WHEN D1995_INT.AREORGN = 1 THEN 'Mexican-American' WHEN D1995_INT.AREORGN = 2 THEN 'Chicano' WHEN D1995_INT.AREORGN = 3 THEN 'Mexican' WHEN D1995_INT.AREORGN = 4 THEN 'Puerto Rican' WHEN D1995_INT.AREORGN = 5 THEN 'Cuban' WHEN D1995_INT.AREORGN = 6 THEN 'Central or South American' WHEN D1995_INT.AREORGN = 7 THEN 'Other Spanish' WHEN D1995_INT.AREORGN = 8 THEN 'All other' WHEN D1995_INT.AREORGN = 9 THEN 'Do not know' WHEN D1995_INT.AREORGN = 10 THEN 'NA' END AREORGN FROM DATOS_1995 D1995_INT) DATOS WHERE DATOS.AAGE = EDAD AND DATOS.ASEX = SEXO AND DATOS.AMARITL = ESTADO_CIVIL
ISC-2002-2-9
31
AND DATOS.PRCITSHP = CIUDADANIA AND DATOS.AREORGN = ORIGEN_HISPANO AND DATOS.LLAVE = D1995.Llave) PERFIL, 4, D1995.AHGA, D1995.AMJOCC, D1995.AMJIND, D1995.PEMNTVTY, D1995.PEFNTVTY, D1995.PENATVTY, D1995.Llave, DECODE (D1995.VETYN, 0, 'Not in universe', 1, 'Yes', 2, 'No'), DECODE (D1995.DISHP, 0, 'Not in universe', 1, 'Yes', 2, 'No') FROM DATOS_1995 D1995; /**************************************************/ PARA LA TABLA MOD2_DESEMPLEADO: INSERT INTO MOD2_DESEMPLEADO SELECT D1994.Llave, DECODE (D1994.AUNTYPE, 0, 'Not in universe', 1, 'Job loser - on layoff', 2, 'Other job loser', 3, 'Job leaver', 4, 'Re-entrant', 5, 'New entrant') FROM DATOS_1994 D1994 WHERE D1994.AUNTYPE <> 0; /**************************************************/ PARA LA TABLA MOD2_TRABAJADOR: INSERT INTO MOD2_TRABAJADOR SELECT D1995.Llave, AGI, CAPGAIN, CAPLOSS, DIVVAL, PEARNVAL, PTOTVAL, WKSWORK, DECODE (AUNMEM, 0, 'Not in universe', 1, 'Yes', 2, 'No') FROM DATOS_1995 D1995 WHERE D1995.AUNTYPE = 0 AND D1995.WKSWORK > 0;
ISC-2002-2-9
32
Los scripts para el año de 1994 son los mismos. El de 1992 y 1993 difieren
solamente en algunos campos y por eso no se incluyen.
3.5 CONSULTAS PROPUESTAS
Generalmente, cuando se está construyendo un Data Mart o una Bodega de Datos,
el primer paso es evaluar el tipo de consultas que serán más frecuentes con el fin
de hacer un diseño que optimice la respuesta a éstas. Como el objetivo de este
proyecto es evaluar los dos modelos en diferentes tipos de consultas, se han
primero propuesto los modelos y con base a las siguientes consultas será
evaluada su eficiencia.
• Consulta 1. Número de personas discriminadas por sexo.
• Consulta 2. Número de personas discriminadas por rango de edad.
• Consulta 3. Número de personas discriminadas por sexo y por rango de edad.
• Consulta 4. Número de personas discriminadas por industria y por año.
• Consulta 5. Número de personas discriminadas por ocupación y por año.
• Consulta 6. Total de ingresos discriminados por rango de edad.
ISC-2002-2-9
33
• Consulta 7. Promedio de ingresos discriminados por rango de edad.
• Consulta 8. Promedio de ingresos discriminados por ocupación.
• Consulta 9. Promedio de ingresos discriminados por industria.
• Consulta 10. Número de personas discriminadas por ocupación, industria y
año.
• Consulta 11. Promedio de Ingresos discriminados por el origen hispano.
• Consulta 12. Número de personas discriminadas por nivel de educación.
• Consulta 13. Rango del nivel de educación (dependiendo del número de
personas que tienen un determinado nivel de educación) por años.
• Consulta 14. Número de personas discapacitadas por año.
• Consulta 15. Número de sindicalistas por año.
• Consulta 16. Número de sindicalistas por año y por Industria.
ISC-2002-2-9
34
• Consulta 17. Número de veteranos por año.
• Consulta 18. Número de personas discriminadas por estado civil y año.
• Consulta 19. Número de personas discriminadas por ciudadanía.
• Consulta 20. Número de personas discriminadas por país de origen, diferente a
Estados Unidos.
• Consulta 21. Rango de la razón de desempleo (dependiendo del número de
personas que manifiesten una misma razón de desempleo.
• Consulta 22. Crecimiento de los ingresos a través del tiempo.
• Consulta 23. Crecimiento de las ganancias de capital a través del tiempo.
• Consulta 24. Crecimiento del número de empleados por industria.
Como se puede observar de las consultas anteriores, el objeto de éstas no es
obtener detalles específicos de las personas sino por el contrario, las medidas
ISC-2002-2-9
35
como totales, promedio de ingresos, crecimientos, número de personas por
industria etc…
3.6 PLATAFORMA UTILIZADA
Los datos fueron cargados en la base de datos Oracle 8i. La herramienta utilizada
para hacer el análisis de los datos y las consultas la herramienta ROLAP, Oracle
Discoverer 4. Como se mencionó anteriormente, el cargue de los datos se hizo por
medio del Oracle SQL Loader.
3.7 RESULTADOS Y ANALISIS
La siguiente es la tabla comparativa de los tiempos que tomaron cada una de las
consultas en cada uno de los modelos:
Tiempo de Ejecución Consultas Modelo 1 Modelo 2
consulta 1 00:00:08.63 00:00:09.19 consulta 2 00:00:08.45 00:00:09.16 consulta 3 00:00:13.79 00:00:09.42 consulta 4 00:00:14.57 00:00:13.95 consulta 5 00:00:14.78 00:00:13.79 consulta 6 00:00:06.01 00:00:13.02 consulta 7 00:00:05.00 00:00:10.67 consulta 8 00:00:06.04 00:00:10.23 consulta 9 00:00:05.03 00:00:11.01 consulta 10 00:01:06.00 00:00:50.77 consulta 11 00:00:05.34 00:00:11.17 consulta 12 00:00:14.88 00:00:13.98 consulta 13 00:00:14.02 00:00:13.13 consulta 14 00:00:03.94 00:00:02.06 consulta 15 00:00:03.59 00:00:05.78 consulta 16 00:00:04.79 00:00:05.07
ISC-2002-2-9
36
consulta 17 00:00:02.53 00:00:02.50 consulta 18 00:00:14.17 00:00:14.11 consulta 19 00:00:13.04 00:00:14.11 consulta 20 00:00:32.96 00:00:12.26 consulta 21 00:00:02.87 00:00:00.57 consulta 22 00:00:05.10 00:00:10.41 consulta 23 00:00:03.31 00:00:06.57 consulta 24 00:00:14.73 00:00:15.85
Tabla 3. Tiempos de ejecución de consultas.
Otro de los resultados que se tuvieron en cuenta para hacer el análisis de cada
uno de los modelos fueron la complejidad de las consultas y su eficiencia. Para
analizar esto, se tuvo en cuenta el código SQL y su plan de ejecución, el cual
puede ser consultado en el Anexo C.
Rapidez de las Consultas y Eficiencia
Para consultas como la Número 1, 18 o 19, en la cual se accesa un solo dato del
perfil demográfico (el sexo en este caso) es más rápido el modelo uno, pues
accesa la tabla de persona y luego con la llave de sexo la busca en la tabla. Sin
embargo, en el modelo 2, como el dato sexo se encuentra en la dimensión de
perfil demográfico, la cual tiene más filas, es sólo un poco más demorado.
En la consulta 3 se puede apreciar que es más rápido el modelo 2. Esto ocurre
porque se están utilizando dos datos. En el modelo 2 estos datos están en la
misma tabla (perfil demográfico) y por lo tanto sólo busca en una tabla después de
haber accesado la tabla persona. En el modelo 1, después de accesar la tabla
persona, se debe ir a dos tablas, las correspondientes a sexo y a edad para
ISC-2002-2-9
37
buscar las llaves correspondientes. Por lo tanto el modelo 1 es menos eficiente
para este tipo de casos.
Cuando las consultas se refieren a la ocupación y la industria (consultas 4, 5, 10 y
24), información que fue modelada de la misma manera en los dos modelos, la
diferencia en los tiempos de ejecución es mínima debido a que la manera en que
hacen la búsqueda de la información es la misma. Lo mismo pasa con las
consultas que hacen referencia al nivel de educación (Consulta 13).
Cuando se trata de las medidas financieras o de dimensiones degeneradas (por
ejemplo, miembro de sindicato), las consultas en cada modelo presentan grandes
diferencias. Por ejemplo, en las consultas 6, 7, 8, 9, 11, 22 y 23 en donde se tiene
en cuenta el rango de edad y el promedio de ingresos. En el modelo 1, la consulta
se ejecuta de manera más sencilla porque las medidas están en la Fact Table de
Persona (Mod1_Persona) mientras que en el modelo 2, debe entrar a la tabla
trabajador para poder accesar a las medidas financieras y también a la tabla de
Persona (Mod2_Persona), aunque a esta última lo hace de manera más eficiente
debido a que lo hace por medio del índice.
Complejidad de las Consultas
En cuanto a la complejidad de cada una de las consultas en cada uno de los
modelos, se puede apreciar (Anexo C) que aunque no hay una diferencia
significativa entre los dos modelos, las consultas del modelo 1, en general, son
ISC-2002-2-9
38
menos complicadas que las del modelo 2. Esto es lo que se esperaba si se tiene
en cuenta que el modelo 1 es sencillo y no presenta una estructura de varias Fact
Tables.
Las consultas del modelo 2 se hacen más complicadas debido a que tiene varias
Fact Tables, y por lo tanto, hay que accesar más tablas que en el otro modelo
cuando se quieren obtener datos como las medidas financieras.
En general, la diferencia de complejidad no es muy significativa entre los dos
modelos.
ISC-2002-2-9
39
CONCLUSIONES Y RECOMENDACIONES
Teniendo en cuenta los resultados de la implementación de los dos modelos
propuestos se llegó a las siguientes conlcusiones y recomendaciones:
Recomendaciones en cuanto a consultas (rapidez)
El propósito de implementar una bodega de datos es poder hacer análisis de la
información en ésta. Por esta razón, antes de implementar cualquiera de los
modelos se debe analizar el tipo de consultas que será más frecuente a la hora de
analizar información. En el punto de resultados se mostró cómo para algunos tipos
de consultas es eficiente uno de los modelos y para otro tipo de consultas el otro
modelo es más eficiente.
En general, si las consultas más frecuentes involucran medidas financieras, el
modelo 1 es mucho más eficiente y rápido pues no necesita consultar sino la Fact
Table de persona, mientras que el segundo modelo consulta la Fact Table de
persona y de Trabajador.
Si lo que se busca es hacer consultas de tipo demográfico, el modelo dos ofrece
ventajas importantes sobre el modelo 1, ya que a la hora de ejecución consulta la
tabla persona y la de perfil demográfico mientras que el 1, consulta la tabla
ISC-2002-2-9
40
persona y las tablas que se refieren a cada uno de los datos demográficos
dependiendo del número de datos que se necesite. Por ejemplo, si quiero
consultar edad, sexo y ciudadania en el modelo 1 debo ir a la tabla Fact Table de
persona y además a cada una de las tablas de Sexo, Edad y Ciudadanía; mientras
que si uso el modelo 2, solamente debo consultar la Fact Table de persona y la
dimensión de Perfil Demográfico que reúne todos los campos anteriores.
En este caso, se ha separado la educación como una dimensión aparte, sin
embargo, se podría incluír dentro del perfil demográfico y esto haría más eficiente
el tipo de consultas de las que se habla en el punto anterior.
Recomendaciones en cuanto a consultas (dificultad de los querys)
Otro factor importante a tener en cuenta a la hora de escoger uno de los dos
modelos es la facilidad para elaborar los querys para las consultas.
Esto tiene cierta similitud con el punto anterior en la medida de que depende
también del tipo de consultas que se esté realizando. Siempre hay que buscar las
consultas más frecuentes ya que no hay un modelo que se comporte mejor que el
otro en todo tipo de consultas.
Las consultas en el segundo modelo tienden a ser más complejas que en el
primero ya que la tabla persona del primero se ha descompuesto en persona,
ISC-2002-2-9
41
desempleado y trabajador. Pese a esto, la complejidad de las consultas no
presenta una gran diferencia entre modelo y modelo.
Recomendaciones en cuanto a flexibilidad de cada uno de los modelos
Cada uno de los modelos se implementará para cargar y analizar información
estadística tomada de censos o encuestas de población. Cada año, pueden ser
introducidas o eliminadas variables dependiendo de qué pueda empezar o qué
deje de ser interesante para estudiar. Esto se pudo ver en los datos fuentes del
proyecto. Para los años de 1994 y 1995 fueron introducidas variables como la
ciudadanía y por lo tanto, estos datos no estaban en las encuestas de 1992 y 1993.
Qué pasaría en cada uno de los modelos en caso de que se quiera agregar datos
nuevos a la información disponible? Qué tan flexible sería cada uno de los
modelos y qué tan organizadamente podrían crecer?
El modelo 1 es más flexible en este sentido que el modelo 2.
Cuando se tratan de agregar medidas (facts) o dimensiones degeneradas el
problema de crecimiento es sencillo pues se podría agregar una columna a las
tablas que las almacenan (Fact Tables) y no habría problema mayor para ninguno
de los dos modelos.
ISC-2002-2-9
42
El problema de crecimiento se hace más complicado cuando se trata de introducir
dimensiones que representan datos estadísticos.
El modelo 1 da mayor libertad a la hora de agregar nuevos datos. El modelo 2
tiene un porblema un poco mayor y es el de la dimensión demográfica. Es más
complicado agregarle nuevos datos a esta dimensión por lo siguiente:
La dimensión tiene las posibles combinaciones de los datos que reúne, y sus
respectivas llaves: Por ejemplo
‘llave_perfil_demografico’, '< 18', 'M', 'Married', 'NA' ,'Mexican-American'
En caso de que se quiera agregar un nuevo dato, se tendría que generar y
agregar todas las posibles combinaciones de estos datos ya existentes y el nuevo
dato a agregar.
En el segundo modelo, hay 3000 líneas que describen los perfiles demográficos.
Si quisiera agregar un dato como por ejemplo la religión al modelo, y que tuviera 4
valores para la religión, por ejemplo católico, protestante, no disponible y otra,
tendría un total de 12000 líneas. Así que tendría que arreglar las existentes y
agregar 9000 más.
Como el modelo 1 maneja cada uno de los datos como si fuera una dimensión
independiente de las demás, sólo tendría que agregar la dimensión al modelo con
los datos, y ajustar la llave en la Fact Table de persona.
ISC-2002-2-9
43
BIBLIOGRAFÍA
COREY, Michael and ABBEY, Michael. Oracle 8i Data Warehousing.
Osborne/McGraw Hill. 1999.
KIMBALL, Ralph. The Data Warehouse Lifecycle Toolkit: Expert Methods for
Designing, Developing and Deploying DataWarehouses. John Wiley & Sons, Inc.,
1998.
-------- The Data Warehouse Toolkit: Practical Techniques for Building
Dimensional Data Warehouses. John Wiley & Sons, Inc., 1996.
LORA, Eduardo. Técnicas de Medición Económica: Metodologías y Aplicaciones
en Colombia. Tercer Mundo Editores. 1994.
THOMSEN, Erik. OLAP Solutions: Building Multidimensional Information Systems.
John Wiley & Sons, Inc., 2001.
ISC-2002-2-9
44
Anexo A. Valores predeterminados de algunos de los datos incluídos en la
encuesta de población.
Estado civil 1 Married-civilian spouse present 2 Married-A.F spouse present 3 Married-spouse absent 4 Widowed 5 Divorced 6 Separated 7 Never married Clase de Trabajador 0 Not in universe 1 Private 2 Federal government 3 State government 4 Local government 5 Self-employed-incorporated 6 Self-employed-not incorporated 7 Without pay 8 Never worked Ciudadanía 1 Native: Born in the United States 2 Native: Born in Puerto Rico or U.S. Outlying 3 Native: Born abroad of American Parent(s) 4 Foreign born: U.S. citizen by naturalization 5 Foreign born: Not a citizen of U.S. Industria 00 Not in universe or children 01 Agriculture 02 Mining 03 Construction 04 Manufacturing-durable goods 05 Manufacturing-nondurable goods 06 Transportation 07 Communications 08 Utilities and sanitary services 09 Wholesale trade 10 Retail trade 11 Finance,insurance and real estate 12 Private household services 13 Business and repair services 14 Personal services, except private HH 15 Entertainment 16 Hospital services 17 Medical, except hospital 18 Education 19 Social services 20 Other professional services 21 Forestry and fisheries 22 Public administration 23 Armed Forces
ISC-2002-2-9
45
Ocupación 00 NIU/children/Armed Forces 01 Executive, admin. and managerial 02 Professional specialty 03 Technicians and related support 04 Sales 05 Adm. support, including clerical 06 Private household 07 Protective service 08 Other service 09 Precision production, craft & repair 10 Machine operators, assmblrs & inspctrs 11 Transportation and material moving 12 Handlers, equip. cleaners, etc. 13 Farming, forestry and fishing 14 Armed Forces 15 No previous experience-never worked Educación 00 Children 31 Less than 1st grade 32 1st, 2nd, 3rd, or 4th grade 33 5th or 6th grade 34 7th and 8th grade 35 9th grade 36 10th grade 37 11th grade 38 12th grade no diploma 39 High school graduate 40 Some college but no degree 41 Associates degree-occup./vocational 43 Bachelors degree(BA,AB,BS) 44 Masters degree(MA,MS,MEng,MEd,MSW,MBA) 45 Prof. school degree (MD,DDS,DVM,LLB,JD) 46 Doctorate degree(PhD,EdD) Origen Hispano 01 Mexican-American 02 Chicano 03 Mexican (Mexicano) 04 Puerto Rican 05 Cuban 06 Central or South American 07 Other Spanish 08 All other 09 Do not know Estatus de Trabajo (Medio/Completo) 0 Children or Armed Forces 1 Not in labor force 2 Full-time schedules 3 PT for econ. reasons, usually FT 4 PT for non-econ reasons, usually FT 5 PT for econ reasons, usually PT 6 Unemployed full-time 7 Unemployed part-time Razón de Desempleo 0 Not in universe 1 Job loser - on layoff 2 Other job loser 3 Job leaver 4 Re-entrant 5 New entrant Datos Geográficos País
ISC-2002-2-9
46
057 United States 072 Puerto Rico 096 Outlying U.S. (Guam, USVI, etc) 109 France 110 Germany 116 Greece 117 Hungary 119 Ireland/Eire 120 Italy 126 Holand and Netherlands 128 Poland 129 Portugal 139 England 140 Scotland 147 Yugoslavia 206 Cambodia 207 China 209 Hong Kong 210 India 212 Iran 215 Japan 218 South Korea 221 Laos 231 Philippines 238 Taiwan 239 Thailand 242 Vietnam 301 Canada 312 El Salvador 313 Guatemala 314 Honduras 315 Mexico 316 Nicaragua 317 Panama 337 Cuba 339 Dominican Republic 342 Haiti 343 Jamaica 351 Trinadad & Tobago 379 Colombia 380 Ecuador 385 Peru 999 Other Estado 00 Not in universe, nonmover 01 Alabama 02 Alaska 04 Arizona 05 Arkansas 06 California 08 Colorado 09 Connecticut 10 Delaware 11 District of Columbia 12 Florida 13 Georgia 15 Hawaii 16 Idaho 17 Illinois 18 Indiana 19 Iowa 20 Kansas 21 Kentucky 22 Louisiana 23 Maine 24 Maryland 25 Massachusetts
ISC-2002-2-9
47
26 Michigan 27 Minnesota 28 Mississippi 29 Missouri 30 Montana 31 Nebraska 32 Nevada 33 New Hampshire 34 New Jersey 35 New Mexico 36 New York 37 North Carolina 38 North Dakota 39 Ohio 40 Oklahoma 41 Oregon 42 Pennsylvania 44 Rhode Island 45 South Carolina 46 South Dakota 47 Tennessee 48 Texas 49 Utah 50 Vermont 51 Virginia 53 Washington 54 West Virginia 55 Wisconsin 56 Wyoming 96 Abroad
ISC-2002-2-9
48
Anexo B. Archivos de control para el cargue de los datos a tablas temporales
utilizando SQL Loader.
LOAD DATA INFILE 'c:\temp\1992\box.txt' RECLEN 278 INTO TABLE DATOS_CENSO_1992 ( LLAVE "seq1992.nextval", AAGE POSITION(6:7), ACLSWKR POSITION(8:8), ADTIND POSITION(9:10), ADTOCC POSITION(11:12), AENRLW POSITION(13:13), AFAMTYP POSITION(14:14), AFTPT POSITION(15:15), AHGA POSITION(16:17), AHRSPAY POSITION(18:21), AHSCOL POSITION(22:22), AIND POSITION(23:25), AMARITL POSITION(26:26), AMJIND POSITION(27:28), AMJOCC POSITION(29:30), AOCC POSITION(31:33), AOVRTIM POSITION(34:34), ARACE POSITION(35:35), AREORGN POSITION(36:37), ASEX POSITION(38:38), AUNMEM POSITION(39:39), AUNTYPE POSITION(40:40), AUSLHRS POSITION(41:42), AVET POSITION(43:43), AWERNTF POSITION(44:44), AWHYABS POSITION(45:45), AWHYLFT POSITION(46:46), AWHYLK POSITION(47:47), AWKSTAT POSITION(48:48), DISHP POSITION(49:49), FILESTAT POSITION(50:50), FSEQ POSITION(51:52), GRINREG POSITION(53:53), GRINST POSITION(54:55), HHDFMX POSITION(56:57), HHDREL POSITION(58:58), HPOS POSITION(59:60), HSEQ POSITION(61:65), INDUSTRY POSITION(66:68), LJCW POSITION(69:69), MIGSAME POSITION(70:70), MIGSUN POSITION(71:71), NOEMP POSITION(72:72), OCCUP POSITION(73:75),
ISC-2002-2-9
49
OIOFF POSITION(76:77), PARENT POSITION(78:78), PHFSEQ POSITION(79:80), SEOTR POSITION(81:81), VETQVA POSITION(82:82), VETYN POSITION(83:83), WEWKRS POSITION(84:84), WEXP POSITION(85:86), AFNLWGT POSITION(87:98), AGI POSITION(99:110), CAPGAIN POSITION(111:122), CAPLOSS POSITION(123:134), DIVVAL POSITION(135:146), FEDTAX POSITION(147:158), OIVAL POSITION(159:170), PEARNVAL POSITION(171:182), PTOTVAL POSITION(183:194), RTMVAL POSITION(195:206), SEMPVAL POSITION(207:218), SEVAL POSITION(219:230), TAXINC POSITION(231:242), VETVAL POSITION(243:254), WKSWORK POSITION(255:266), WSALVAL POSITION(267:278) )
Sólo se incluye la información para un año ya que para los demás años el archivo
de control es muy parecido.
Box.txt es el archivo de texto plano donde se encuentran los datos.
Reclen indica la longitud de cada registro.
Para cada uno de los campos, (x:y), indica la posición inicial (x) hasta la posición
final (y) donde se encuentran los datos.
ISC-2002-2-9
50
Anexo C. Código SQL y Plan de Ejecución de las Consultas
Modelo 1.
consulta 1:
SELECT SEXO.SEXO, COUNT(MOD1_PERSONA.LLAVE_SEXO) FROM CBENJUM.MOD1_PERSONA MOD1_PERSONA, CBENJUM.SEXO SEXO WHERE ( ( SEXO.LLAVE_SEXO = MOD1_PERSONA.LLAVE_SEXO ) ) GROUP BY SEXO.SEXO;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.SEXO INDEX UNIQUE SCAN CBENJUM.SEXO_PK
consulta 2:
SELECT EDAD.RANGO_EDAD, COUNT(MOD1_PERSONA.LLAVE_SEXO) FROM CBENJUM.EDAD EDAD, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( EDAD.LLAVE_EDAD = MOD1_PERSONA.LLAVE_EDAD ) ) GROUP BY EDAD.RANGO_EDAD ORDER BY COUNT(MOD1_PERSONA.LLAVE_SEXO) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDAD INDEX UNIQUE SCAN CBENJUM.EDAD_PK
consulta 3:
SELECT EDAD.RANGO_EDAD, SEXO.SEXO, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.EDAD EDAD, CBENJUM.MOD1_PERSONA MOD1_PERSONA, CBENJUM.SEXO SEXO WHERE ( ( EDAD.LLAVE_EDAD = MOD1_PERSONA.LLAVE_EDAD ) AND ( SEXO.LLAVE_SEXO = MOD1_PERSONA.LLAVE_SEXO ) ) AND ( EDAD.RANGO_EDAD <> '< 18' AND 1 = 1 ) GROUP BY EDAD.RANGO_EDAD, SEXO.SEXO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA
ISC-2002-2-9
51
TABLE ACCESS BY INDEX ROWID CBENJUM.SEXO INDEX UNIQUE SCAN CBENJUM.SEXO_PK TABLE ACCESS BY INDEX ROWID CBENJUM.EDAD INDEX UNIQUE SCAN CBENJUM.EDAD_PK
consulta 4:
SELECT i100248 as E100248,i100277 as E100277,RATIO_TO_REPORT(( COUNT(i100280) )) OVER(PARTITION BY i100248 )*100 as E_1461,COUNT(i100280) as E100280_COUNT FROM ( SELECT LLAVE_ANO AS i100247, ANO AS i100248 FROM CBENJUM.ANO ) o100246, ( SELECT LLAVE_INDUSTRIA AS i100276, INDUSTRIA AS i100277 FROM CBENJUM.INDUSTRIA ) o100275, ( SELECT LLAVE_MOD1_PERSONA AS i100280, LLAVE_ESTADO_CIVIL AS i100281, LLAVE_SEXO AS i100282, LLAVE_ANO AS i100283, LLAVE_CLASE_TRABAJADOR AS i100284, LLAVE_CIUDADANIA AS i100285, LLAVE_EDUCACION AS i100286, LLAVE_INDUSTRIA AS i100287, LLAVE_OCUPACION AS i100288, LLAVE_ESTATUS_TRABAJO AS i100289, LLAVE_EDAD AS i100290, LLAVE_ORIGEN_HISPANO AS i100291, LLAVE_ORIGEN_MADRE AS i100292, LLAVE_ORIGEN_PADRE AS i100293, LLAVE_ORIGEN_PERSONA AS i100294, INGRESOS_TOTALES AS i100295, GANANCIAS_CAPITAL AS i100296, PERDIDAS_CAPITAL AS i100297, DIVIDENDOS_ACCIONES AS i100298, TOTAL_GANANCIAS AS i100299, TOTAL_INGRESOS AS i100300, NUMERO_SEMANAS_TRABAJADAS AS i100301, MIEMBRO_SINDICATO AS i100302, BENEFICIOS_VETERANO AS i100303, DISCAPACITADO AS i100304, RAZON_DESEMPLEO AS i100305 FROM CBENJUM.MOD1_PERSONA ) o100279 WHERE ( (i100247 = i100283) and (i100276 = i100287)) GROUP BY i100248, i100277;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 5:
SELECT i100248 as E100248,i100310 as E100310,RATIO_TO_REPORT(( COUNT(i100280) )) OVER(PARTITION BY i100248 )*100 as E_1461,COUNT(i100280) as E100280_COUNT FROM ( SELECT LLAVE_ANO AS i100247, ANO AS i100248 FROM CBENJUM.ANO ) o100246, ( SELECT LLAVE_MOD1_PERSONA AS i100280, LLAVE_ESTADO_CIVIL AS i100281, LLAVE_SEXO AS i100282, LLAVE_ANO AS i100283, LLAVE_CLASE_TRABAJADOR AS i100284, LLAVE_CIUDADANIA AS i100285, LLAVE_EDUCACION AS i100286, LLAVE_INDUSTRIA AS i100287, LLAVE_OCUPACION AS i100288, LLAVE_ESTATUS_TRABAJO AS i100289, LLAVE_EDAD AS i100290, LLAVE_ORIGEN_HISPANO AS i100291, LLAVE_ORIGEN_MADRE AS i100292, LLAVE_ORIGEN_PADRE AS i100293, LLAVE_ORIGEN_PERSONA AS i100294, INGRESOS_TOTALES AS i100295, GANANCIAS_CAPITAL AS i100296, PERDIDAS_CAPITAL AS i100297, DIVIDENDOS_ACCIONES AS i100298, TOTAL_GANANCIAS AS i100299, TOTAL_INGRESOS AS i100300, NUMERO_SEMANAS_TRABAJADAS AS i100301, MIEMBRO_SINDICATO AS i100302, BENEFICIOS_VETERANO AS i100303, DISCAPACITADO AS i100304, RAZON_DESEMPLEO AS i100305 FROM CBENJUM.MOD1_PERSONA ) o100279, ( SELECT LLAVE_OCUPACION AS i100309, OCUPACION AS i100310 FROM CBENJUM.OCUPACION ) o100308 WHERE ( (i100247 = i100283) and (i100309 = i100288)) GROUP BY i100248, i100310;
plan de la consulta: SELECT STATEMENT WINDOW BUFFER
ISC-2002-2-9
52
SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 6:
SELECT EDAD.RANGO_EDAD, SUM(MOD1_PERSONA.INGRESOS_TOTALES) FROM CBENJUM.EDAD EDAD, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( EDAD.LLAVE_EDAD = MOD1_PERSONA.LLAVE_EDAD ) ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY EDAD.RANGO_EDAD ORDER BY SUM(MOD1_PERSONA.INGRESOS_TOTALES) DESC;
plan de la consulta: SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDAD INDEX UNIQUE SCAN CBENJUM.EDAD_PK
consulta 7:
SELECT EDAD.RANGO_EDAD, AVG(MOD1_PERSONA.INGRESOS_TOTALES) FROM CBENJUM.EDAD EDAD, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( EDAD.LLAVE_EDAD = MOD1_PERSONA.LLAVE_EDAD ) ) AND ( MOD1_PERSONA.INGRESOS_TOTALES > 0 ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY EDAD.RANGO_EDAD ORDER BY AVG(MOD1_PERSONA.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDAD INDEX UNIQUE SCAN CBENJUM.EDAD_PK
consulta 8:
SELECT OCUPACION.OCUPACION, AVG(MOD1_PERSONA.INGRESOS_TOTALES) FROM CBENJUM.MOD1_PERSONA MOD1_PERSONA, CBENJUM.OCUPACION OCUPACION WHERE ( ( OCUPACION.LLAVE_OCUPACION = MOD1_PERSONA.LLAVE_OCUPACION ) ) AND ( MOD1_PERSONA.INGRESOS_TOTALES > 0 ) AND ( MOD1_PERSONA.LLAVE_OCUPACION = OCUPACION.LLAVE_OCUPACION ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY OCUPACION.OCUPACION ORDER BY AVG(MOD1_PERSONA.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT
ISC-2002-2-9
53
SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK
consulta 9:
SELECT INDUSTRIA.INDUSTRIA, AVG(MOD1_PERSONA.INGRESOS_TOTALES) FROM CBENJUM.INDUSTRIA INDUSTRIA, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( INDUSTRIA.LLAVE_INDUSTRIA = MOD1_PERSONA.LLAVE_INDUSTRIA ) ) AND ( MOD1_PERSONA.INGRESOS_TOTALES > 0 ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY INDUSTRIA.INDUSTRIA ORDER BY AVG(MOD1_PERSONA.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK
consulta 10:
SELECT ANO.ANO, INDUSTRIA.INDUSTRIA, OCUPACION.OCUPACION, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.INDUSTRIA INDUSTRIA, CBENJUM.MOD1_PERSONA MOD1_PERSONA, CBENJUM.OCUPACION OCUPACION WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) AND ( INDUSTRIA.LLAVE_INDUSTRIA = MOD1_PERSONA.LLAVE_INDUSTRIA ) AND ( OCUPACION.LLAVE_OCUPACION = MOD1_PERSONA.LLAVE_OCUPACION ) ) GROUP BY ANO.ANO, INDUSTRIA.INDUSTRIA, OCUPACION.OCUPACION;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 11:
SELECT ORIGEN_HISPANO.ORIGEN_HISPANO, AVG(MOD1_PERSONA.INGRESOS_TOTALES) FROM CBENJUM.MOD1_PERSONA MOD1_PERSONA, CBENJUM.ORIGEN_HISPANO ORIGEN_HISPANO WHERE ( ( ORIGEN_HISPANO.LLAVE_ORIGEN_HISPANO = MOD1_PERSONA.LLAVE_ORIGEN_HISPANO ) ) AND ( MOD1_PERSONA.INGRESOS_TOTALES > 0 ) AND ( MOD1_PERSONA.LLAVE_ORIGEN_HISPANO = ORIGEN_HISPANO.LLAVE_ORIGEN_HISPANO ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY ORIGEN_HISPANO.ORIGEN_HISPANO
ISC-2002-2-9
54
ORDER BY AVG(MOD1_PERSONA.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ORIGEN_HISPANO INDEX UNIQUE SCAN CBENJUM.ORIGEN_HISPANO_PK
consulta 12:
SELECT i100020 as E100020,i100036 as E100036,RATIO_TO_REPORT(( COUNT(i100056) )) OVER(PARTITION BY i100020 )*100 as E_1458,COUNT(i100056) as E100056_COUNT FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_EDUCACION AS i100035, NIVEL_EDUCACION AS i100036 FROM CBENJUM.EDUCACION ) o100034, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059) and (i100035 = i100062)) GROUP BY i100020, i100036;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDUCACION INDEX UNIQUE SCAN CBENJUM.EDUCACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 13:
SELECT i100020 as E100020,i100036 as E100036,RANK() OVER(PARTITION BY i100020 ORDER BY ( COUNT(i100056) ) DESC ) as E_1464 FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_EDUCACION AS i100035, NIVEL_EDUCACION AS i100036 FROM CBENJUM.EDUCACION ) o100034, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059)
ISC-2002-2-9
55
and (i100035 = i100062)) GROUP BY i100020, i100036 ORDER BY i100020 ASC , E_1464 ASC;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDUCACION INDEX UNIQUE SCAN CBENJUM.EDUCACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 14:
SELECT ANO.ANO, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) ) AND ( MOD1_PERSONA.DISCAPACITADO = 'Yes' AND 1 = 1 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 15:
SELECT ANO.ANO, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) ) AND ( MOD1_PERSONA.MIEMBRO_SINDICATO = 'Yes' ) AND ( MOD1_PERSONA.RAZON_DESEMPLEO = 'Not in universe' ) AND ( MOD1_PERSONA.NUMERO_SEMANAS_TRABAJADAS > 0 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 16:
SELECT i100020 as E100020,i100053 as E100053,RATIO_TO_REPORT(( COUNT(i100056) )) OVER(PARTITION BY i100020 )*100 as E_1418,COUNT(i100056) as E100056_COUNT FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_INDUSTRIA AS i100052, INDUSTRIA AS i100053 FROM CBENJUM.INDUSTRIA ) o100051, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064,
ISC-2002-2-9
56
LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059) and (i100052 = i100063)) AND (o100055.i100078 = 'Yes') GROUP BY i100020, i100053; plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 17:
SELECT ANO.ANO, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) ) AND ( MOD1_PERSONA.BENEFICIOS_VETERANO = 'Yes' AND 1 = 1 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 18:
SELECT ANO.ANO, ESTADO_CIVIL.ESTADO_CIVIL, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.ESTADO_CIVIL ESTADO_CIVIL, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) AND ( ESTADO_CIVIL.LLAVE_ESTADO_CIVIL = MOD1_PERSONA.LLAVE_ESTADO_CIVIL ) ) GROUP BY ANO.ANO, ESTADO_CIVIL.ESTADO_CIVIL;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ESTADO_CIVIL INDEX UNIQUE SCAN CBENJUM.ESTADO_CIVIL_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
ISC-2002-2-9
57
consulta 19:
SELECT ANO.ANO, CIUDADANIA.CIUDADANIA, COUNT(MOD1_PERSONA.LLAVE_MOD1_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.CIUDADANIA CIUDADANIA, CBENJUM.MOD1_PERSONA MOD1_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD1_PERSONA.LLAVE_ANO ) AND ( CIUDADANIA.LLAVE_CIUDADANIA = MOD1_PERSONA.LLAVE_CIUDADANIA ) ) GROUP BY ANO.ANO, CIUDADANIA.CIUDADANIA;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.CIUDADANIA INDEX UNIQUE SCAN CBENJUM.CIUDADANIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 20:
SELECT i100020 as E100020,i100048 as E100048,i100049 as E100049,RANK() OVER(PARTITION BY i100020 ORDER BY ( COUNT(i100056) ) DESC ) as E_21,COUNT(i100056) as E100056_COUNT FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_GEOGRAFIA AS i100047, PAIS AS i100048, ESTADO AS i100049 FROM CBENJUM.GEOGRAFIA ) o100046, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059) and (i100047 = i100070)) AND (o100046.i100048 <> 'United States') AND (o100018.i100020 <> '1992') AND (o100018.i100020 <> '1993') GROUP BY i100020, i100048, i100049;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.GEOGRAFIA INDEX UNIQUE SCAN CBENJUM.GEOGRAFIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 21:
SELECT i100081 as E100081,RANK() OVER(ORDER BY ( COUNT(i100081) ) DESC ) as E_1515 FROM ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064,
ISC-2002-2-9
58
LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE (o100055.i100081 <> 'Not in universe' AND 1 = 1 ) GROUP BY i100081; plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY FILTER TABLE ACCESS FULL CBENJUM.MOD1_PERSONA
consulta 22:
SELECT i100020 as E100020,( ( AVG(i100071) )-( LAG(( AVG(i100071) ),1) OVER(ORDER BY i100020 ) ) )*100/( LAG(( AVG(i100071) ),1) OVER(ORDER BY i100020 ) ) as E_1455,LAG(( AVG(i100071) ),1) OVER(ORDER BY i100020 ) as E_1452,AVG(i100071) as E100071_AVG FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059)) AND (o100055.i100071 > 0) AND (o100055.i100081 = 'Not in universe') AND (o100055.i100077 > 0) GROUP BY 1, 1, 1, i100020; plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 23:
SELECT i100020 as E100020,( ( AVG(i100072) )-( LAG(( AVG(i100072) ),1) OVER(ORDER BY i100020 ) ) )*100/( LAG(( AVG(i100072) ),1) OVER(ORDER BY i100020 ) ) as E_1447,LAG(( AVG(i100072) ),1) OVER(ORDER BY i100020 ) as E_1444,AVG(i100072) as E100072_AVG FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS
ISC-2002-2-9
59
i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059)) AND (o100055.i100072 > 0) AND (o100055.i100081 = 'Not in universe') AND (o100055.i100077 > 0) GROUP BY 1, 1, 1, i100020; plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 24:
SELECT i100020 as E100020,i100053 as E100053,( ( COUNT(i100056) )-( LAG(( COUNT(i100056) ),23) OVER(ORDER BY i100020 ) ) )*100/( LAG(( COUNT(i100056) ),23) OVER(ORDER BY i100020 ) ) as E_1434,LAG(( COUNT(i100056) ),23) OVER(ORDER BY i100020 ) as E_1431,COUNT(i100056) as E100056_COUNT FROM ( SELECT LLAVE_ANO AS i100019, ANO AS i100020 FROM CBENJUM.ANO ) o100018, ( SELECT LLAVE_INDUSTRIA AS i100052, INDUSTRIA AS i100053 FROM CBENJUM.INDUSTRIA ) o100051, ( SELECT LLAVE_MOD1_PERSONA AS i100056, LLAVE_ESTADO_CIVIL AS i100057, LLAVE_SEXO AS i100058, LLAVE_ANO AS i100059, LLAVE_CLASE_TRABAJADOR AS i100060, LLAVE_CIUDADANIA AS i100061, LLAVE_EDUCACION AS i100062, LLAVE_INDUSTRIA AS i100063, LLAVE_OCUPACION AS i100064, LLAVE_ESTATUS_TRABAJO AS i100065, LLAVE_EDAD AS i100066, LLAVE_ORIGEN_HISPANO AS i100067, LLAVE_ORIGEN_MADRE AS i100068, LLAVE_ORIGEN_PADRE AS i100069, LLAVE_ORIGEN_PERSONA AS i100070, INGRESOS_TOTALES AS i100071, GANANCIAS_CAPITAL AS i100072, PERDIDAS_CAPITAL AS i100073, DIVIDENDOS_ACCIONES AS i100074, TOTAL_GANANCIAS AS i100075, TOTAL_INGRESOS AS i100076, NUMERO_SEMANAS_TRABAJADAS AS i100077, MIEMBRO_SINDICATO AS i100078, BENEFICIOS_VETERANO AS i100079, DISCAPACITADO AS i100080, RAZON_DESEMPLEO AS i100081 FROM CBENJUM.MOD1_PERSONA ) o100055 WHERE ( (i100019 = i100059) and (i100052 = i100063)) AND (o100051.i100053 <> 'Not in universe or children' AND 1 = 1 ) GROUP BY 23, 23, 23, i100020, i100053 ORDER BY i100020 ASC , i100053 ASC ;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD1_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
Modelo 2.
ISC-2002-2-9
60
consulta 1:
SELECT PERFIL_DEMOGRAFICO.SEXO, COUNT('Llave Mod2 PersonaMod2') FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) ) AND ( MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO = PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO AND 1 = 1 ) GROUP BY PERFIL_DEMOGRAFICO.SEXO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK
consulta 2:
SELECT PERFIL_DEMOGRAFICO.EDAD, COUNT('Llave Mod2 PersonaMod2') FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) ) AND ( MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO = PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO AND 1 = 1 ) GROUP BY PERFIL_DEMOGRAFICO.EDAD ORDER BY COUNT('Llave Mod2 PersonaMod2') DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK
consulta 3:
SELECT PERFIL_DEMOGRAFICO.EDAD, PERFIL_DEMOGRAFICO.SEXO, COUNT('Llave Mod2 PersonaMod2') FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) ) AND ( MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO = PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO AND 1 = 1 ) GROUP BY PERFIL_DEMOGRAFICO.EDAD, PERFIL_DEMOGRAFICO.SEXO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK
consulta 4:
ISC-2002-2-9
61
SELECT i100471 as E100471,i100492 as E100492,RATIO_TO_REPORT(( COUNT('Llave Mod2 PersonaMod2') )) OVER(PARTITION BY i100471 )*100 as E_1955,COUNT('Llave Mod2 PersonaMod2') as E_1954 FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_INDUSTRIA AS i100491, INDUSTRIA AS i100492 FROM CBENJUM.INDUSTRIA ) o100490, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498 WHERE ( (i100470 = i100501) and (i100491 = i100504)) GROUP BY i100471, i100492;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 5:
SELECT i100471 as E100471,i100525 as E100525,RATIO_TO_REPORT(( COUNT('Llave Mod2 PersonaMod2') )) OVER(PARTITION BY i100471 )*100 as E_1955,COUNT('Llave Mod2 PersonaMod2') as E_1954 FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498, ( SELECT LLAVE_OCUPACION AS i100524, OCUPACION AS i100525 FROM CBENJUM.OCUPACION ) o100523 WHERE ( (i100470 = i100501) and (i100524 = i100503)) GROUP BY i100471, i100525;
plan de la consulta: SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 6:
SELECT PERFIL_DEMOGRAFICO.EDAD, SUM(MOD2_TRABAJADOR.INGRESOS_TOTALES) FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_PERSONA.LLAVE_MOD2_PERSONA = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR AND 1 = 1 )
ISC-2002-2-9
62
GROUP BY PERFIL_DEMOGRAFICO.EDAD ORDER BY SUM(MOD2_TRABAJADOR.INGRESOS_TOTALES) DESC;
plan de la consulta: SELECT STATEMENT SORT ORDER BY SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK
consulta 7:
SELECT PERFIL_DEMOGRAFICO.EDAD, AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_TRABAJADOR.INGRESOS_TOTALES > 0 ) AND ( MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO = PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO ) GROUP BY PERFIL_DEMOGRAFICO.EDAD ORDER BY AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK
consulta 8:
SELECT OCUPACION.OCUPACION, AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR, CBENJUM.OCUPACION OCUPACION WHERE ( ( OCUPACION.LLAVE_OCUPACION = MOD2_PERSONA.LLAVE_OCUPACION ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_TRABAJADOR.INGRESOS_TOTALES > 0 AND 1 = 1 ) GROUP BY OCUPACION.OCUPACION ORDER BY AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK
ISC-2002-2-9
63
consulta 9:
SELECT INDUSTRIA.INDUSTRIA, AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) FROM CBENJUM.INDUSTRIA INDUSTRIA, CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR WHERE ( ( INDUSTRIA.LLAVE_INDUSTRIA = MOD2_PERSONA.LLAVE_INDUSTRIA ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_TRABAJADOR.INGRESOS_TOTALES > 0 AND 1 = 1 ) GROUP BY INDUSTRIA.INDUSTRIA ORDER BY AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) DESC;
plan de la consulta SELECT STATEMENT SORT ORDER BY SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK
consulta 10:
SELECT ANO.ANO, INDUSTRIA.INDUSTRIA, OCUPACION.OCUPACION, COUNT(MOD2_PERSONA.LLAVE_MOD2_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.INDUSTRIA INDUSTRIA, CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.OCUPACION OCUPACION WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) AND ( INDUSTRIA.LLAVE_INDUSTRIA = MOD2_PERSONA.LLAVE_INDUSTRIA ) AND ( OCUPACION.LLAVE_OCUPACION = MOD2_PERSONA.LLAVE_OCUPACION ) ) AND ( OCUPACION.LLAVE_OCUPACION <> 0 AND 1 = 1 ) GROUP BY ANO.ANO, INDUSTRIA.INDUSTRIA, OCUPACION.OCUPACION;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.OCUPACION INDEX UNIQUE SCAN CBENJUM.OCUPACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK consulta 11:
SELECT PERFIL_DEMOGRAFICO.ORIGEN_HISPANO, AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) FROM CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_TRABAJADOR.INGRESOS_TOTALES > 0 AND 1 = 1 ) GROUP BY PERFIL_DEMOGRAFICO.ORIGEN_HISPANO ORDER BY AVG(MOD2_TRABAJADOR.INGRESOS_TOTALES) DESC;
plan de la consulta
ISC-2002-2-9
64
SELECT STATEMENT SORT ORDER BY SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK consulta 12:
SELECT i100471 as E100471,i100479 as E100479,RATIO_TO_REPORT(( COUNT(i100499) )) OVER(PARTITION BY i100471 )*100 as E_1951,COUNT(i100499) as E100499_COUNT FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_EDUCACION AS i100478, NIVEL_EDUCACION AS i100479 FROM CBENJUM.EDUCACION ) o100477, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498 WHERE ( (i100470 = i100501) and (i100478 = i100502)) GROUP BY i100471, i100479;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.EDUCACION INDEX UNIQUE SCAN CBENJUM.EDUCACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 13:
SELECT i100471 as E100471,i100479 as E100479,RANK() OVER(PARTITION BY i100471 ORDER BY ( COUNT(i100499) ) DESC ) as E_1946 FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_EDUCACION AS i100478, NIVEL_EDUCACION AS i100479 FROM CBENJUM.EDUCACION ) o100477, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498 WHERE ( (i100470 = i100501) and (i100478 = i100502)) GROUP BY i100471, i100479 ORDER BY i100471 ASC , E_1946 ASC ;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA
ISC-2002-2-9
65
TABLE ACCESS BY INDEX ROWID CBENJUM.EDUCACION INDEX UNIQUE SCAN CBENJUM.EDUCACION_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 14:
SELECT ANO.ANO, COUNT(MOD2_PERSONA.LLAVE_MOD2_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD2_PERSONA MOD2_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) ) AND ( MOD2_PERSONA.DISCAPACITADO = 'Yes' AND 1 = 1 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK consulta 15:
SELECT ANO.ANO, COUNT(MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR) FROM CBENJUM.ANO ANO, CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.MOD2_TRABAJADOR MOD2_TRABAJADOR WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) AND ( MOD2_PERSONA.LLAVE_MOD2_TRA_DES = MOD2_TRABAJADOR.LLAVE_MOD2_TRABAJADOR ) ) AND ( MOD2_TRABAJADOR.MIEMBRO_SINDICATO = 'Yes' AND 1 = 1 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 16:
SELECT i100471 as E100471,i100492 as E100492,RATIO_TO_REPORT(( COUNT(i100513) )) OVER(PARTITION BY i100471 )*100 as E_1939,COUNT(i100513) as E100513_COUNT FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_INDUSTRIA AS i100491, INDUSTRIA AS i100492 FROM CBENJUM.INDUSTRIA ) o100490, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498, ( SELECT LLAVE_MOD2_TRABAJADOR AS i100513, INGRESOS_TOTALES AS i100514, GANANCIAS_CAPITAL AS i100515, PERDIDAS_CAPITAL AS i100516, DIVIDENDOS_ACCIONES AS i100517, TOTAL_GANANCIAS AS i100518, TOTAL_INGRESOS AS i100519, NUMERO_SEMANAS_TRABAJADAS AS i100520, MIEMBRO_SINDICATO AS i100521 FROM CBENJUM.MOD2_TRABAJADOR ) o100512 WHERE ( (i100470 = i100501) and (i100491 = i100504) and (i100508 = i100513))
ISC-2002-2-9
66
AND (o100512.i100521 = 'Yes' AND 1 = 1 ) GROUP BY i100471, i100492;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 17:
SELECT ANO.ANO, COUNT(MOD2_PERSONA.LLAVE_MOD2_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD2_PERSONA MOD2_PERSONA WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) ) AND ( MOD2_PERSONA.BENEFICIOS_VETERANO = 'Yes' AND 1 = 1 ) GROUP BY ANO.ANO;
plan de la consulta SELECT STATEMENT SORT GROUP BY FILTER NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 18:
SELECT ANO.ANO, PERFIL_DEMOGRAFICO.ESTADO_CIVIL, COUNT(MOD2_PERSONA.LLAVE_MOD2_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) AND ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) ) GROUP BY ANO.ANO, PERFIL_DEMOGRAFICO.ESTADO_CIVIL;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 19:
SELECT ANO.ANO, PERFIL_DEMOGRAFICO.CIUDADANIA, COUNT(MOD2_PERSONA.LLAVE_MOD2_PERSONA) FROM CBENJUM.ANO ANO, CBENJUM.MOD2_PERSONA MOD2_PERSONA, CBENJUM.PERFIL_DEMOGRAFICO PERFIL_DEMOGRAFICO
ISC-2002-2-9
67
WHERE ( ( ANO.LLAVE_ANO = MOD2_PERSONA.LLAVE_ANO ) AND ( PERFIL_DEMOGRAFICO.LLAVE_PERFIL_DEMOGRAFICO = MOD2_PERSONA.LLAVE_PERFIL_DEMOGRAFICO ) ) GROUP BY ANO.ANO, PERFIL_DEMOGRAFICO.CIUDADANIA;
plan de la consulta SELECT STATEMENT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.PERFIL_DEMOGRAFICO INDEX UNIQUE SCAN CBENJUM.PERFIL_DEMOGRAFICO_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK consulta 20:
SELECT i100471 as E100471,i100487 as E100487,i100488 as E100488,RANK() OVER(PARTITION BY i100471 ORDER BY ( COUNT(i100499) ) DESC ) as E_1928,COUNT(i100499) as E100499_COUNT FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_GEOGRAFIA AS i100486, PAIS AS i100487, ESTADO AS i100488 FROM CBENJUM.GEOGRAFIA ) o100485, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498 WHERE ( (i100470 = i100501) and (i100486 = i100507)) AND (o100485.i100487 <> 'United States') AND (o100485.i100486 = o100498.i100507) AND (o100469.i100471 <> '1992') AND (o100469.i100471 <> '1993') GROUP BY i100471, i100487, i100488;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.GEOGRAFIA INDEX UNIQUE SCAN CBENJUM.GEOGRAFIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
consulta 21:
SELECT i100496 as E100496,RANK() OVER(ORDER BY ( COUNT(i100495) ) DESC ) as E_2992 FROM ( SELECT LLAVE_MOD2_DESEMPLEADO AS i100495, RAZON_DESEMPLEO AS i100496 FROM CBENJUM.MOD2_DESEMPLEADO ) o100494 GROUP BY i100496;
plan de la consulta SELECT STATEMENT WINDOW SORT SORT GROUP BY TABLE ACCESS FULL CBENJUM.MOD2_DESEMPLEADO
consulta 22:
ISC-2002-2-9
68
SELECT i100471 as E100471,( ( AVG(i100514) )-( LAG(( AVG(i100514) ),1) OVER(ORDER BY i100471 ) ) )*100/( LAG(( AVG(i100514) ),1) OVER(ORDER BY i100471 ) ) as E_3582,LAG(( AVG(i100514) ),1) OVER(ORDER BY i100471 ) as E_3460,AVG(i100514) as E100514_AVG FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498, ( SELECT LLAVE_MOD2_TRABAJADOR AS i100513, INGRESOS_TOTALES AS i100514, GANANCIAS_CAPITAL AS i100515, PERDIDAS_CAPITAL AS i100516, DIVIDENDOS_ACCIONES AS i100517, TOTAL_GANANCIAS AS i100518, TOTAL_INGRESOS AS i100519, NUMERO_SEMANAS_TRABAJADAS AS i100520, MIEMBRO_SINDICATO AS i100521 FROM CBENJUM.MOD2_TRABAJADOR ) o100512 WHERE ( (i100470 = i100501) and (i100508 = i100513)) AND (o100512.i100514 > 0 AND 1 = 1 ) GROUP BY 1, 1, 1, i100471;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK consulta 23:
SELECT i100471 as E100471,( ( AVG(i100515) )-( LAG(( AVG(i100515) ),1) OVER(ORDER BY i100471 ) ) )*100/( LAG(( AVG(i100515) ),1) OVER(ORDER BY i100471 ) ) as E_4053,LAG(( AVG(i100515) ),1) OVER(ORDER BY i100471 ) as E_4045,AVG(i100515) as E100515_AVG FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498, ( SELECT LLAVE_MOD2_TRABAJADOR AS i100513, INGRESOS_TOTALES AS i100514, GANANCIAS_CAPITAL AS i100515, PERDIDAS_CAPITAL AS i100516, DIVIDENDOS_ACCIONES AS i100517, TOTAL_GANANCIAS AS i100518, TOTAL_INGRESOS AS i100519, NUMERO_SEMANAS_TRABAJADAS AS i100520, MIEMBRO_SINDICATO AS i100521 FROM CBENJUM.MOD2_TRABAJADOR ) o100512 WHERE ( (i100470 = i100501) and (i100508 = i100513)) AND (o100512.i100515 > 0 AND 1 = 1 ) GROUP BY 1, 1, 1, i100471;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_TRABAJADOR TABLE ACCESS BY INDEX ROWID CBENJUM.MOD2_PERSONA INDEX UNIQUE SCAN CBENJUM.MOD2_PERS_UNIQUE TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK
ISC-2002-2-9
69
consulta 24:
SELECT i100471 as E100471,i100492 as E100492,( ( COUNT(i100499) )-( LAG(( COUNT(i100499) ),23) OVER(ORDER BY i100471 ) ) )*100/( LAG(( COUNT(i100499) ),23) OVER(ORDER BY i100471 ) ) as E_4160,LAG(( COUNT(i100499) ),23) OVER(ORDER BY i100471 ) as E_4152,COUNT(i100499) as E100499_COUNT FROM ( SELECT LLAVE_ANO AS i100470, ANO AS i100471 FROM CBENJUM.ANO ) o100469, ( SELECT LLAVE_INDUSTRIA AS i100491, INDUSTRIA AS i100492 FROM CBENJUM.INDUSTRIA ) o100490, ( SELECT LLAVE_MOD2_PERSONA AS i100499, LLAVE_PERFIL_DEMOGRAFICO AS i100500, LLAVE_ANO AS i100501, LLAVE_EDUCACION AS i100502, LLAVE_OCUPACION AS i100503, LLAVE_INDUSTRIA AS i100504, LLAVE_ORIGEN_MADRE AS i100505, LLAVE_ORIGEN_PADRE AS i100506, LLAVE_ORIGEN_PERSONA AS i100507, LLAVE_MOD2_TRA_DES AS i100508, BENEFICIOS_VETERANO AS i100509, DISCAPACITADO AS i100510 FROM CBENJUM.MOD2_PERSONA ) o100498 WHERE ( (i100470 = i100501) and (i100491 = i100504)) AND (o100490.i100492 <> 'Not in universe or children' AND 1 = 1 ) GROUP BY 23, 23, 23, i100471, i100492 ORDER BY i100471 ASC ;
plan de la consulta SELECT STATEMENT WINDOW BUFFER SORT GROUP BY FILTER NESTED LOOPS NESTED LOOPS TABLE ACCESS FULL CBENJUM.MOD2_PERSONA TABLE ACCESS BY INDEX ROWID CBENJUM.INDUSTRIA INDEX UNIQUE SCAN CBENJUM.INDUSTRIA_PK TABLE ACCESS BY INDEX ROWID CBENJUM.ANO INDEX UNIQUE SCAN CBENJUM.ANO_PK