to_date redshift datetime amazon-redshift epoch

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;