to_date - ¿Cómo convertir epoch a datetime redshift?
datediff redshift (3)
Yo trabajo en Dbeaver. Tengo una mesa x.
La TABLA x tiene una columna "marca de tiempo"
1464800406459
1464800400452
1464800414056
1464800422854
1464800411797
El resultado que quiero:
Wed, 01 Jun 2016 17:00:06.459 GMT
Wed, 01 Jun 2016 17:00:00.452 GMT
Wed, 01 Jun 2016 17:00:14.056 GMT
Wed, 01 Jun 2016 17:00:22.854 GMT
Wed, 01 Jun 2016 17:00:11.797 GMT
Intenté la consulta de desplazamiento al rojo
SELECT FROM_UNIXTIME(x.timestamp) as x_date_time
FROM x
pero no funcionó
Se produjo un error:
Operación no válida: la función from_unixtime (variando el carácter) no existe
Yo tambien lo intenté
SELECT DATE_FORMAT(x.timestamp, ''%d/%m/%Y'') as x_date
FROM x
Se produjo un error:
Operación no válida: la función date_format (que varía el carácter, "desconocido") no existe
¿Hay algún error con la sintaxis? ¿O hay otra forma de convertir a fecha y hora legibles por humanos?
Gracias por adelantado
La solución más simple es crear la función from_unixtime()
:
CREATE OR REPLACE FUNCTION from_unixtime(epoch BIGINT)
RETURNS TIMESTAMP AS
''import datetime
return datetime.datetime.fromtimestamp(epoch)
''
LANGUAGE plpythonu IMMUTABLE;
Consulte la documentación de Redshift en UDF para más detalles.
Redshift no tiene la función from_unixtime (). Tendrá que usar la consulta de sql a continuación para obtener la marca de tiempo. Simplemente agrega el número de segundos a la época y regresa como marca de tiempo.
select timestamp ''epoch'' + your_timestamp_column * interval ''1 second'' AS your_column_alias
from your_table
UDF va a ser bastante lento. Se comprobó el tiempo de ejecución para 3 soluciones y 1k filas.
El más lento -
-- using UDF from one of the answers
SELECT from_unixtime(column_with_time_in_ms/ 1000)
FROM table_name LIMIT 1000;
00:00:02.348062s
ejecución : 00:00:02.348062s
Segundo mejor
SELECT date_add(''ms'',column_with_time_in_ms,''1970-01-01'')
FROM table_name LIMIT 1000;
00:00:01.112831s
ejecución : 00:00:01.112831s
Y el más rápido -
SELECT TIMESTAMP ''epoch'' + column_with_time_in_ms/1000 *INTERVAL ''1 second''
FROM table_name LIMIT 1000;
00:00:00.095102s
ejecución : 00:00:00.095102s
stl_query
de ejecución calculado a partir de stl_query
-
SELECT *
,endtime - starttime
FROM stl_query
WHERE querytxt ilike(''%table_name%limit%'')
ORDER BY starttime DESC;