Se ha muerto Johnny Winter…

17 julio \17\UTC 2014

Se ha muerto Johnny Winter, guitarrista salvaje y leyenda del blues y del rock.

Bye, bye illustrated man

Saludos.

Carlos


Teradata Express 15 for VMware disponible.

10 julio \10\UTC 2014

Teradata Express 15 for VMware (15.00.00.08) está disponible para descarga.

Se presenta en tres versiones a elegir:

  • TERADATA 15 sobre SLES 11 sin ViewPoint.
  • TERADATA 15 sobre SLES 10 con ViewPoint.
  • TERADATA 15 sobre SLES 10 sin ViewPoint.

No doy abasto…

Saludos.

Carlos

 


Una migración más…

6 junio \06\UTC 2014

Acabo de terminar una migración (otra más) de un Datawarehouse Oracle a Teradata (a propósito, si estás leyendo esto desde España seguramente tus datos están en ella).

Como van ya unas cuantas, espero que el señor Ellison no me declare su enemigo y mande a su amigo Iron Man a buscarme…

 

El amigo de Larry

El amigo de Larry

Irónicamente, el sistema operativo para los procesos de carga era Solaris:

/home/teradata > bteq

 Teradata BTEQ 14.10.00.09 for SOLARIS/SPARC. PID: 23200
 Copyright 1984-2014, Teradata Corporation. ALL RIGHTS RESERVED.
 Enter your logon or BTEQ command:

Saludos.

Carlos.


Calcular diferencias entre TIMESTAMPS

30 mayo \30\UTC 2014

Todos sabemos calcular la diferencia entre dos fechas:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (F_FIN - F_INICIO) "DIFF"
  FROM (SELECT DATE F_FIN, DATE - 1 F_INICIO) PRE;


 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

       DIFF
-----------
          1

Pero la cosa se complica si hablamos de TIMESTAMPS:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (F_FIN-F_INICIO) "DIFF"
  FROM (SELECT CURRENT_TIMESTAMP(0) F_FIN,
               CURRENT_TIMESTAMP(0) - INTERVAL '1' HOUR F_INICIO) PRE
;

 *** Failure 5407 Invalid operation for DateTime or Interval.
                Statement# 1, Info =0
 *** Total elapsed time was 1 second.

Para solucionar el problema se ven por ahí todo tipo de “técnicas” mediante el uso de EXTRACT() o, peor aun, mediante sucesivos CAST() a VARCHAR y demás triquiñuelas.
Pero la solución es mucho más fácil: todo se resume a que la diferencia entre TIMESTAMPS es siempre un ‘INTERVAL’ “genérico” que simplemente hay que definir mediante cualquiera de sus diferentes tipos:

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (F_FIN-F_INICIO) YEAR "YEAR",
       (F_FIN-F_INICIO) YEAR TO MONTH "YEARtoMONTH",
       (F_FIN-F_INICIO) MONTH "MONTH",
       (F_FIN-F_INICIO) DAY "DAY",
       (F_FIN-F_INICIO) DAY TO HOUR "DAYtoHOUR",
       (F_FIN-F_INICIO) DAY TO MINUTE "DAYtoMIN",
       (F_FIN-F_INICIO) DAY TO SECOND(0) "DAYtoSEC",
       (F_FIN-F_INICIO) HOUR "HOUR",
       (F_FIN-F_INICIO) HOUR(2) TO MINUTE "HOURtoMIN",
       (F_FIN-F_INICIO) HOUR(2) TO SECOND(0) "HOURtoSEC",
       (F_FIN-F_INICIO) MINUTE(2) "MIN",
       (F_FIN-F_INICIO) MINUTE(2) TO SECOND(0) "MINtoSEC",
       (F_FIN-F_INICIO) SECOND(4,0) "SEC"
  FROM (SELECT CURRENT_TIMESTAMP(0) F_FIN, 
               CURRENT_TIMESTAMP(0) - INTERVAL '1' HOUR F_INICIO) PRE
