30/5/16

Ahorrar espacio en Teradata

Vamos a ver algunos ejemplos de tipos de datos con los que podemos aprovechar espacio.

Punto importante puede ser el tipo de timestamp que estamos guardando en una columna:

Es interesante tener en cuenta la diferencia entre timestamp(6) y timestamp(0).


select CURRENT_TIMESTAMP(6)


25/05/2016 10:32:35.570000

select CURRENT_TIMESTAMP(0)


25/05/2016 10:32:35

Un ejemplo claro es una columna del tipo S / N, necesita 3 bytes como VARCHAR , pero sólo 1 byte como CHAR.

Podemos ver que en la opción de timestamp(6) se esta almacenando también los milisegundos, rara vez vamos a necesitar guardar dicho dato, por lo que si prescindimos de ellos podemos ahorrar mucho espacio en base de datos.


Para pasar de timestamp(6) a timestamp(0)

CAST(CAST(FCH_REG_BBDD AS DATE) AS TIMESTAMP(0)) + (CAST(FCH_REG_BBDD AS TIME(6)) - TIME '00:00:00' HOUR TO SECOND)

Otro caso importante para ahorrar espacio en teradata puede ser, a la hora de almacenar un carácter en una columna.

Nunca debes crear el campo en teradata como varchar(1), siempre como char(1).
Un CHAR(n) necesita exactamente n bytes (Latin) o n*2 (UNICODE) mientras que VARCHAR siempre encesita 1 o 2 bytes para cada caracter almacenado, pero ademas necesita dos bytes adicionales para una especie de cabecera, que indica la longitud total.


 Nunca debes hacer  VARCHAR(1) en Teradata.

... próximamente añadiremos mas opciones para ahorrar espacio...

29/2/16

Funciones básicas de Teradata


Si ya has trabajado con oracle, pl/sql o algñun lenguaje base de datos parecida, te puedes defender más o menos en teradata. En este apartado vamos a ir viendo algunas funciones de Teradata que se diferencian de Oracle, pl/sql ...

Para realizar una consulta sobre una o varias tablas y evitar bloqueos en la misma, usaremos la siguiente sentencia:

- LOCKING ROWFOR ACCESS MODE NOWAIT Select * from tabla;

Por ejemplo el clásico NVL de oracle no existe como tal, pero tenemos la siguiente función:

La función que puede ser más semejante al NVL en teradata es la siguiente:
select COALESCE(null,1);
select COALESCE(3,1);

El primero caso retornaría un 1 y en elsegundo caso un 3.

Otra función que podemos destacar es:

- SELECT ZEROIFNULL(VAR);


Si queremos recuperar en una consulta un número concreto de registros, de esta forma recuperaríamos 100 registros solamente:

- SELECT top 100 * from tabla;



A la hora de trabajar en teradata con las fechas hay que tener mucho cuidado.

Un ejemplo para almacenar una fecha como decimal (o parte de una fecha):
extract(year from v_fecha) * 10000 + extract(month from v_fecha) * 100 + extract(day from v_fecha)

Es igual que hacer esta conversión:
 cast(v_fecha as int) + 19000000

A veces esto puede ser muy útil ya que el decimal ocupa menos espacio en base de datos que el varchar.

Iremos introduciendo poco a poco algunas funcionalidades de teradata.

Un saludo, muchas gracias

14/2/16

Comprimir / Descomprimir / Empaquetar / Desempaquetar


tar (tar)
Empaquetar
tar -cvf archivo.tar /archivo/mayo/*
Desempaquetar
tar -xvf archivo.tar
Ver el contenido (sin extraer)
tar -tvf archivo.tar

.tar.gz – .tar.z – .tgz (tar con gzip)
Empaquetar y comprimir
tar -czvf archivo.tar.gz /archivo/mayo/*
Desempaquetar y descomprimir
tar -xzvf archivo.tar.gz
Ver el contenido (sin extraer)
tar -tzvf archivo.tar.gz

.gz (gzip)
Comprimir
gzip -q archivo
(El archivo lo comprime y lo renombra como “
archivo.gz”)
Descomprimir
gzip -d archivo.gz
(El archivo lo descomprime y lo deja como “archivo”
Nota: gzip solo comprime archivos, no directorios

.bz2 (bzip2)
Comprimir
bzip2 archivo
bunzip2 archivo
(El archivo lo comprime y lo renombra como “
archivo.bz2”)
Descomprimir
bzip2 -d archivo.bz2
bunzip2
 archivo.bz2
(El archivo lo descomprime y lo deja como “archivo”)
Nota: bzip2 solo comprime archivos, no directorios

.tar.bz2 (tar con bzip2)
Comprimir
tar -c archivos | bzip2 > archivo.tar.bz2
Descomprimir
bzip2 -dc archivo.tar.bz2 | tar -xv
tar jvxf
 archivo.tar.bz2 (versiones recientes de tar)
Ver contenido
bzip2 -dc archivo.tar.bz2 | tar -tv

.zip (zip)
Comprimir
zip archivo.zip /mayo/archivos
Descomprimir
unzip archivo.zip
Ver contenido
unzip -v archivo.zip

.lha (lha)
Comprimir
lha archivo.lha /mayo/archivos
Descomprimir
lha -x archivo.lha
Ver contenido
lha -v archivo.lha
lha -l
 archivo.lha

.zoo (zoo)
Comprimir
zoo -a archivo.zoo /mayo/archivos
Descomprimir
zoo -x archivo.zoo
Ver contenido
zoo -v archivo.zoo
zoo -L
 archivo.zoo

.rar (rar)
Comprimir
rar a archivo.rar /mayo/archivos
Descomprimir
rar x archivo.rar
Ver contenido
rar -v archivo.rar
rar -l
 archivo.rar

UNIX trabajar con ficheros

Buenos días,  hoy vamos a presentar algunas utilidades de unix que nos pueden resultar muy útiles a la hora de trabajar con cargas ETL.


- Buscar cadenas en ficheros:


> grep -lri "INSERT INTO" **/ 


