Está en la página 1de 61

Soporte BI

Como está organizado

Soporte grado 1
problemas entre comillas fáciles de resolver

Soporte grado 2

Ya es un soporte más avanzado y que cuesta más tiempo Revisión de bases de datos

Soporte grado 3

Ya serian proyectos y corrección de query, script

Tablero de soluciones
Base de datos

GW ---------------------- C/S

Actualmente se está migrando datos de la base de datos C/S a la nueva base de datos GW, lo están
haciendo por procesos.

Esto se hace para mejorar el desempeño de una base de datos actualizar versiones, reducir costes
o aplicar políticas de seguridad.

Se produce durante una actualización de hardware o la transferencia de un sistema existente a


otro completamente nuevo. Algunos ejemplos son:

- Actualización de una base de datos.

- Migración hacia o desde la plataforma de hardware.

- Migración a un nuevo software.

- Fusión de dos sistemas paralelos en uno solo que se requiere cuando una empresa absorbe a
otra o cuando dos negocios se fusionan.

Desafíos de la migración de datos

Pese a que la migración de datos puede ser un proceso sencillo, su implementación puede
encontrarse con desafíos a los que habrá que hacer frente.

- Descubrir que el código fuente de la aplicación de origen no está disponible y el fabricante


de dicha aplicación ya no se encuentra en el mercado ya.
- Encontrar tipos o formatos de datos de origen que no tienen correspondencia en destino:
números, fechas, sub-registros.
- Problemas de codificación que afecten a determinados conjuntos de datos.
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

ETL (Extraer: extract. Transformar: transform. Y Cargar: load.) El usuario llena sus datos y allí se
transforman

Para llevar a cabo de manera correcta el proceso de extracción, primera fase de los procesos ETL,
hay que

La migración de datos consiste en la extracción, transformación y carga de datos de un sistema a

otro (ETL). Así:

- Extracción: es el proceso mediante el que se toman los datos del sistema o los sistemas de
origen.

- Transformación: en esta etapa al dato le son aplicadas las reglas del negocio para convertirlo,

adecuarlo y prepararlo para el siguiente paso.

- Carga: una vez que los datos se han transformado y convertido se cargan al nuevo sistema, de

forma directa o por etapas, dependiendo del tipo de conexión disponible entre ambos.

seguir los siguientes pasos:

● Extraer los datos desde los sistemas de origen.

● Analizar los datos extraídos obteniendo un chequeo.

● Interpretar este chequeo para verificar que los datos extraídos cumplen la pauta o

estructura que se esperaba. Si no fuese así, los datos deberían ser rechazados.
● Convertir los datos a un formato preparado para iniciar el proceso de transformación

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Tera data = bodega de datos

Se ejecuta bajo el sistema operativo suse Linux

Nos podemos conectar mediante canal o redes LAN

Ventajas

Paralelismo: La teradata está diseñada desde su inicio con una arquitectura paralela, esto quiere
decir que todas las tareas que ejecutemos se ejecutan en paralelo.

Escalabilidad: Teradata posee una escalabilidad lineal, eso quiere decir que puede aumentar el
trabajo sin reducir el rendimiento.

Optimizador: Teradata posee un muy buen optimizador permitiendo así poder realizar consultas
complejas.

Alta disponibilidad: Teradata tiene una alta tolerancia a fallas

Teradata, llamada así por la capacidad de administrar terabytes de datos

Teradata Database Software: Motor de bases de datos relacional orientado al procesamiento de


grandes volúmenes de datos.

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

SQL (Lenguaje de consultas estructurado)

Bases de datos relacional

Esta almacena cada tipo de información en una tabla las cuales un reglón representa un elemento
y una columna representa propiedades o atributos de ese elemento.
SINTAXIS
Creación de tablas

Consultas (order by)

SELECT Store_Name, Sales, Txn_Date


FROM Store_Information
ORDER BY Sales DESC;

Consultas (group by)


UPDATE Y DELETE

ACTUALIZA Y ELIMINA REGISTROS O TABLAS


UPDATE dbo.Products
SET ProductName = 'Flat Head Screwdriver'
WHERE ProductID = 50
GO

ALTER Y DROP

ALTERA Y ELIMINA TABLAS


BETWEEN

SELECT "nombre_columna"
FROM "nombre_tabla"
WHERE "nombre_columna" BETWEEN 'valor1' AND 'valor2';

IN EN SQL

Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una
lista. Su sintaxis es:

SELECT * FROM Pedidos WHERE Provincia In (‘Madrid’, ‘Barcelona’, ‘Sevilla’);

Devuelve todo de Pedidos donde la provincia sea Madrid, Barcelona, Sevilla

CREACION DE TABLAS Y INSERTACION DE DATOS


CONSULTAS

OPERADORES (AND Y OR)

AND = Sirve para combinar varias condiciones

OR = Sirve para obtener registros que coincidan con alguna de las condiciones

Si tenemos varios operadores en una consulta el AND tiene prioridad sobre el OR


EJERCICIO

SUBCONSULTAS CON (IN)

Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno de los en una
lista. Su sintaxis es:

SELECT * FROM Pedidos WHERE Provincia In (‘Madrid’, ‘Barcelona’, ‘Sevilla’);

Devuelve todo de Pedidos donde la provincia sea Madrid, Barcelona, Sevilla

SELECT * FROM Pedidos WHERE Provincia Not In (‘Madrid’, ‘Barcelona’, ‘Sevilla’);


Devuelve todo de Pedidos donde la provincia no sea Madrid, Barcelona, Sevilla

SUBCONSULTAS

Una subconsulta es una instrucción SELECT anidada dentro de una instrucción SELECT,
SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Puede utilizar tres
formas de sintaxis para crear una subconsulta:

