30/5/17

Dataframes

Los dataframes son un tipo de datos en R que sirven para almacenar datos tabulares.

Se representa como un tipo especial de lista donde cada elemento de esta tiene la misma longitud.

La forma de tabular los dataframes nos puede recordar a una matriz, pero hay que tener en cuenta que una matriz es un tipo especial de vector, tiene la limitación de que todos los tipos que se encuentran en la matriz tienen que tener el mismo tipo. En cambio en un dataframe esto no es necesario, como es una especie de lista, cada columna puede tener un tipo distinto.

En los dataframe cada columna puede tener un nombre al igual que cada renglón row.name y col.name.

¿Como podemos crear un dataframe?


  • data.frame()

  • read.csv()    De esta forma leeríamos de un fichero.
  • read.table() De esta forma leeríamos de una tabla

Algunas sentencias que nos pueden ser útiles:



Podemos poner nombres a las listas, a los vectores, a las matrices a los dataframes ...  pero este tema lo veremos en una nueva entrada próximamente.

Vectores en R

Podemos crear vectores en R de dos formas distintas, asignando directamente los valores a una variable con "c" delante o utilizando la palabra reservada vector:



Una de las diferencias es que al crearlo con la palabra reservada vecrtor, hay que indicarle el tipo de vector que va a ser y el tamaño.


Matrices

Las matrices en R no son más que un tipo de vector con un atributo especial dimensión., que indica el número de renglones (filas) y columnas.

Creación de una matriz vacía

Para crear una matriz utilizamos la palabra reservada matrix, indicamos las filas y columnas con nrow y ncol.


Para saber la dimensión de una matriz podemos utilizar dim() y sus atributos con attributes().

Hay que tener en cuenta que las matrices se rellenan por columnas y de izquierda a derecha, a diferencia de C que se hace linea a linea de izquierda a derecha. Esto es importante saberlo para cuando queramos volcar un vector a una matriz.




Existen las palabras reservadas cbind y rbind para crear una matriz partiendo de diferentes vectores, con cbind se colocará cada vector como columna y con rbind se colocara cada vector como fila.


Listas

Las listas en R son un tipo especial de vector que puede contener elementos de diferentes clases.





Introducción a R

R es un lenguaje de programación orientado al análisis estadístico. Destaca porque lo que mejor sabe hacer es analiza datos. Algunas ventajas de R:


  • R al estar orientado a las estadísticas, proporciona un amplio abanico de herramientas. 
  • Entre otras características de R, podemos nombrar su capacidad gráfica, que permite generar gráficos con alta calidad, con sólo utilizar las funciones de graficación. 
  • R también puede usarse como herramienta de cálculo numérico y a la vez ser útil para la minería de datos.


Las típicas definiciones de R nos suelen explicar que es una implementación de software libre del lenguaje S pero con soporte de alcance estático. Se trata de uno de los lenguajes más utilizados en investigación por la comunidad estadística, siendo además muy popular en el campo de la minería de datos, la investigación biomédica, la bioinformática y las matemáticas financieras. A esto contribuye la posibilidad de cargar diferentes bibliotecas o paquetes con funcionalidades de cálculo y gráficas.

R es parte del sistema GNU y se distribuye bajo la licencia GNU GPL. Está disponible para los sistemas operativos Windows, Macintosh, Unix y GNU/Linux.

Seguiremos ampliando esta entrada en los próximos días.

10/8/16

Tablas de auditoria de Teradata

Tabla de auditoria para consultar las sentencias ejecutadas en teradata:

 lock row access
select top 100 *
from dbc.dbqlogtbl
where cast(startTime as date) = date
--and appId = 'bteq'
   and clientid 'NAME_DATA_BASE'
--and queryText like '%UPDATE AHOIS_NEW%'

order by startTime


Tablas y vistas por base de datos:
select    *
from       dbc.tables
where    tablekind in ('V','T')
   --and tablename like '%%' 
    and         databasename = 'NAME_DATA_BASE';       



Para consultar el espacio total y el ocupado:
SELECT               *
FROM   dbc.diskSpace;

Podemos comprobar el espacio de la base de datos agrupando de esta manera:

SELECT              
SUM (currentperm)/1024/1014/1024 AS espacio_ocupado_GB
,SUM (MAXPERM)/1024/1014/1024 AS espacio_TOTAL_GB
, espacio_TOTAL_GB - espacio_ocupado_GB AS espacio_libre_GB
, 100 * espacio_ocupado_GB /espacio_TOTAL_GB AS porcentaje
,databaseName
FROM   dbc.diskSpace 
WHERE TRIM(databaseName) = 'NAME_DATA_BASE'
GROUP                BY 5;


Espacio que ocupa una tabla dela base de datos:

 select
 databasename
 ,tablename
 , sum (currentPerm)
 , sum (currentPerm)/1024/1024/1024 as currentPermGB
  from
  dbc.tablesize
  where --tablename like  '%%' AND
    TRIM(databaseName) = 'NAME_DATA_BASE'
  group by 1,2
  order by currentPermGB desc


Iremos actualizando esta entrada con mas tablas de auditorias proximamente.


13/7/16

Conexión desde UNIX a BBDD

Conexión a TERADTA desde UNIX:

Ejecutamos: bteq 


Ahora ejecutariamos: .logon 11.111.111.111/Esquema.

Nos pedirá la password:



Al introducir la password,





En este momento ya podríamos realizar una consulta o lanzar una bteq.
Para generar desde un fichero, lo haríamos de la siguiente forma:
.run FILE=./drop_view.sql

Conexión a SQLPLUS desde UNIX:

En este caso basta con ejecutar:
Ø  sqlplus IP_MAQUINA/password@esquema

Si el login es correcto, ya nos aparecerá el prompt de sqlplus.





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