El parámetro -l le indica que imprima los nombres de archivos en los que se encuentre el texto solicitado. 
El parámetro -i, que ignore las mayúsculas y minúsculas. 
El parámetro -r, que busque en forma recursiva dentro de la ruta indicada.

 - Cuando queremos consultar alguna linea de un fichero:

> sed -n '1088,1089p' nombre_fichero


Con esta sentencia listaríamos las lineas 1088 y 1089 de dicho fichero.

- Mostrar las primeras o las últimas lineas de un fichero:

> head – 20 nombre_fichero
> tail – 20 nombre_fichero

Con head listamos las primeras lineas y con tail las últimas, en este caso 20 lineas.

21/7/15

DML y DDL

Es muy común hablar de sentencias DML y DDL, por lo que vamos a ver una breve explicación para aquellas personas que no han trabajado con estas tecnologías.
Para empezar tenemos que saber que las sentencias SQL se dividen en dos categorías DDL y DML, Lenguaje de Definición de Datos y Lenguaje de Manipulación de Datos.

-          DDL - Lenguaje de definición de datos: Las sentencias DDL se utilizan para crear y modificar la estructura de las tablas así como otros objetos de la base de datos.
o   CREATE - para crear objetos en la base de datos.
o   ALTER - modifica la estructura de la base de datos.
o   DROP - borra objetos de la base de datos.
o   TRUNCATE - elimina todos los registros de la tabla, incluyendo todos los espacios asignados a los registros.
o   Lenguaje de manipulación de datos (DML)
-          DDL - Lenguaje de manipulación de datos: son utilizadas para gestionar datos dentro de los esquemas.
o   SELECT - para obtener datos de una base de datos.
o   INSERT - para insertar datos a una tabla.
o   UPDATE - para modificar datos existentes dentro de una tabla.

o   DELETE - elimina todos los registros de la tabla; no borra los espacios asignados a los registros.

Índices

Los  índices son estructuras de datos opcionales asociadas a las tablas que mejoran la velocidad de las operaciones, permitiendo rápido acceso a los datos de una tabla.

Permiten incrementar de forma sombrosa la velocidad de ejecución de sentencias. Si sobre una columna se ha definido un índice, Oracle accede a este para obtener la dirección (ROWID) de los datos evitando el gran número de operaciones E/S a disco que requiere una búsqueda secuencial en una tabla.

Es necesario conocer los índices de una tabla para poder programar haciendo un uso más efectivo.

La creación de un índice mejora considerablemente la operación de recuperación de datos que puedan beneficiarse de la existencia del mismo. Aunque las operaciones de inserción y modificación se verán penalizadas por tener que actualizar también el índice. Por lo que es importante realizar un estudio para valorar los posibles beneficios frente a los posibles contra de crear un índice.

  • Los índices pueden crearse sobre uno o varios campos (índices concatenados),  estos índices pueden ser únicos o no. Un índice único hace que no se produzcan duplicidades de campo (o varios campos). 
  • Sobre una tabla pueden crearse varios índices.
  • Para elegir índices hay que tener en cuenta que:
    • No exista duplicidad de valores en el campo.
    • Que el campo tome un amplio rango de valores.
    • Evitar campos que puedan ser nulos.
  • Si tenemos un índice concatenado, hay que tener en cuenta el orden de los campos, ya que el primer campo será el más usado y el más efectivo. Cuando el programador realice joins en sentencias, debe aprovechar eficientemente los índices.

14/5/14

Selenium (JAVA)


Vamos a repasar un poco por encima algunas cosas que podemos realizar gracias a Selenium y una breve introducción para saber que es Selenium.

Selenium.

Es un conjunto de utilidades que facilita la labor de obtener juegos de pruebas para aplicaciones web. Permitiendo grabar, editar y depurar casos de prueba, que podrán ser ejecutados de forma automática e iterativa posteriormente.

Permite registrar acciones y editarlas manualmente, e incluso crearlas desde cero.

Esta basado en el uso de diferentes API's en diferentes lenguajes (PHP, Ruby, JAVA, Javascript, etc).

Entre sus principales características podemos nombrar:
  • Facilidad de registro y ejecución de los test. 
  • Referencia a objetos DOM en base al ID, nombre o a través de XPath. 
  • Auto-completado para todos los comandos. 
  • Las acciones pueden ser ejecutadas paso a paso. 
  • Herramientas de depuración y puntos de ruptura (breakpoints). 
  • Los test pueden ser almacenados en diferentes formatos. 

Introducción a XPath.

XPath es una especificación de la World Wide Web Consortium W3C, que facilita enormemente la navegación y la lectura a través de un documento XML.

Cuando comenzó la implantación de XML en los desarrollos, se inventaron infinidad de libreraias para parsear y acceder a los documentos XML, por lo que existen muchas librerias poco eficientes, cada una diferente en cuanto a filosofía y a tratamiento.

XPath tiene una filosofía muy simple, ya que se basa de utilizar expresiones al estilo de un path, como el de un directorio de disco, a través de los nodos del archivo XML. A ésto se le une una multitud de posibilidades, como búsqueda de ciertos elementos a partir de un valor o una máscara.

En la siguiente URL podemos ver algo de la sintaxis XPATH http://www.w3schools.com/XPath/xpath_syntax.asp

Selenium es compatible con la mayoría de navegadores:
  • Explorer 
  • Mozilla Firefox 
  • Google Chrome 
  • Safari 

Próximamente iremos añadiendo información sobre este tema.

Un saludo, gracias.