redshift quicksight pricing espaƱol athena amazon-redshift

amazon-redshift - quicksight - amazon s3



Declarar una variable en RedShift (5)

SQL Server tiene la capacidad de declarar una variable, y luego llamar a esa variable en una consulta de esta manera:

DECLARE @StartDate date; SET @StartDate = ''2015-01-01''; SELECT * FROM Orders WHERE OrderDate >= @StartDate;

¿Funciona esta funcionalidad en el RedShift de Amazon? De la documentation , parece que DECLARE se utiliza únicamente para cursores. SET parece ser la función que estoy buscando, pero cuando intento usarla, aparece un error.

set session StartDate = ''2015-01-01''; [Error Code: 500310, SQL State: 42704] [Amazon](500310) Invalid operation: unrecognized configuration parameter "startdate";

¿Es posible hacer esto en RedShift ?


Ahora puede usar funciones definidas por el usuario (UDF) para hacer lo que quiera:

CREATE FUNCTION my_const() RETURNS CSTRING IMMUTABLE AS $$ return ''my_string_constant'' $$ language plpythonu;

Desafortunadamente, esto requiere ciertos permisos de acceso en su base de datos de corrimiento al rojo.


En realidad, puede simular una variable utilizando una tabla temporalmente, crear una, establecer datos y listo.

Algo como esto:

CREATE TEMP TABLE tmp_variables AS SELECT ''2015-01-01''::DATE AS StartDate, ''some string'' AS some_value, 5556::BIGINT AS some_id; SELECT * FROM Orders WHERE OrderDate >= (SELECT StartDate FROM tmp_variables);

La tabla temporal se eliminará después de la ejecución de la transacción.
Las tablas temporales están vinculadas por sesión (conexión), por lo tanto no se pueden compartir entre sesiones.


La respuesta de Slavik Meltser es genial. Como una variación de este tema, también puede utilizar una construcción WITH:

WITH tmp_variables AS ( SELECT ''2015-01-01''::DATE AS StartDate, ''some string'' AS some_value, 5556::BIGINT AS some_id ) SELECT * FROM Orders WHERE OrderDate >= (SELECT StartDate FROM tmp_variables);


No, Amazon Redshift no tiene el concepto de variables. Redshift se presenta como PostgreSQL, pero está altamente modificado.

Se mencionaron las Funciones definidas por el usuario en la conferencia de AWS re: Invent de 2014, que podría satisfacer algunas de sus necesidades.

Actualización en 2016: las funciones definidas por el usuario de Scalar pueden realizar cálculos pero no pueden actuar como variables almacenadas.


Tenga en cuenta que si está utilizando el cliente psql para consultar, las variables psql todavía se pueden usar como siempre con Redshift:

$ psql --host=my_cluster_name.clusterid.us-east-1.redshift.amazonaws.com / --dbname=your_db --port=5432 --username=your_login -v dt_format=DD-MM-YYYY # select current_date; date ------------ 2015-06-15 (1 row) # select to_char(current_date,:''dt_format''); to_char ------------ 15-06-2015 (1 row) # /set AUTOCOMMIT = ''on'' ... dt_format = ''DD-MM-YYYY'' ... # /set dt_format ''MM/DD/YYYY'' # select to_char(current_date,:''dt_format''); to_char ------------ 06/15/2015 (1 row)