运行 SQL 使用 AMAZON 数据管道进行多个复杂查询的脚本文件

Run SQL script file with multiple complex queries using AMAZON datapipeline

我刚刚在 Amazon AWS 上创建了一个帐户,我将使用 DATAPIPELINE 来安排我的查询。是否可以使用数据管道的 SQLACTIVITY 从 .sql 文件中 运行 多个复杂的 SQL 查询?

我的总体 objective 是使用来自数据管道的 sql 查询处理来自 REDSHIFT/s3 的原始数据并将其保存到 s3。这是可行的方法吗?

在这方面的任何帮助将不胜感激。

是的,如果您计划将数据从 Redshift 移动到 S3,则需要执行此处的 UNLOAD 命令:http://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

您的 sql 查询的输入将是单个数据节点,输出将是单个数据文件。数据管道仅提供一个 "Select query" 字段,您可以在其中编写 extraction/transformation 查询。我认为没有多个查询文件的用例。

但是,如果您想让管道可配置,可以通过在管道定义中添加 "parameters" 和值对象来使管道可配置 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

提供