Shell 红移卸载脚本
我有一个包含多个红移卸载语句的脚本Shell 红移卸载脚本,shell,amazon-redshift,Shell,Amazon Redshift,我有一个包含多个红移卸载语句的脚本 UNLOAD('SELECT * FROM test.products WHERE product_name LIKE \'%20160912%\'') TO 's3://test-bucket/products/20160912/prod_' CREDENTIALS 'XXXX' DELIMITER AS '|' parallel off; 有多种这样的说法。我想参数化日期,并在运行此脚本时传入日期。我该怎么做 脚本应该是这样的 UNLOAD('SELE
UNLOAD('SELECT * FROM test.products WHERE product_name LIKE \'%20160912%\'')
TO 's3://test-bucket/products/20160912/prod_'
CREDENTIALS 'XXXX'
DELIMITER AS '|' parallel off;
有多种这样的说法。我想参数化日期,并在运行此脚本时传入日期。我该怎么做
脚本应该是这样的
UNLOAD('SELECT * FROM test.products WHERE product_name LIKE \'%${DATE}%\'')
TO 's3://test-bucket/products/${DATE}/prod_'
CREDENTIALS 'XXXX'
DELIMITER AS '|' parallel off;
当我运行脚本时,是否有方法替换${DATE}。我知道红移中有PREPARE,但我认为它不能与Unload语句一起工作。另一个选项是编写shell脚本,并让shell脚本调用此SQL脚本。但是,在从命令行运行SQL脚本时,是否有更简单的方法只传递参数
提前感谢您的帮助 无法将参数传递给
UNLOAD
命令
PREPARE
语句仅适用于SELECT
、INSERT
、UPDATE
或DELETE
在将命令发送到Redshift之前,需要将所需参数插入到命令中。这可以通过bash脚本完成,如下所示:
psql ... "UNLOAD (SELECT * FROM ... WHERE date = '`date +%Y%m%d`')..."
这将替换当前日期(
date+%Y%m%d
)作为查询的一部分。您可以使用bash脚本向unload语句传递参数。从访问红移数据库集群的边缘节点为红移实例调用“psql”,并使用“-v”参数
例如:在调用SQL脚本的Bash脚本中:
$> curr_date=$(date +%F)
$> select_of_unload_stmt='SELECT * from myTable where column like \'$curr_date\''
$> psql -h <HostName> -p <Port_Number> -d <Database_Name> -U <User> -v RS_Script_Unload_Stmt="$select_of_unload_stmt" -v date_var="$curr_date" -f <Script_Containing_RS_Unload_Query.SQL>
尝试对脚本本身进行必要的更改,而不是在
unload
语句中包含某些内容
我所做的是:
aws s3 mv s3://[bucket\u name]/“$file\u name”。csv000 s3://[bucket\u name]/“$file\u name$from\u date”。csv
它所做的是:
unload
语句生成的文件填充s3上的bucketmove
)将日期/时间戳附加到文件名的文件$from_date
是一个变量,初始化为date--date='1天前'+'%Y-%m-%d'
UNLOAD (:RS_Script_Unload_Stmt) TO 's3://test-bucket/products/:date_var/prod_' CREDENTIALS 'XXXX' DELIMITER AS '|' parallel off;