Python – Variable dinámica en Redshift SQL Query

Estoy desarrollando en un entorno de Python y quiero llamar a una consulta de SQL utilizando psycopg2

Digamos que tengo el siguiente comando UNLOAD en un archivo .sql:

 UNLOAD ( ' Some SQL Query ' ) TO 's3://%PATH%' ... 

En el archivo sql, %PATH% debe ser explícito como: 'folder1/folder3/file_name' .

Pero quiero que el progtwig python establezca este %PATH% en tiempo de ejecución. lo que significa que el archivo .sql contiene algo como %PATH% y se configurará solo en tiempo de ejecución.

¿Alguna idea de cómo hacerlo?

Simplemente especifique un campo de reemplazo en su archivo SQL, y use un comando de formato.

Crea tu archivo como este

 UNLOAD ('Some SQL Query') TO 's3://{bucket}/{key}' 

Y usa este archivo en python como

 template = open('file1.sql', 'r').read() query = template.format(bucket='mybucket', key='folder/file.csv') 

Implementarlo de esta manera te dará un tiempo difícil.

La mejor manera de hacerlo es volcar el archivo en una ubicación estática:

 UNLOAD ( ' Some SQL Query ' ) TO 's3://path/to/static/s3_bucket' ... 

y luego use (a través de un shellscript / u opte por un comando adecuado para cualquier otro script)

aws s3 mv $source $destination

Aquí, puede pasar cualquier valor para $destination que se pueda completar fácilmente durante el tiempo de ejecución.

En resumen, ha volcado el archivo en s3 en una ubicación fija (usando DESCARGAR) y lo ha movido a la ubicación de su elección o una ubicación que se completó en el tiempo de ejecución (usando aws s3 mv …)

No podría configurar dinámicamente la ruta de DESCARGA en el tiempo de ejecución, sin embargo, podría colocar su statement SQL en algo parecido a un script de shell / python donde puede crear variables con la ruta que desee y luego pasarlas a la consulta. .

Esta utilidad de DESCARGA de AWS lo ayudará a comenzar si decide utilizar un script de python.