Amazon s3 AWS:通过amazon数据管道将数据从S3传输到Redshift,实现复制以外的其他功能
我正在尝试使用Amazon数据管道工具将数据从AmazonS3云传输到AmazonRedshift 传输数据时是否可以使用SQL语句等更改数据,以便只将SQL语句的结果输入到红移 我只发现复制命令如下: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
{
"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选择表达式。参考: