Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-红移SQL查询中的动态变量_Python_Amazon S3_Amazon Redshift_Psycopg2 - Fatal编程技术网

Python-红移SQL查询中的动态变量

Python-红移SQL查询中的动态变量,python,amazon-s3,amazon-redshift,psycopg2,Python,Amazon S3,Amazon Redshift,Psycopg2,我正在python环境中开发,我想使用psycopg2 假设在.sql文件中有以下UNLOAD命令: UNLOAD ( ' Some SQL Query ' ) TO 's3://%PATH%' ... 在sql文件中,%PATH%应该是明确的,比如:'folder1/folder3/file\u name' 但是我希望python程序在运行时设置这个%PATH%。这意味着.sql文件包含类似于%PATH%的内容,并且仅在运行时设置 知道怎么做吗?您将无法在运行时动态设置卸载路径,但是您可以

我正在python环境中开发,我想使用
psycopg2

假设在.sql文件中有以下UNLOAD命令:

UNLOAD 
(
'
Some SQL Query
'
)
TO 's3://%PATH%'
...
在sql文件中,
%PATH%
应该是明确的,比如:
'folder1/folder3/file\u name'

但是我希望python程序在运行时设置这个
%PATH%
。这意味着.sql文件包含类似于
%PATH%
的内容,并且仅在运行时设置


知道怎么做吗?

您将无法在运行时动态设置卸载路径,但是您可以将SQL语句放入类似于shell/python脚本的脚本中,在该脚本中可以创建具有所需路径的变量,然后将它们传递到查询中


如果您决定使用python脚本,AWS的UNLOAD实用程序将帮助您开始使用。以这种方式实现它将给您带来困难

最好的方法是将文件转储到静态位置:

UNLOAD 
(
'
Some SQL Query
'
)
TO 's3://path/to/static/s3_bucket'
...
然后使用(通过shell脚本/或为任何其他脚本选择合适的命令)

aws s3 mv$源$目的地

在这里,您可以为
$destination
传递任何值,该值可以在运行时轻松填充

简而言之,您已经将文件转储到s3中的一个固定位置(使用 卸载)并将其移动到您选择的位置或某个位置 在运行时填充(使用aws s3 mv…)

您只需在SQL文件中指定一个,然后使用一个format命令

像这样创建文件

UNLOAD ('Some SQL Query')
TO 's3://{bucket}/{key}'
并像python一样使用此文件

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

为什么不使用静态部分作为字符串和外部变量的文件名来解析查询呢?然后您就可以从命令行参数中分配这个变量,我希望这是一个更结构化的解决方案。因为当我打开并读取sql文件时,我只需编写类似“%PATH%=python\u var”的内容及其结束语。如何从python运行
aws s3 mv$source$destination
?在您的计算机上安装aws cli。您可以在以下位置找到一些帮助:这将帮助您使用cli中的s3存储桶。不过用了boto3,这正是我想要的。唉,我已经实现了另一个解决方案。但当我重构时,我肯定会将其更改为“替换字段”解决方案。谢谢