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
Amazon s3 AWS:通过amazon数据管道将数据从S3传输到Redshift,实现复制以外的其他功能_Amazon S3_Amazon Redshift_Amazon Data Pipeline - Fatal编程技术网

Amazon s3 AWS:通过amazon数据管道将数据从S3传输到Redshift,实现复制以外的其他功能

Amazon s3 AWS:通过amazon数据管道将数据从S3传输到Redshift,实现复制以外的其他功能,amazon-s3,amazon-redshift,amazon-data-pipeline,Amazon S3,Amazon Redshift,Amazon Data Pipeline,我正在尝试使用Amazon数据管道工具将数据从AmazonS3云传输到AmazonRedshift 传输数据时是否可以使用SQL语句等更改数据,以便只将SQL语句的结果输入到红移 我只发现复制命令如下: { "id": "S3Input", "type": "S3DataNode", "schedule": { "ref": "MySchedule" }, "filePath": "s3://example-bucket/source/inputfil

我正在尝试使用Amazon数据管道工具将数据从AmazonS3云传输到AmazonRedshift

传输数据时是否可以使用SQL语句等更改数据,以便只将SQL语句的结果输入到红移

我只发现复制命令如下:

  {
    "id": "S3Input",
    "type": "S3DataNode",
    "schedule": {
    "ref": "MySchedule"
  },
  "filePath": "s3://example-bucket/source/inputfile.csv"
},

来源:

在RedshiftCopyActivity中有一个名为“transformSql”的可选字段

我个人没有使用过这个,但从外观上看,它似乎是-您将处理临时表中的s3数据,并且这个sql stmt将返回转换后的数据,以便进行红移插入


因此,您需要在列表中列出所有字段,以选择是否转换该字段。

在RedshiftCopyActivity中有一个名为“transformSql”的可选字段

我个人没有使用过这个,但从外观上看,它似乎是-您将处理临时表中的s3数据,并且这个sql stmt将返回转换后的数据,以便进行红移插入


因此,您需要在列表中列出所有字段,以选择是否转换该字段。

是的,这是可能的。有两种方法:

  • 使用的
    transformSQL
  • transformSQL
    如果在及时加载的记录范围内(例如每天或每小时)执行转换,则非常有用。这样,更改只应用于批处理,而不应用于整个表

    以下是文件的摘录:

    transformSql:用于转换输入数据的SQL选择表达式。当您从DynamoDB或amazons3复制数据时,AWS数据管道会创建一个名为staging的表,并在其中加载它。此表中的数据用于更新目标表。如果指定了transformSql选项,则将从指定的SQL语句创建第二个暂存表。然后在最终目标表中更新第二个暂存表中的数据。因此,transformSql必须在名为staging的表上运行,并且transformSql的输出模式必须与最终目标表的模式匹配

    请在下面查找transformSql的使用示例。请注意,select是从
    staging
    表中选择的。它将有效地运行
    CREATE TEMPORARY TABLE staging2作为SELECT FROM staging。此外,必须包含所有字段,并与红移数据库中的现有表匹配

    {
      "id": "LoadUsersRedshiftCopyActivity",
      "name": "Load Users",
      "insertMode": "OVERWRITE_EXISTING",
      "transformSql": "SELECT u.id, u.email, u.first_name, u.last_name, u.admin, u.guest, CONVERT_TIMEZONE('US/Pacific', cs.created_at_pst) AS created_at_pst, CONVERT_TIMEZONE('US/Pacific', cs.updated_at_pst) AS updated_at_pst FROM staging u;",
      "type": "RedshiftCopyActivity",
      "runsOn": {
        "ref": "OregonEc2Resource"
      },
      "schedule": {
        "ref": "HourlySchedule"
      },
      "input": {
        "ref": "OregonUsersS3DataNode"
      },
      "output": {
        "ref": "OregonUsersDashboardRedshiftDatabase"
      },
      "onSuccess": {
        "ref": "LoadUsersSuccessSnsAlarm"
      },
      "onFail": {
        "ref": "LoadUsersFailureSnsAlarm"
      },
      "dependsOn": {
        "ref": "BewteenRegionsCopyActivity"
      }
    }
    
  • 使用的
    脚本
  • SqlActivity允许对整个数据集进行操作,并且可以通过
    dependsOn
    机制安排在特定事件之后运行

    {
      "name": "Add location ID",
      "id": "AddCardpoolLocationSqlActivity",
      "type": "SqlActivity",
      "script": "INSERT INTO locations (id) SELECT 100000 WHERE NOT EXISTS (SELECT * FROM locations WHERE id = 100000);",
      "database": {
        "ref": "DashboardRedshiftDatabase"
      },
      "schedule": {
        "ref": "HourlySchedule"
      },
      "output": {
        "ref": "LocationsDashboardRedshiftDatabase"
      },
      "runsOn": {
        "ref": "OregonEc2Resource"
      },
      "dependsOn": {
        "ref": "LoadLocationsRedshiftCopyActivity"
      }
    }
    

    是的,这是可能的。有两种方法:

  • 使用的
    transformSQL
  • transformSQL
    如果在及时加载的记录范围内(例如每天或每小时)执行转换,则非常有用。这样,更改只应用于批处理,而不应用于整个表

    以下是文件的摘录:

    transformSql:用于转换输入数据的SQL选择表达式。当您从DynamoDB或amazons3复制数据时,AWS数据管道会创建一个名为staging的表,并在其中加载它。此表中的数据用于更新目标表。如果指定了transformSql选项,则将从指定的SQL语句创建第二个暂存表。然后在最终目标表中更新第二个暂存表中的数据。因此,transformSql必须在名为staging的表上运行,并且transformSql的输出模式必须与最终目标表的模式匹配

    请在下面查找transformSql的使用示例。请注意,select是从
    staging
    表中选择的。它将有效地运行
    CREATE TEMPORARY TABLE staging2作为SELECT FROM staging。此外,必须包含所有字段,并与红移数据库中的现有表匹配

    {
      "id": "LoadUsersRedshiftCopyActivity",
      "name": "Load Users",
      "insertMode": "OVERWRITE_EXISTING",
      "transformSql": "SELECT u.id, u.email, u.first_name, u.last_name, u.admin, u.guest, CONVERT_TIMEZONE('US/Pacific', cs.created_at_pst) AS created_at_pst, CONVERT_TIMEZONE('US/Pacific', cs.updated_at_pst) AS updated_at_pst FROM staging u;",
      "type": "RedshiftCopyActivity",
      "runsOn": {
        "ref": "OregonEc2Resource"
      },
      "schedule": {
        "ref": "HourlySchedule"
      },
      "input": {
        "ref": "OregonUsersS3DataNode"
      },
      "output": {
        "ref": "OregonUsersDashboardRedshiftDatabase"
      },
      "onSuccess": {
        "ref": "LoadUsersSuccessSnsAlarm"
      },
      "onFail": {
        "ref": "LoadUsersFailureSnsAlarm"
      },
      "dependsOn": {
        "ref": "BewteenRegionsCopyActivity"
      }
    }
    
  • 使用的
    脚本
  • SqlActivity允许对整个数据集进行操作,并且可以通过
    dependsOn
    机制安排在特定事件之后运行

    {
      "name": "Add location ID",
      "id": "AddCardpoolLocationSqlActivity",
      "type": "SqlActivity",
      "script": "INSERT INTO locations (id) SELECT 100000 WHERE NOT EXISTS (SELECT * FROM locations WHERE id = 100000);",
      "database": {
        "ref": "DashboardRedshiftDatabase"
      },
      "schedule": {
        "ref": "HourlySchedule"
      },
      "output": {
        "ref": "LocationsDashboardRedshiftDatabase"
      },
      "runsOn": {
        "ref": "OregonEc2Resource"
      },
      "dependsOn": {
        "ref": "LoadLocationsRedshiftCopyActivity"
      }
    }
    

    所以基本上在 “脚本”任何sql脚本/转换/命令

    transformSql可以,但只支持用于转换输入数据的SQL选择表达式。参考号:

    所以基本上在 “脚本”任何sql脚本/转换/命令

    transformSql可以,但只支持用于转换输入数据的SQL选择表达式。参考: