Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Shell 红移卸载脚本_Shell_Amazon Redshift - Fatal编程技术网

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上的bucket
  • 重命名(
    move
    )将日期/时间戳附加到文件名的文件
  • 这里,
    $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;