;


 *** Query completed. One row found. 13 columns returned.
 *** Total elapsed time was 1 second.

YEAR YEARtoMONTH MONTH DAY DAYtoHOUR  DAYtoMIN     DAYtoSEC HOUR HOURtoMIN HOURtoSEC MIN MINtoSEC   SEC
---- ----------- ----- --- --------- --------- ------------ ---- --------- --------- --- -------- -----
   0        0-00     0   0      0 01   0 01:00   0 01:00:00    1      1:00   1:00:00  60    60:00  3600

Simplemente hay que poner atención en las precisiones y los fraccionales de los tipos para evitar desbordamientos (Failure 7453 Interval field overflow.):

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (F_FIN-F_INICIO) SECOND "SECOND"
  FROM (SELECT CURRENT_TIMESTAMP(0) F_FIN, 
               CURRENT_TIMESTAMP(0) - INTERVAL '1' HOUR F_INICIO) PRE
;

 *** Failure 7453 Interval field overflow.
                Statement# 1, Info =0
 *** Total elapsed time was 1 second.

 BTEQ -- Enter your SQL request or BTEQ command:
SELECT (F_FIN-F_INICIO) SECOND(4,0) "SECOND"
  FROM (SELECT CURRENT_TIMESTAMP(0) F_FIN,
               CURRENT_TIMESTAMP(0) - INTERVAL '1' HOUR F_INICIO) PRE
;


 *** Query completed. One row found. One column returned.
 *** Total elapsed time was 1 second.

SECOND
------
  3600

…and that’s all.

Saludos.

Carlos.


¡¡La Décima!!

25 mayo \25\UTC 2014

De la agonía al éxtasis en minutos. La Champions. La Décima. Sublime. Histórico. Felicidad.

20140525-174603.jpg

Saludos.

Carlos.


Now listening to…

14 mayo \14\UTC 2014

Sue Foley: New Used Car.

Blues eléctrico, guitarrero y sexy.

Saludos.

Carlos.


There’s a new kid in town…

27 abril \27\UTC 2014

Hadoop lleva siendo en niño bonito del Big Data casi desde el principio, pero parece que ahora le ha salido un rival más joven y más guapo…

Apache Spark es un nuevo producto construído sobre el sistema de ficheros distribuídos de hadoop (HDFS-Hadoop Distributed File System) y otros (HBase…) y que promete velocidades de relámago (lightning fast) en el procesamiento complejo de análisis de datos (data analytics). Lleva un motor similar (pero distinto) a MapReduce y que aprovecha al máximo el almacenamiento de datos intermedios en memoria, siendo idóneo para tareas iterativas.

Las diferencias más importantes y la base de su asombrosa velocidad es que los resultados intermedios de los procesos pueden ser almacenados “in memory” y compartidos con otras tareas corriendo en paralelo (en especial en procesos multi-stage). Donde MapReduce debe replicar, serializar y leer y escribir a disco, spark coloca los resultados de los procesos en memoria. La base del asunto está en colecciones que pueden ser “cacheadas” en memoria entre diferentes nodos (Resilient Distributed Datasets). Además, diferentes procesos pueden acceder a ellas en paralelo. Anuncian velocidades “40x” sobre hadoop (¡!).

Shark es su motor de consulta, que es un “port” de Apache Hive, y que promete mejoras en la velocidad de hasta 100 veces (¡!) con respecto a hive/hadoop.

Entre sus ventajas están el particionamiento de información y el almacenamiento de los datos en columnas (como arrays de datos de tipos simples) en vez de colecciones de objetos java.

Apache Spark puede bajar con su documentación desde aquí.

Shark se puede bajar desde aquí.

Así que, como decían los Eagles, “There’s a new kid in town“…

Saludos.

Carlos.


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 44 seguidores