comparación [ANY | ALL | SOME] (instrucción sql) expresión [NOT] IN (instrucción sql) [NOT]
EXISTS (instrucción sql

En donde:

Comparación Es una expresión y un operador de comparación que compara la expresión con el


resultado de la subconsulta.

Expresión Es una expresión por la que se busca el conjunto resultante de la subconsulta.

instrucción SQL Es una instrucción SELECT, que sigue el mismo formato y reglas que cualquier otra
instrucción SELECT. Debe ir entre paréntesis.

OPERADOR (LIKE)

Se utiliza normalmente en una sentencia Where para buscar un patrón específico de una columna.

Este operador puede ser de utilidad en los casos donde necesitamos realizar un apareamiento de
patrones en vez de iguales o no iguales. El SQL Like se utiliza cuando se desea devolver la fila, si
una cadena de caracteres específica coincide con un patrón específico. El patrón puede ser una
combinación de caracteres regulares al igual que caracteres de comodín (*,%, ¿, etc.).

Uso del carácter comodín % (representa cero, uno o varios caracteres)

La siguiente consulta retorna todos los números de teléfono cuyo código de área “415” en la tabla
“PersonPhone”:
Nótese que el símbolo “415%” se especifica en la cláusula “Where”. Esto significa que SQL Server
buscará el número 415 seguido de cualquier cadena de cero o más caracteres. Aquí está el
conjunto de resultados:

%(PALABRA) = %BEIRO = ALBEIRO

(PALABRA)% = ALBE% = ALBEIRO

%(PALABRA)% = %BEI% = ALBEIRO

Usando el carácter comodín “_” (representa un solo carácter)

se utiliza cuando queremos verificar un solo carácter que puede ser cualquier cosa y proveer el
resto de los personajes para nuestro lado.

Supongamos que si deseamos devolver todos los registros en los que el primer carácter de la tabla
“Nombre” puede ser cualquier cosa, pero el resto de ellos debe ser “en”. Utilice la siguiente
consulta:
Usando los corchetes [ ] (cualquier carácter individual dentro del rango especificado [a-t] o en
conjunto [abc])

El operador SQL Like con corchetes es utilizado cuando se quiere tener rango. Supongamos que si
queremos encontrar todas las filas donde el primer carácter de “Nombre” comienza con [a-f].
Utilice la siguiente consulta:

Como puede verse, hemos utilizado el rango [a-f]%. Eso significa que se debe devolver el primer
carácter de “a” a la “f” y después de eso, todos los caracteres están bien porque usamos “%”
después:
Usando corchetes [^] (cualquier carácter individual que no esté dentro del rango especificado [a-t]
o en conjunto [abc])

Como habrá adivinado, esto es lo contrario al uso anterior del operador SQL Like entre corchetes.
Digamos que queremos obtener todos los registros donde el primer carácter de “Nombre” no
comienza con [a a la f]:

Observe que solo retornó los registros que no comienzan con ningún carácter de la “a” a la “f”:
SUBCONSULTAS CON IN EJERCICIO

CONSULTAS CON HAVING Y GROUP BY

La función GROUP BY se utiliza para juntar filas de resultados que coincidan en el valor de alguna
columna seleccionada.

Sintaxis GROUP BY
SELECT cliente, SUM(precio)
FROM pedidos
GROUP BY cliente
HAVING SUM(precio) > 500

Ejemplo de uso de GROUP BY

RESULTADO

La función HAVING se utiliza para incluir condiciones con alguna función SQL del tipo SUM, MAX, ..

Como la cláusula WHERE no se puede utilizar con funciones SQL del tipo SUM, MAX, entonces
utilizamos en su lugar, HAVING.

Having remplaza al where de cierta manera

Sintaxis HAVING

Ejemplo de SQL HAVING


El resultado será:

Funciones de agregación

Las funciones de agregación en SQL nos permiten efectuar operaciones sobre un conjunto de
resultados, pero devolviendo un único valor agregado para todos ellos. Es decir, nos permiten
obtener medias, máximos, esobre un conjunto de valores.

Las funciones de agregación básicas que soportan todos los gestores de datos son las siguientes:

COUNT: devuelve el número total de filas seleccionadas por la consulta.

MIN: devuelve el valor mínimo del campo que especifiquemos.

MAX: devuelve el valor máximo del campo que especifiquemos.


SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas
numéricas.

AVG: devuelve el valor promedio del campo que especifiquemos. Sólo se puede utilizar en
columnas numéricas.

SELECT name, number_grade,round((fraction_completed*100)) as percent_completed

FROM student_grades;

AS

Se utiliza para renombrar

Sentencia CASE en SQL

La instrucción CASE pasa por condiciones y devuelve un valor cuando se cumple la primera
condición (como una instrucción IF-THEN-ELSE). Entonces, una vez que una condición es
verdadera, dejará de leer y devolverá el resultado. Si no hay condiciones verdaderas, devuelve el
valor en la cláusula ELSE.

Si no hay otra parte y no hay condiciones verdaderas, devuelve NULL.


Consultas con Join

Los JOINs en SQL sirven para combinar filas de dos o más tablas basándose en un campo común
entre ellas, devolviendo por tanto datos de diferentes tablas. Un JOIN se produce cuando dos o
más tablas se juntan en una sentencia SQL.

INNER JOIN: Devuelve todas las filas cuando hay al menos una coincidencia en ambas tablas.
LEFT JOIN: Devuelve todas las filas de la tabla de la izquierda, y las filas coincidentes de la tabla de
la derecha.

LEFT JOIN mantiene todas las filas de la tabla izquierda (la tabla1). Las filas de la tabla derecha se
mostrarán si hay una coincidencia con las de la izquierda. Si existen valores en la tabla izquierda
pero no en la tabla derecha, ésta mostrará null.
RIGHT JOIN: Devuelve todas las filas de la tabla de la derecha, y las filas coincidentes de la tabla de
la izquierda.

Es igual que LEFT JOIN pero al revés. Ahora se mantienen todas las filas de la tabla derecha
(tabla2). Las filas de la tabla izquierda se mostrarán si hay una coincidencia con las de la derecha.
Si existen valores en la tabla derecha pero no en la tabla izquierda, ésta se mostrará null.

OUTER JOIN: Devuelve todas las filas de las dos tablas, la izquierda y la derecha. También se llama
FULL OUTER JOIN

OUTER JOIN o FULL OUTER JOIN devuelve todas las filas de la tabla izquierda (tabla1) y de la tabla
derecha (tabla2). Combina el resultado de los joins LEFT y RIGHT. Aparecerá null en cada una de
las tablas alternativamente cuando no haya una coincidencia.
On == Where

Sirve para especificar las columnas

SELF JOIN

LEFT OUTER JOIN

JOINS
FROM movies sequel

LEFT OUTER JOIN movies

ON movies.id = sequel.sequel_id;
DOCUENTACION
EJERCICIOS
EJERCICIO PRACTICO

Consultas sobre una tabla

1. Lista el nombre de todos los productos que hay en la tabla producto.

SELECT nombre FROM producto;

2. Lista los nombres y los precios de todos los productos de la tabla producto.

SELECT nombre, precio FROM producto;

3. Lista todas las columnas de la tabla producto.

SELECT * FROM producto;


4. Lista el nombre de los productos, el precio en euros y el precio en dólares
estadounidenses (USD).

SELECT nombre, precio*3 FROM producto;

5. Lista el nombre de los productos, el precio en euros y el precio en dólares


estadounidenses (USD). Utiliza los siguientes alias para las columnas: nombre
de producto, euros, dólares.

SELECT nombre AS nombre_de_producto, precio*3 AS euros, precio*3 AS


dolares FROM producto;

6. Lista los nombres y los precios de todos los productos de la tabla producto,
convirtiendo los nombres a mayúscula.

SELECT UPPER(column_name) FROM table_name;

SELECT UPPER(nombre), precio FROM producto;

7. Lista los nombres y los precios de todos los productos de la tabla producto,
convirtiendo los nombres a minúscula.

SELECT LOWER (column_name) FROM table_name;

SELECT LOWER (nombre), precio FROM producto;

8. Lista el nombre y el precio de todos los productos que tengan un precio


mayor o igual a 180€. Ordene el resultado en primer lugar por el precio (en
orden descendente) y en segundo lugar por el nombre (en orden
ascendente).

Consulte todas las columnas para todas las ciudades estadounidenses en


CITY con poblaciones más grandes que 100000. El código de país para
América es USA. Formato de entrada

La tabla CITY se describe de la siguiente manera

SELECT *

FROM CITY
WHERE

COUNTRYCODE = 'USA'

AND POPULATION > 100000;

9 - Consulte todas las columnas (atributos) para cada fila en la tabla CITY .

Formato de entrada

La tabla CITY se describe de la siguiente manera:

SELECT* FROM CITY;

10 - Consulta todas las columnas de una ciudad en CITY con la ID 1661 .

Formato de entrada

La tabla CITY se describe de la siguiente manera:

SELECT *

FROM CITY

WHERE ID = 1661;

11 - Consulta todos los atributos de cada ciudad japonesa en la tabla CITY . El


CÓDIGO DE PAÍS para Japón es JPN.
Formato de entrada

La tabla CITY se describe de la siguiente manera:

SELECT*

FROM CITY

WHERE COUNTRYCODE = "JPN";

12 - Consulta los nombres de todas las ciudades japonesas en la tabla CITY . El


CÓDIGO DE PAÍS para Japón es JPN.

SELECT NAME

FROM CITY

WHERE COUNTRYCODE = "JPN";

13 - Consulte una lista de CITY y STATE en la tabla STATION.

SELECT CITY, STATE

FROM STATION;

14 - Consulte una lista de nombres CITYI de STATIONN con solo números IDD.
Puede imprimir los resultados en cualquier orden, pero debe excluir duplicados
de su respuesta.

15. Obtener los datos completos de los empleados.


SELECT* FROM Empleado;
16. Obtener los datos completos de los departamentos
SELECT* FROM Departamento;

17. Obtener los datos de los empleados con cargo 'Secretaria'.


SELECT *
FROM Empleado
WHERE cargoE = "Secretaria";
18. Obtener el nombre y salario de los empleados.
SELECT nomEmp, salEmp FROM Empleado;
19. Obtener los datos de los empleados vendedores, ordenado por nombre.
SELECT*
FROM Empleado
WHERE cargoE = "Vendedor"
ORDER BY nomEmp ;
20. Listar el nombre de los departamentos
SELECT nombreDpto
FROM Departamento ;
21. Listar el nombre de los departamentos, ordenado por nombre
SELECT nombreDpto
FROM Departamento
ORDER BY nombreDpto;
22. Listar el nombre de los departamentos, ordenado por ciudad
SELECT nombreDpto, ciudad
FROM Departamento
ORDER BY ciudad;
23. Listar el nombre de los departamentos, ordenado por ciudad, en orden inverso
SELECT nombreDpto, ciudad
FROM Departamento
ORDER BY ciudad DESC;
24. Obtener el nombre y cargo de todos los empleados, ordenado por salario

SELECT nomEmp, cargoE, salEmp


FROM Empleado
ORDER BY salEmp;

25. Obtener el nombre y cargo de todos los empleados, ordenado por cargo y por
salario
SELECT nomEmp, cargoE, salEmp
FROM Empleado
ORDER BY cargoE, salEmp ;
26. Obtener el nombre y cargo de todos los empleados, en orden inverso por cargo
SELECT nomEmp, cargoE
FROM Empleado
ORDER BY cargoE DESC ;
27. Listar los salarios y comisiones de los empleados del departamento 2000
SELECT salEmp, comisionE, codDepto
FROM Empleado
WHERE codDepto = 2000
28. Listar los salarios y comisiones de los empleados del departamento 2000,
ordenado por comisión
SELECT salEmp, comisionE, codDepto
FROM empleado
WHERE codDepto = 2000
ORDER BY comisionE;
29. Listar todas las comisiones
SELECT comisionE
FROM Empleado;
30. Listar las comisiones que sean diferentes, ordenada por valor
SELECT DISTINCT comisionE FROM Empleado ORDER BY comisionE;
31. Listar los diferentes salarios
SELECT DISTINCT salEmp
FROM Empleado;
32. Obtener el valor total a pagar que resulta de sumar a los empleados del
departamento 3000 unabonificación de $500.000, en orden alfabético del
empleado
SELECT salEmp, codDepto, nomEmp
FROM Empleado
WHERE codDepto = 3000 AND salEmp + 500.000
ORDER BY nomEmp;
33. Obtener la lista de los empleados que ganan una comisión superior a su sueldo.
SELECT nomEmp, comisionE
FROM Empleado
WHERE comisionE > salEmp;
34. Listar los empleados cuya comisión es menor o igual que el 30% de su sueldo
SELECT nomEmp, comisionE
FROM Empleado
WHERE comisionE <= salEmp* 0.30;

35. Elabore un listado donde para cada fila, figure ‘Nombre’ y ‘Cargo’ antes del
valor respectivo paracada empleado
SELECT "Nombre: " ,nomEmp, "Cargo: " ,cargoE
FROM Empleado;
36. Hallar el salario y la comisión de aquellos empleados cuyo número de
documento de identidad es superior al '19.709.802'
SELECT nomEmp, salEmp, comisionE, nDIEmp
FROM Empleado
WHERE nDIEmp > '19.709.802' ;
37. Listar los empleados cuyo salario es menor o igual que el 40% de su comisión
SELECT nomEmp, salEmp, comisionE
FROM Empleado
WHERE salEmp <= comisionE* 0.40;
38. Divida los empleados, generando un grupo cuyo nombre inicie por la letra J y
termine en la letra Z. Liste estos empleados y su cargo por orden alfabético.
SELECT JZ.nomEmp, JZ.cargoE
FROM (SELECT *
FROM Empleado
WHERE nomEmp> 'J' AND nomEmp <'z')
JZ
ORDER BY nomEmp;
39. Listar el salario, la comisión, el salario total (salario + comisión), documento de
identidad del empleado y nombre, de aquellos empleados que tienen comisión
superior a $1.000.000, ordenar el informe por el número del documento de
identidad
SELECT nDIEmp, nomEmp, salEmp, comisionE, (salEmp+comisionE) as total FROM
Empleado WHERE comisionE > 1000000 ORDER BY nDIEmp;
40. Obtener un listado similar al anterior, pero de aquellos empleados que NO
tienen comisión
SELECT nDIEmp, nomEmp, salEmp, comisionE, (salEmp+comisionE) as total
FROM Empleado
WHERE comisionE = 0
ORDER BY nDIEmp;

41. Hallar el nombre de los empleados que tienen un salario superior a $1000000, y
tienen como jefe al ,empleado con documento de identidad '31.840.269'
SELECT nomEmp
FROM Empleado
WHERE salEmp > 1000000 AND jefeID = '31.840.269';
42. Hallar el conjunto complementario del resultado del ejercicio anterior.
SELECT nomEmp
FROM Empleado
WHERE salEmp <= 1000000 AND jefeID = '31.840.269'
43. Hallar los empleados cuyo nombre no contiene la cadena “MA”
SELECT nomEmp
FROM Empleado
WHERE nomEmp LIKE "%MA%";
44. Obtener los nombres de los departamentos que no sean “Ventas” ni
“Investigación” NI ‘MANTENIMIENTO’, ordenados por ciudad.
SELECT nombreDpto
FROM Departamento
WHERE nombreDpto NOT IN
('VENTAS','INVESTIGACIÓN','MANTENIMIENTO')
ORDER BY ciudad;
45. Obtener el nombre y el departamento de los empleados con cargo 'Secretaria'
o 'Vendedor', que no trabajan en el departamento de “PRODUCCION”, cuyo
salario es superior a $1000000, ordenados por fecha de incorporación.
SELECT E.nomEmp, E. cargoE, D.nombreDpto
FROM Departamento D, Empleado E
WHERE cargoE IN ('Secretaria',
'Vendedor') AND
salEmp > 1000000 AND
E.coddepto = D.coddepto AND
E.coddepto NOT IN
(SELECT F.coddepto
FROM Departamento F
WHERE F.nombredpto='PRODUCCIÓN');

46. Listar los datos de los empleados cuyo nombre inicia por la letra 'M', su salario
es mayor a $800.000 o reciben comisión y trabajan para el departamento de
'VENTAS'
SELECT * FROM Empleado
WHERE nomEmp LIKE "M%" AND salEmp > 800000 AND comisionE > 0 AND
cargoE = "Vendedor" ;

SELECT

49. Obtener los nombres, salarios y comisiones de los empleados que


reciben un salario situado entre la
mitad de la comisión la propia comisión.
SELECT nomEmp, salEmp, comisionE
FROM Empleado
WHERE salEmp BETWEEN comisionE/2 AND comisionE;
47. Suponga que la empresa va a aplicar un reajuste salarial del 7%. Listar los
nombres de los empleados, su salario actual y su nuevo salario, indicando
para cada uno de ellos si tiene o no comisión.
SELECT nomEmp, salEmp, (salEmp*1.07) AS reauste, comisionE
FROM Empleado;

48. Obtener la información disponible del empleado cuyo número de


documento de identidad sea:
'31.178.144', '16.759.060', '1.751.219', '768.782', '737.689', '19.709.802',
'31.174.099', '1.130.782'
SELECT*
FROM Empleado
WHERE nDIEmp IN ('31.178.144', '16.759.060', '1.751.219', '768.782',
'737.689', '19.709.802', '31.174.099', '1.130.782');

49. Entregar un listado de todos los empleados ordenado por su


departamento, y alfabético dentro del departamento.
SELECT nDIEmp, nomEmp, codDepto FROM Empleado

50. Entregar el salario más alto de la empresa.


SELECT nomEmp, MAX(salEmp)
FROM Empleado;

51. Entregar el total a pagar por comisiones, y el número de empleados que


las reciben.
SELECT COUNT (nomEmp), SUM(comisionE)
FROM Empleado
WHERE comisionE > 0;

52. Entregar el nombre del último empleado de la lista por orden alfabético.
SELECT MAX(nomEmp)
FROM Empleado
ORDER BY nomEmp DESC;

53. Hallar el salario más alto, el más bajo y la diferencia entre ellos.
SELECT MAX(salEmp) AS MAS_ALTO, MIN(salEmp) AS MAS_BAJO,
(MAX(salEmp) - MIN(salEmp)) AS DIFERENCIA
FROM Empleado;
54. Conocido el resultado anterior, entregar el nombre de los empleados
que reciben el salario más alto y más bajo. ¿Cuánto suman estos salarios?
MAX MIN DIF
6250000.0|750000.0|5500000.0
SELECT nomEmp, MAX(salEmp), MIN(salEmp), (MAX(salEmp) + MIN(salEmp))
FROM Empleado ;

55. Entregar el número de empleados de sexo femenino y de sexo


masculino, por numdepartamento.
SELECT COUNT(nomEmp), codDepto, sexEmp
FROM Empleado
GROUP BY sexEmp, codDepto

56. Hallar el salario promedio por departamento.


SELECT AVG(salEmp),codDepto
FROM Empleado
GROUP BY codDepto;

57. Hallar el salario promedio por departamento, considerando aquellos


empleados cuyo salario supera $900.000, y aquellos con salarios inferiores a
$575.000. Entregar el código y el nombre del departamento.
SELECT N.codDepto, D.nombreDpto, N.pro
FROM Departamento D,
(SELECT codDepto, AVG(salEmp) AS pro
FROM Empleado
WHERE salEmp > 900000 AND
salEmp > 575000
GROUP BY codDepto)
N WHERE N.codDepto = D.codDepto;

58. Listar los nombres de los usuarios

59. Calcular el saldo máximo de los usuarios de sexo “Mujer”

60. Listar nombre y teléfono de los usuarios con teléfono NOKIA,


BLACKBERRY o SONY

61. Contar los usuarios sin saldo o inactivos

62. Listar el login de los usuarios con nivel 1, 2 o 3


63. Listar los números de teléfono con saldo menor o igual a 300

64. Calcular la suma de los saldos de los usuarios de la compañia telefónica


NEXTEL

65.Contar el número de usuarios por compañía telefónica

66. Contar el número de usuarios por nivel

67. Listar el login de los usuarios con nivel 2

68. Mostrar el email de los usuarios que usan Gmail

69 Listar nombre y teléfono de los usuarios con teléfono LG, SAMSUNG o


MOTOROLA

Proyectos SQL

1.

QUERY

CREATE TABLE ESTRUCTURAS (ID INTEGER PRIMARY KEY, MARCA TEXT, PRECIO INTEGER, MODELO
INTEGER, COLOR TEXT);
INSERT INTO ESTRUCTURAS VALUES (1, "GW", 100000, 2020, "VERDE");

INSERT INTO ESTRUCTURAS VALUES (2, "SHIMANO", 200.000, 2010, "ROJO");

INSERT INTO ESTRUCTURAS VALUES (3, "BH", 150000, 2000, "VERDE");

INSERT INTO ESTRUCTURAS VALUES (4, "GW", 180000, 2020, "AZUL");

INSERT INTO ESTRUCTURAS VALUES (5, "BH", 30000, 2017, "MORADO");

INSERT INTO ESTRUCTURAS VALUES (6, "SHIMANO", 300000, 2020, "VERDE");

INSERT INTO ESTRUCTURAS VALUES (7, "GW", 400000, 2020, "AZUL");

INSERT INTO ESTRUCTURAS VALUES (8, "GW", 500000, 2015, "ROJO");

INSERT INTO ESTRUCTURAS VALUES (9, "BH", 5500000, 2020, "AZUL");

INSERT INTO ESTRUCTURAS VALUES (10, "BH", 1100000, 2020, "AMARILLO");

INSERT INTO ESTRUCTURAS VALUES (11, "SHIMANO", 1200000, 2010, "VERDE");

INSERT INTO ESTRUCTURAS VALUES (12, "GW", 2500000, 2020, "ROJA");

INSERT INTO ESTRUCTURAS VALUES (13, "GW", 3300000, 2010, "NARANJADO");

INSERT INTO ESTRUCTURAS VALUES (14, "GW", 700.000, 2011, "MORADO");

INSERT INTO ESTRUCTURAS VALUES (15, "GW", 9900.000, 2012, "VERDE");

SELECT ID, MARCA, PRECIO, MODELO, COLOR FROM ESTRUCTURAS ORDER BY PRECIO DESC;

SELECT COUNT(*) AS MARCA1, MIN(PRECIO) AS PRECIO1, MAX(MODELO) AS MODELO1 FROM


ESTRUCTURAS;
2.

QUERY

/* Source: http://www.boxofficemojo.com/alltime/world/ */

CREATE TABLE top_movies(

rank TEXT NOT NULL PRIMARY KEY

, title TEXT

, studio TEXT

, worldwide TEXT

, domestic_money TEXT

, domestic_percent TEXT

, overseas_money TEXT

, overseas_percent TEXT

, year TEXT

);

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('Rank','Title','Studio','Worldwide','Domestic /
%','Overseas / %','Year^','','');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('1','Avatar','Fox','$2,788.0','$760.5','27.3%','$2,027.5','72.7%','2009^');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('2','Titanic','Par.','$2,186.8','$658.7','30.1%','$1,528.1','69.9%','1997^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('3','Marvel''s The
Avengers','BV','$1,518.6','$623.4','41.0%','$895.2','59.0%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('4','Harry Potter and the Deathly Hallows Part
2','WB','$1,341.5','$381.0','28.4%','$960.5','71.6%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('5','Furious
7','Uni.','$1,322.2','$321.2','24.3%','$1,001.0','75.7%','2015');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('6','Frozen','BV','$1,274.2','$400.7','31.4%','$873.5','68.6%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('7','Iron Man
3','BV','$1,215.4','$409.0','33.7%','$806.4','66.3%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('8','Transformers: Dark of the
Moon','P/DW','$1,123.8','$352.4','31.4%','$771.4','68.6%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('9','The Lord of the Rings: The Return of the
King','NL','$1,119.9','$377.8','33.7%','$742.1','66.3%','2003^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('10','Skyfall','Sony','$1,108.6','$304.4','27.5%','$804.2','72.5%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('11','Transformers: Age of
Extinction','Par.','$1,091.4','$245.4','22.5%','$846.0','77.5%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('12','The Dark Knight
Rises','WB','$1,084.4','$448.1','41.3%','$636.3','58.7%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('13','Pirates of the Caribbean: Dead Man''s
Chest','BV','$1,066.2','$423.3','39.7%','$642.9','60.3%','2006');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('14','Toy Story
3','BV','$1,063.2','$415.0','39.0%','$648.2','61.0%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('15','Pirates of the Caribbean: On Stranger
Tides','BV','$1,045.7','$241.1','23.1%','$804.6','76.9%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('16','Jurassic
Park','Uni.','$1,029.2','$402.5','39.1%','$626.7','60.9%','1993^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('17','Star Wars: Episode I - The Phantom
Menace','Fox','$1,027.0','$474.5','46.2%','$552.5','53.8%','1999^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('18','Alice in Wonderland
(2010)','BV','$1,025.5','$334.2','32.6%','$691.3','67.4%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('19','The Hobbit: An Unexpected
Journey','WB','$1,017.0','$303.0','29.8%','$714.0','70.2%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('20','The Dark
Knight','WB','$1,004.6','$534.9','53.2%','$469.7','46.8%','2008^');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('21','The Lion
King','BV','$987.5','$422.8','42.8%','$564.7','57.2%','1994^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('22','Harry Potter and the Sorcerer''s
Stone','WB','$974.8','$317.6','32.6%','$657.2','67.4%','2001');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('23','Despicable Me
2','Uni.','$970.8','$368.1','37.9%','$602.7','62.1%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('24','Pirates of the Caribbean: At World''s
End','BV','$963.4','$309.4','32.1%','$654.0','67.9%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('25','The Hobbit: The Desolation of
Smaug','WB','$960.4','$258.4','26.9%','$702.0','73.1%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('26','Harry Potter and the Deathly Hallows Part
1','WB','$960.3','$296.0','30.8%','$664.3','69.2%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('27','The Hobbit: The Battle of the Five
Armies','WB','$955.1','$255.1','26.7%','$700.0','73.3%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('28','Harry Potter and the Order of the
Phoenix','WB','$939.9','$292.0','31.1%','$647.9','68.9%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('29','Finding
Nemo','BV','$936.7','$380.8','40.7%','$555.9','59.3%','2003^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('30','Harry Potter and the Half-Blood
Prince','WB','$934.4','$302.0','32.3%','$632.5','67.7%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('31','The Lord of the Rings: The Two
Towers','NL','$926.0','$342.6','37.0%','$583.5','63.0%','2002^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('32','Shrek
2','DW','$919.8','$441.2','48.0%','$478.6','52.0%','2004');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('33','Harry Potter and the Goblet of
Fire','WB','$896.9','$290.0','32.3%','$606.9','67.7%','2005');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('34','Spider-Man
3','Sony','$890.9','$336.5','37.8%','$554.3','62.2%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('35','Ice Age: Dawn of the
Dinosaurs','Fox','$886.7','$196.6','22.2%','$690.1','77.8%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('36','Harry Potter and the Chamber of
Secrets','WB','$879.0','$262.0','29.8%','$617.0','70.2%','2002');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('37','Ice Age: Continental
Drift','Fox','$877.2','$161.3','18.4%','$715.9','81.6%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('38','The Lord of the Rings: The Fellowship of the
Ring','NL','$871.5','$315.5','36.2%','$556.0','63.8%','2001^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('39','The Hunger Games: Catching
Fire','LGF','$864.9','$424.7','49.1%','$440.2','50.9%','2013');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('40','Star Wars: Episode III - Revenge of the
Sith','Fox','$848.8','$380.3','44.8%','$468.5','55.2%','2005^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('41','Transformers: Revenge of the
Fallen','P/DW','$836.3','$402.1','48.1%','$434.2','51.9%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('42','The Twilight Saga: Breaking Dawn Part
2','LG/S','$829.7','$292.3','35.2%','$537.4','64.8%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('43','Inception','WB','$825.5','$292.6','35.4%','$533.0','64.6%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('44','Spider-
Man','Sony','$821.7','$403.7','49.1%','$418.0','50.9%','2002');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('45','Independence
Day','Fox','$817.4','$306.2','37.5%','$511.2','62.5%','1996^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('46','Shrek the
Third','P/DW','$799.0','$322.7','40.4%','$476.2','59.6%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('47','Harry Potter and the Prisoner of
Azkaban','WB','$796.7','$249.5','31.3%','$547.1','68.7%','2004');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('48','E.T.: The Extra-
Terrestrial','Uni.','$792.9','$435.1','54.9%','$357.8','45.1%','1982^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('49','Fast & Furious
6','Uni.','$788.7','$238.7','30.3%','$550.0','69.7%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('50','Indiana Jones and the Kingdom of the Crystal
Skull','Par.','$786.6','$317.1','40.3%','$469.5','59.7%','2008');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('51','Spider-Man
2','Sony','$783.8','$373.6','47.7%','$410.2','52.3%','2004');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('52','Star
Wars','Fox','$775.4','$461.0','59.5%','$314.4','40.5%','1977^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('53','Guardians of the
Galaxy','BV','$774.2','$333.2','43.0%','$441.0','57.0%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('54','2012','Sony','$769.7','$166.1','21.6%','$603.6','78.4%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('55','Maleficent','BV','$758.4','$241.4','31.8%','$517.0','68.2%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('56','The Da Vinci
Code','Sony','$758.2','$217.5','28.7%','$540.7','71.3%','2006');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('57','The Amazing Spider-
Man','Sony','$757.9','$262.0','34.6%','$495.9','65.4%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('58','Shrek Forever
After','P/DW','$752.6','$238.7','31.7%','$513.9','68.3%','2010');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('59','The Hunger Games: Mockingjay - Part
1','LGF','$752.1','$337.1','44.8%','$415.0','55.2%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('60','X-Men: Days of Future
Past','Fox','$748.1','$233.9','31.3%','$514.2','68.7%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('61','Madagascar 3: Europe''s Most
Wanted','P/DW','$746.9','$216.4','29.0%','$530.5','71.0%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('62','The Chronicles of Narnia: The Lion, the Witch
and the Wardrobe','BV','$745.0','$291.7','39.2%','$453.3','60.8%','2005');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('63','Monsters
University','BV','$743.6','$268.5','36.1%','$475.1','63.9%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('64','The Matrix
Reloaded','WB','$742.1','$281.6','37.9%','$460.6','62.1%','2003');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('65','Up','BV','$731.3','$293.0','40.1%','$438.3','59.9%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('66','Gravity','WB','$716.4','$274.1','38.3%','$442.3','61.7%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('67','Captain America: The Winter
Soldier','BV','$714.8','$259.8','36.3%','$455.0','63.7%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('68','The Twilight Saga: Breaking Dawn Part
1','Sum.','$712.2','$281.3','39.5%','$430.9','60.5%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('69','The Twilight Saga: New
Moon','Sum.','$709.8','$296.6','41.8%','$413.2','58.2%','2009');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('70','Transformers','P/DW','$709.7','$319.2','45.0%','$390.5','55.0%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('71','The Amazing Spider-Man
2','Sony','$709.0','$202.9','28.6%','$506.1','71.4%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('72','Dawn of the Planet of the
Apes','Fox','$708.8','$208.5','29.4%','$500.3','70.6%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('73','The Twilight Saga:
Eclipse','Sum.','$698.5','$300.5','43.0%','$398.0','57.0%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('74','Mission: Impossible - Ghost
Protocol','Par.','$694.7','$209.4','30.1%','$485.3','69.9%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('75','The Hunger
Games','LGF','$691.2','$408.0','59.0%','$283.2','41.0%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('76','Forrest
Gump','Par.','$677.9','$330.3','48.7%','$347.7','51.3%','1994^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('77','The Sixth
Sense','BV','$672.8','$293.5','43.6%','$379.3','56.4%','1999');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('78','Interstellar','Par.','$672.7','$188.0','27.9%','$484.7','72.1%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('79','Man of
Steel','WB','$668.0','$291.0','43.6%','$377.0','56.4%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('80','Kung Fu Panda
2','P/DW','$665.7','$165.2','24.8%','$500.4','75.2%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('81','Ice Age: The
Meltdown','Fox','$660.9','$195.3','29.6%','$465.6','70.4%','2006');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('82','Pirates of the Caribbean: The Curse of the Black
Pearl','BV','$654.3','$305.4','46.7%','$348.9','53.3%','2003');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('83','Big Hero
6','BV','$652.0','$222.4','34.1%','$429.6','65.9%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('84','Star Wars: Episode II - Attack of the
Clones','Fox','$649.4','$310.7','47.8%','$338.7','52.2%','2002^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('85','Thor: The Dark
World','BV','$644.8','$206.4','32.0%','$438.4','68.0%','2013');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('86','Kung Fu
Panda','P/DW','$631.7','$215.4','34.1%','$416.3','65.9%','2008');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('87','The
Incredibles','BV','$631.4','$261.4','41.4%','$370.0','58.6%','2004');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('88','Fast
Five','Uni.','$626.1','$209.8','33.5%','$416.3','66.5%','2011');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('89','Hancock','Sony','$624.4','$227.9','36.5%','$396.4','63.5%','2008');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('90','MIB
3','Sony','$624.0','$179.0','28.7%','$445.0','71.3%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('91','Iron Man
2','Par.','$623.9','$312.4','50.1%','$311.5','49.9%','2010');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('92','Ratatouille','BV','$623.7','$206.4','33.1%','$417.3','66.9%','2007');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('93','How to Train Your Dragon
2','Fox','$618.9','$177.0','28.6%','$441.9','71.4%','2014');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('94','The Lost World: Jurassic
Park','Uni.','$618.6','$229.1','37.0%','$389.6','63.0%','1997');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('95','The Passion of the
Christ','NM','$611.9','$370.8','60.6%','$241.1','39.4%','2004^');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('96','Mamma
Mia!','Uni.','$609.8','$144.1','23.6%','$465.7','76.4%','2008');
INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('97','Life of
Pi','Fox','$609.0','$125.0','20.5%','$484.0','79.5%','2012');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('98','Madagascar: Escape 2
Africa','P/DW','$603.9','$180.0','29.8%','$423.9','70.2%','2008');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES ('99','Casino
Royale','Sony','$599.0','$167.4','28.0%','$431.6','72.0%','2006');

INSERT INTO
top_movies(rank,title,studio,worldwide,domestic_money,domestic_percent,overseas_mo
ney,overseas_percent,year) VALUES
('100','Tangled','BV','$591.8','$200.8','33.9%','$391.0','66.1%','2010');

SELECT * FROM top_movies;

SELECT studio ,MIN(worldwide) AS minimo

FROM top_movies

GROUP BY studio;

SELECT studio ,MAX(worldwide) AS maximo

FROM top_movies

GROUP BY studio;

SELECT studio ,AVG(overseas_percent) AS PROMEDIO

FROM top_movies

GROUP BY studio;

SELECT year,overseas_percent

FROM top_movies

WHERE year > 1997 AND overseas_percent > 60.0;


SELECT title, SUM(year)

FROM top_movies

GROUP BY title

HAVING SUM(year) > 2000;

SELECT title, ROUND ((year*100)) AS año_redondiado FROM top_movies;

3.

QUERY

CREATE TABLE gente_famosa (id INTEGER PRIMARY KEY, nombre TEXT, salario INTEGER, edad
INTEGER );

INSERT INTO gente_famosa VALUES (1, "ANDRES CHAVEZ", 100000, 65);

INSERT INTO gente_famosa VALUES (2, "ALBEIRO GACHA", 200.000, 27);

INSERT INTO gente_famosa VALUES (3, "JOSE LUIS CANO", 150000, 63);

INSERT INTO gente_famosa VALUES (4, "MATEO GARCIA", 180000, 43);

INSERT INTO gente_famosa VALUES (5, "SANTIAGO ROMO", 30000, 41);

INSERT INTO gente_famosa VALUES (6, "SHIMANO UCHIJA", 300000, 25);

INSERT INTO gente_famosa VALUES (7, "VALEN GARCIA", 400000, 21);

INSERT INTO gente_famosa VALUES (8, "CAMILA MEJIA", 500000, 45);

INSERT INTO gente_famosa VALUES (9, "ALEX OSORIO", 5500000, 95);


INSERT INTO gente_famosa VALUES (10, "CAMILA RAMIREZ", 1100000, 96);

INSERT INTO gente_famosa VALUES (11, "HENRY GARCIA", 1200000, 45);

INSERT INTO gente_famosa VALUES (12, "LEO MESSI", 2500000, 74);

INSERT INTO gente_famosa VALUES (13, "XAVI HERNANDEZ", 3300000, 37);

INSERT INTO gente_famosa VALUES (14, "ABIDAL VAZQUEZ", 700.000, 52);

INSERT INTO gente_famosa VALUES (15, "ROSITA GARZO", 9900.000, 22);

CREATE TABLE hobbies (id INTEGER PRIMARY KEY, nombre TEXT, gente_famosa_id INTEGER);

INSERT INTO hobbies VALUES (1, "BAILAR", 15);

INSERT INTO hobbies VALUES (2, "FUTBOL", 14);

INSERT INTO hobbies VALUES (3, "NADAR", 13);

INSERT INTO hobbies VALUES (4, "NADAR", 12);

INSERT INTO hobbies VALUES (5, "FUTBOL", 11);

INSERT INTO hobbies VALUES (6, "BAILAR", 10);

INSERT INTO hobbies VALUES (7, "CANTAR", 9);

INSERT INTO hobbies VALUES (8, "CAMINAR", 8);

INSERT INTO hobbies VALUES (9, "CANTAR", 7);

INSERT INTO hobbies VALUES (10, "CORRER", 6);

INSERT INTO hobbies VALUES (11, "NADAR", 5);

INSERT INTO hobbies VALUES (12, "BAILAR", 4);

INSERT INTO hobbies VALUES (13, "BAILAR", 3);

INSERT INTO hobbies VALUES (14, "BAILAR", 2);

INSERT INTO hobbies VALUES (15, "FUTBOL", 1);

SELECT* FROM gente_famosa;

SELECT* FROM hobbies;


SELECT gente_famosa.nombre, hobbies.nombre

FROM gente_famosa

LEFT OUTER JOIN hobbies

ON gente_famosa.id = hobbies.gente_famosa_id;

4.

QUERY

CREATE TABLE USUARIOS (

id INTEGER PRIMARY KEY AUTOINCREMENT,

nombre TEXT,

edad INTEGER);

INSERT INTO USUARIOS (nombre, edad)

VALUES ("teo", 22);

INSERT INTO USUARIOS (nombre, edad)

VALUES ("juanma", 20);

INSERT INTO USUARIOS (nombre, edad)

VALUES ("julian", 26);

UPDATE USUARIOS SET edad = 24 WHERE id = 3;


SELECT* FROM USUARIOS;

DELETE FROM USUARIOS WHERE nombre = "julian";

SELECT* FROM USUARIOS;

Visualizadores (sinco)
Analítica

------------------------------------------------------------------------------------------------------------------------------

Aprender (SQL,teraadata,sinco,bases de datos,scrum)


----------------------------------------------------------------------------------------------------------------------

Filezilla
Facilita la trasnferencia entre dos o mas servidores por un protocolo ftp

Sirve de puente entre serves

X o número = seguros

Programación en bash
Adminastrar Linux
R,Python,sql

GUÍA CORTA DE
IMPLEMENTACIÓN DE PROCESOS
TERADATA BI EN
SURAMERICANA
Con esta guía se busca exponer de manera general el funcionamiento de los
componentes que se utilizan para la implementación de un proceso en Teradata y los
pasos estándar que se tienen para su implementación. Para empezar, se ilustrará el
flujo de ejecución de un proceso estándar y los componentes que se utilizan: el
administrador de tareas Tivoli y el sistema de archivos de Teradata que contiene
todos los archivos (En esta guía solo se hará referencia a los ficheros SCO, Principal
y los pasos estándar).

TIVOLI: Es una herramienta desarrollada por IBM que permite a las organizaciones el
manejo automatizado de ambientes computacionales. Al interior del área de A&BI se
hace uso de esta herramienta para la administración de la ejecución de los procesos,
es decir, aquí se programa en que horarios y fechas se va a ejecutar cada proceso en
Teradata. Como se observa en la figura, Tivoli se enlaza con el sistema de archivos
de Teradata e invoca al SCO, posteriormente cuando el proceso finalice, recibe y
notifica el estado de la ejecución.
SCO: Es el script es el encargado de orquestar la invocación de los
scripts Principales, en este se realiza toda la validación de la existencia de los
archivos, la configuración de los logs, la iteración de los archivos planos necesarios
para correr el proceso y da respuesta a Tivoli de la ejecución.

PRINCIPAL: Es el script encargado de invocar y recibir el estado de ejecución de


los Pasos y define el orden de ejecución de cada Paso. También se encarga de
responderle al SCO el estado de salida de la ejecución (sea exitoso o fallido).

Nota 1: Los archivos Principal y SCO se encuentran en la ruta:


/home/cargas_tpt/ejecutables

Paso 100: En este paso se realizan la carga de archivos planos a las tablas de
Teradata, estos archivos pueden estar en dos formatos, separados por un delimitador
(En la actualidad : ~{\< ) o por longitud fija. Aquí se debe definir cuál es la estructura
(los campos) de la tabla temporal que se creará para cargar los datos, el esquema de
esta tabla debe ser igual a la estructura que se tiene en el archivo plano.

Paso 111: En este script se crean tablas temporales que serán usadas para
desarrollar toda la lógica necesaria para la preparación de los datos, esto incluye
cruces (joins), transformaciones de los tipos de datos, cálculos, entre otros. Al final,
debe quedar al menos una tabla cuyo esquema incluya la información que será
llevada a la tabla destino.

Paso 120: Este paso se realiza la verificación de la disponibilidad de las tablas a las
que se va a cargar la información en el Paso 150.

Paso 150: En este script se bloquea la tabla destino y se carga en ella la información
procesada en el Paso 111. Si se trata de un proceso que tiene en cuenta las
inconsistencias, las mismas son insertadas en la tabla destinada para tal fin.

Nota: Una inconsistencia se podría definir como un error en los datos provenientes de
la fuente de información, se produce por ejemplo, cuando falta la clave primaria de un
registro o cuando un código operativo que es importante no cruza correctamente con
un catálogo.

Paso 150error: En caso de error en el paso 150, este se encarga de liberar las tablas
bloqueadas en el proceso de carga.

Paso 990: En este paso se valida que no existan registros repetidos.

Paso end: Se realiza el borrado de las tablas temporales.

Nota 2: En caso de que no sean suficientes estos pasos, se puede crear pasos
intermedios para realizar las operaciones necesarias.

Nota 3: Los archivos con el código de cada uno de los pasos se encuentran en la
ruta:
/home/cargas_tpt/scripts_carga
Pasos a seguir para la implementación de
un Proceso TPT
Que es un proceso tpt ?

Busqueda y registro del proceso


El primer paso a la hora de implementar un proceso según los estandares de
Suramericana es la definición un nombre unico para el proceso, este nombre debe
contener el código del proceso (Inicial de la compañía y numero del proceso que debe
ser unico) y el nombre del proceso (Consta de seis letras representativas), para
garantizar la unicidad del nombre del proceso se debe realizar una busqueda en el
servidor de producción, en la base de datos SURA_CONSULTAS, en la
tabla procesos_area_sujeto la cual contiene los nombres de todos los procesos, con
con esto se debe buscar el número de proceso mas alto para registrar el siguiente
disponible, por ejemplo, si se encuentra que el proceso 1010 fue el ultimo registrado,
se debe tomar y registrar el 1011 insertando en esta tabla los datos necesarios en el
ambiente de producción.

Para consultar el nombre de los procesos se puede tomar como ejemplo la siguiente
consulta. (NOTA: Cambiar la letra I en la condición de like por la correspondiente al
negocio que pertenecerá el proceso)
select *

from sura_consultas.procesos_area_sujeto

where Nombre_Proceso_Desc like 'PI%'

Para registrar el proceso se puede hacer con la siguiente consulta, colocando los
valores correspondientes
INSERT INTO SURA_CONSULTAS.procesos_area_sujeto(Nombre_Proceso_Desc,Nombre_Area_Sujeto,De
scripcion_Proceso,Analista_Extraccion,Analista_Carga,Empleado_Id,Analista_Segundo,Job_Ext
raccion,Corriente_Extraccion,Job_Carga,Corriente_Carga,Complejidad_Desc,Cantidad_Pasos)

VALUES(

'PI140_SCENFM.sh',

'Materializada',

'Carga materializada de enfermeria de salud en casa',

'Oscar Andrés Zapata Rivera',

'Oscar Andrés Zapata Rivera',

25853763,

'Francisco Javier Estrada Acevedo',

'SCOI140_cga_SCENFM.sh',
'N/A',
'SCOI140_cga_SCENFM.sh',

'N/A',

'baja',

);

Luego de selecionar el codigo del proceso es importante comunicarle a los analistas


de A&BI pertenecientes al área que impacta el proceso mencionando que se usará
dicho código. Como medida adicional es recomendable realizar una busqueda tanto
en el servidor de producción como el de desarrollo con un grep o un find en caso de
que por descuido alguien no lo haya registrado.

Uso de Plantillín
Con el objetivo de simplificar y estandarizar la implementación de los procesos se
desarrolló Plantillín. Esta es una herramienta que genera plantillas para procesos de
carga, creación de sumarizadas y materializadas. Para usar la herramienta se debe
antes crear un archivo de formato LPS (Lenguaje Plantillín Sura) o JSON con los
parámetros necesarios según lo que se desee hacer. Al ejecutar Plantillín, el resultado
será una serie de archivos, por ejemplo:

 Script SQL de creación de tablas y vistas en Teradata.


 Script SCO y principal del proceso.
 Fichero de parámetros del proceso.
 Scripts de cada uno de los pasos que se usan para llevar a cabo la tarea
especificada.

La documentación de Plantillín es bastante extensa, a continuación se incluyen los


aspectos más importantes del formato LPS con propósitos aclarativos.

Un archivo de configuración está dividido en dos grandes secciones llamadas Detalle


del proceso y Especificación de la tabla

En el detalle del proceso se encuentran los campos mencionados a continuación

1. Proceso: Palabra que indica el inicio de la declaración de la información del


proceso.
2. [Número del proceso]: Código de 5 caracteres, empieza por la letra
relacionada con el negocio del proceso, en secciones anteriores de éste
documento se encuentran las instrucciones para obtenerlo.
3. [Nombre del proceso]: Código de 6 letras que referencian el proceso.
4. [Nombre del analista]: Nombre de quien crea el proceso
5. desde bloque [N]: Hace referencia al bloque de pasos desde el cual
comenzará el proceso, en lo general es el bloque 1 (desde el paso 100) para
procesos nuevos.
6. [sin|con] paso end: indica si se quiere tener paso end o no, es el paso
encargado de borrar las tablas temporales creadas por el proceso.
7. [sin|con] reporte de errores: Indica si se debe crear el paso x08 encargado
del reporte de errores.

En un proceso pueden especificarse varias tablas, lo más frecuente es especificar


solo una. La especificación de una tabla tiene el siguiente formato:

1. Tabla: Indica que se iniciará la descripción de una tabla.


2. [Base de datos].[Nombre de la tabla]:Aquí se debe poner el nombre de la
base de datos y de la tabla que almacenará la información (se conoce como la
final).
3. Vista: Indica que se especificará el nombre de la vista
4. [Nombre de la vista]: Se indica nombre de la vista según el formato indicado
en el documento de estándares de nombramiento de Teradata. Plantillín
generará los scripts de creación de las vistas en las bases de datos
correspondientes.
5. [Tipo del bloque]: El tipo del bloque indica la operación que se realizará con
esa tabla, las opciones son:
o Carga archivo: Indica que se cargará un archivo, dicho archivo debe
estar en la ruta /home/dwh/datos/tivoli y su nombre deberá empezar con
A, seguida por la letra representativa del negocio y el código numérico
del proceso. EJ: AI1234. Se incluye el paso 100.
o Carga temporal: En este tipo de carga se asume que hay una temporal
con la información que se desea guardar en la final.
o Sumarizada: Crea los pasos necesarios para insertar la información
que se ha sumarizado en la tabla final.
o Materializada: Solo se genera el paso 111 para que se llene con la
lógica de la creación de la materializada.
6. [sin|con] inconsistencias: Incluye el paso 109 y la lógica básica para el
manejo de inconsistencias.
7. [sin|con] historia: Se usa para la creación de tablas con historia, en la
actualidad no se encuentra implementada.
8. [separador]: En caso de ser una carga de archivos, aquí se debe especificar el
separador de las columnas en el archivo plano.
9. [sin|con] duplicados: Indica si se debe verificar o no registros duplicados, la
lógica es agregada en el paso 990.
10. [sin|con] estadisticas: Indica si se deben generar estadísticas al final del
proceso, Nota: En general no es buena práctica activar esta opción, por
política de la empresa las estadísticas se calculan en un momento determinado
para todas las tablas.

A continuación un ejemplo de lo explicado hasta ahora:


Proceso D1234 AYUDDX "José Alexander Rivas Quintero", desde bloque 1, con paso end, sin r
eporte de errores

tabla EDW_DATA.DIN_AYUDAS_DX, vista VE_DIN_AYUDAS_DX, carga archivo, con inconsistenc


ias,
sin historia, separador "~{<", con duplicados, sin estadisticas
El siguiente paso consiste en la definición de los campos de la tabla de stage y su
relación con la final, en caso de ser una carga de archivo, debe coincidir con la
estructura del mismo. La definición es una lista de campos donde el guión ('-') es la
marca que indica un nuevo campo. Luego del guión se debe especificar la siguiente
información:

1. [Nombre del campo]: Es el nombre que tiene el nuevo campo y que debe
seguir los estándares de nombramiento de la compañía.
2. [Tipo del dato]: Define el tipo de dato que se almacenará en este campo y
debe coincidir con los formatos aceptados por Teradata, Ejemplo:
VARCHAR(20), TIMESTAMP(0), INTEGER.
3. [Configuración en stage]: Debe estar entre paréntesis, aquí se indica como
se comporta este campo en la tabla temporal, allí puede tener un nombre y tipo
de dato diferente al de la final, adicionalmente es posible indicar si será
primario o no. Ejemplos:
o (EN STAGE)
o (EN STAGE PRIMARIO)
o (EN STAGE Fecha_Sale DATE)
o (EN STAGE Valor_Pago DECIMAL(18,9) PRIMARIO)
4. [Configuración en la tabla final]: Indica si el campo llegará a la tabla final y
en caso tal de hacerlo, se puede indicar si es parte del índice primario.
Ejemplos:
o LLEVAR A TABLA FINAL COMO PRIMARIO
o LLEVAR A TABLA FINAL
o NO LLEVAR A TABLA FINAL
5. ([Configuraciones adicionales]): Son configuraciones extras que se le
pueden dar a la definición del campo en Teradata, uno de los más importantes
puede ser COMPRESS. Ejemplo:
o ("COMPRESS -1")

A continuación se ilustra la definición de campos mediante un ejemplo:


- Codigo_Ayuda_Op VARCHAR(20) (EN STAGE PRIMARIO) LLEVAR A TABLA FINAL COMO PRIMARIO

- Ind_POS CHAR(1) NO LLEVAR A FINAL


- Valor_Ayuda DECIMAL (19,4) LLEVAR A LA TABLA FINAL

- Codigo_Tipo_Ayu_Op VARCHAR(20) NO LLEVAR A TABLA FINAL ("COMPRESS -1")

Hasta ahora se ha visto lo básico de Plantillín, existen otras configuraciones


adicionales cuyo uso es altamente recomendable en pro de facilitar el desarrollo del
proceso y reducir la probabilidad de cometer un error. Esta configuración adicional es
la definición de los cruces (JOIN) que se deben hacer con otras tablas. Una tarea
frecuente es cruzar con un catálogo por medio del código operativo (que
generalmente es una clave en el transaccional) para obtener el ID interno que se usa
en Teradata para dicho catálogo y con el que se harán cruces constantemente.

Luego de especificar todos los campos de la tabla, para especificar un cruce se deben
incluir en el archivo de configuración las siguientes entradas:
1. [Tipo de cruce]: Se debe indicar un tipo de cruce de los soportados por
Teradata. Por ejemplo, LEFT JOIN, INNER JOIN.
2. [Base de datos].[Nombre de la tabla]: Se especifica la base de datos y el
nombre de la tabla con la que se quiere hacer JOIN (NOTA: Generalmente se
hace JOIN con las vistas).
3. CRUZAR POR: Indica que se iniciará la lista de los campos por los que se hará
el cruce.
4. [Condiciones del cruce]: Se deben listar las condiciones para hacer el cruce y
que quedarán en la sección ON del JOIN, en caso de ser campos homónomos
se puede poner solo una vez el nombre del campo. Multiples condiciones del
cruce deben ir separadas por el conector 'y' Ejemplos:
o (Temp.Codigo_Tipo_Ayu_Op != TIP.Codigo_Tipo_Ayu_Op)
o (Codigo_Ciudad_Op y Codigo_Departamento_Op)
o (Codigo_Ayuda_Op y Temp.Codigo_Sucursal_Atiende_Op =
AYU.Codigo_Sucursal_Op) Nota: En la actualidad no se soporta
condiciones con valores estáticos o 'quemados', los mismos deben ser
agregados al final en el paso 111.
5. [Lista de campos que serán incluidos en la final]: Es una lista de campos,
cada línea debe iniciar con guión seguido por el nombre del campo que se
traerá, adicionalmente se puede especificar un alias (nombre que tendrá en la
tabla final), el tipo del dato o si será primario en la tabla final. Ejemplo:
o - Tipo_Ayu_Id INTEGER PRIMARIO EN LA FINAL
o - Cliente_Id BIGINT NO PRIMARIO EN LA FINAL
o - Sucursal_Id AS Sucursal_Atiende_Id BIGINT

Generación de Clave Subrogada o IDs propios para Teradata Es una buena


practica crear IDs propios para las Tablas que se van a cargar en Teradata, Plantillin
nos ayuda con la generación de un ID númerico auto-incremental. En este caso se
debe hacer un cruce con la misma tabla que se está cargando por medio de la PK que
se encuentra en el transaccional (Generalmente es el Codigo OP). Además se debe
definir un Campo que va a ser el identificador unico por registro y posteriormente debe
utilizarse la expresión "ID INCREMENTAL". Vale la pena aclarar que el nombre del
campo seleccionado como el nuevo ID NO debe coincidir con el nombre de un campo
ya definido anteriormente en el LPS. Ejemplo:
Proceso ....

tabla EDW_DATA.IPS_HOSPITALIZACION, vista VE_IPS_HOSPITALIZACION, ....

- Codigo_Hospitalizacion_Op VARCHAR(20) (EN STAGE PRIMARIO)

- Ind_POS CHAR(1) NO LLEVAR A FINAL

...

JOIN MDB_CONSULTAS.VE_IPS_HOSPITALIZACION hos

Cruzar Por ( Codigo_Hospitalizacion_Op )

- Hospitalizacion_Id INTEGER ID INCREMENTAL


Con el objetivo de sintetizar el conocimiento, a continuación podrá encontrar el
ejemplo completo de un archivo de configuración de Plantillín, en este caso para una
carga de archivo:
Proceso I0988 INDASIS "Daniel Sepulveda", desde bloque 1, sin paso end, sin reporte de er
rores

tabla sura_consultas.Asistencia_Metas_Grupo_Costo, vista VPs_Asistencia_Metas_Grupo_C


osto, carga archivo, sin inconsistencias,

sin historia, separador "<;)", sin duplicados, con estadisticas

/* Acá se definen los campos de la stage */

- Mes_Id INTEGER (En Stage Mes VARCHAR(10) PRIMARIO)

- Codigo_Grp_Costo_Asistencia_Op VARCHAR(10) (En stage primario)

- Valor_Costo_Medio DATE LLEVAR A TABLA FINAL COMO PRIMARIO

- Valor_Meta_Costo_Medio TIMESTAMP(0) LLEVAR A TABLA FINAL ("COMPRESS -1")

/* Luego se definen los cruces */

LEFT JOIN MDB_CONSULTAS.V_MES_ANO_COMPLETO Mes

Cruzar por (Mes = Mes_Id)

- Mes_Id INTEGER

INNER JOIN MDB_CONSULTAS.Vista_cruzar Asis

Cruzar por (Codigo_Grp_Costo_Asistencia_Op)

- Grp_Costo_Asistencia_Id As Grupo_Costo_Id DECIMAL(18, 0) PRIMARIO EN LA FIN


AL

Para más información sobre Plantillín visite el siguiente enlace:


http://inboggit01.suramericana.com.co:8080/gitbucket/BI/Plantillin

En caso de tener dudas sobre los conceptos propios de Teradata, podrá encontrar
una guia en el siguiente enlace:
http://inboggit01.suramericana.com.co:8080/gitbucket/BI/Tutoriales

Ejecución de Plantillín
Despues de realizar el archivo de configuración de Plantillín como se presentó
anteriormente se debe ejecutar el programa para que se generen los archivos. Para
esto se debe abrir una terminal/consola y ubicarse en el directorio donde está
localizado Plantillín y ejecutarlo especificando el nombre del archivo de configuración.
A continuación se muestra un ejemplo de la ejecución, en este caso el archivo de
configuración se llama conf2.lps.
plantillin.bat conf2.lps
Al realizar esta ejecución se crea una carpeta llamada output, y esta contiene todos
los archivos generados.

Herramientas de trabajo (CA,editor,filezila,tivoli,Teradata y 5)

Incidentes de procesamiento (ETL)


- Verificación (que este activo,que sea de nuestra área)
- revisión en el Python del proceso que falla
- para luego buscarlo en el filezila
- descargarlo al editor de texto para revisar en que fallo
- en la corriente
- una vez se sepa, se revisa que tipo de proceso se maneja de ejecución si es por calendario
o no
- si llega a ser por calendario se debe mandar unos requerimientos a ibm con la solución del
problema para que allí lo ejecuten con la fecha actual nuevamente
- si no es de calendario simplemente se revisa el día posterior al error a ver si sigue fallando
- se mira el error en el editor de texto
- luego se revisa el error en el query y se lleva a la Teradata para validar donde esta el error
- una vez encntrado el error se corrige y se hace un reporte de este
- si ya esta ok simplemente se cierra el caso.
-

Se recomienda hacer una tabla de incidentes – cerrados y transferidos

También podría gustarte