我刚刚在 Amazon AWS 上创建了一个帐户,我将使用 DATAPIPELINE 来安排我的查询。是否可以使用数据管道的 SQLACTIVITY 从 .sql 文件运行多个复杂的 SQL 查询?
我的总体目标是使用数据管道中的 sql 查询处理来自 REDSHIFT/s3 的原始数据并将其保存到 s3。这是可行的方法吗?
在这方面的任何帮助将不胜感激。
我刚刚在 Amazon AWS 上创建了一个帐户,我将使用 DATAPIPELINE 来安排我的查询。是否可以使用数据管道的 SQLACTIVITY 从 .sql 文件运行多个复杂的 SQL 查询?
我的总体目标是使用数据管道中的 sql 查询处理来自 REDSHIFT/s3 的原始数据并将其保存到 s3。这是可行的方法吗?
在这方面的任何帮助将不胜感激。
是的,如果您计划将数据从 Redshift 移动到 S3,您需要执行以下UNLOAD
命令:http: //docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html
sql 查询的输入将是单个数据节点,输出将是单个数据文件。数据管道仅提供一个“选择查询”字段,您将在其中编写提取/转换查询。我不认为有多个查询文件的任何用例。
但是,如果您想让您的管道可配置,您可以通过在管道定义 JSON 中添加“参数”和值对象来使您的管道可配置。
{
"objects":[
{
"selectQuery":"#{myRdsSelectQuery}"
}
],
"parameters":[
{
"description":"myRdsSelectQuery",
"id":"myRdsSelectQuery",
"type":"String"
}
],
"values":{
"myRdsSelectQuery":"Select Query"
}
}
如果要执行和调度多个 sql 脚本,可以使用 ShellCommandActivity。
我设法使用以下 AWS 数据管道配置执行具有多个插入语句的脚本:
{
"id": "ExecuteSqlScript",
"name": "ExecuteSqlScript",
"type": "SqlActivity",
"scriptUri": "s3://mybucket/inserts.sql",
"database": { "ref": "rds_mysql" },
"runsOn": { "ref": "Ec2Instance" }
}, {
"id": "rds_mysql",
"name": "rds_mysql",
"type": "JdbcDatabase",
"username": "#{myUsername}",
"*password": "#{*myPassword}",
"connectionString" : "#{myConnStr}",
"jdbcDriverClass": "com.mysql.jdbc.Driver",
"jdbcProperties": ["allowMultiQueries=true","zeroDateTimeBehavior=convertToNull"]
},
重要的是允许 MySql 驱动程序执行多个查询,allowMultiQueries=true
并且脚本 s3 路径由提供scriptUri