根据 Redshift 中其他表的条目在表中插入值

Posted

技术标签:

【中文标题】根据 Redshift 中其他表的条目在表中插入值【英文标题】:Insert values in a table based on entries of other table in Redshift 【发布时间】:2020-02-08 21:57:27 【问题描述】:

我在 AWS Redshift 中有两个表,需要根据另一个表的条目将一些值插入到另一个表中。我想知道是否可以使用 AWS GLUE 作业来完成任务,如果可以,这是个好主意吗?或者我应该使用 Redshift 中的查询编辑器/sqlworkbench 来完成任务。

表 1 具有以下架构:
Person(id,firstName,Lastname)
表 2 具有以下架构
Selection(perId,check)
如果Person 表的firstNamelastName 的串联位于['fullName1', 'fullName2',..] 中,则在选择表中插入1,否则插入0 和对应的person id。

示例

列表值为:['JohnLuie' , 'FranklinWatson']

人员表

    Id   |        Firstname           |   lastName   
    04   |           John             |           Luie
    09   |           Ben              |         Johnson

最初选择表是空的。所以在检查了person表上的条件之后就是如果

(Person.firstName+ Person.lastName) in ['JohnLuie' , 'FranklinWatson] 然后在 Selection.check 中插入 1 或 0,并在 Selection.perId 中使用 person.id

所以在执行任务后,选择表将如下所示:

选择

    PerId      |     check
     04        |        1
     09        |        0

我想知道是否可以通过运行 aws-glue 作业来执行以下任务。这两个表都处于红移状态。

【问题讨论】:

请编辑您的问题以提供示例...也就是说,请提供一些示例,说明一个表格中的内容以及您希望在另一表格中出现的内容。有可能这可以通过简单的SQL语句来执行,但不知道细节,是不能说的! 我已经编辑了问题并添加了一个示例。???? 列表(['JohnLuie' , 'FranklinWatson])从何而来? 这些是一些预定义的值。列表值不是来自任何表。 使用 Glue 绝对可以做到这一点,但这会使事情变得比需要的复杂得多。对于 Glue 来说,这确实不是一个好的用例。当数据已经在 Redshift 中可用时,只需按照 John 的建议直接使用 SQL。 【参考方案1】:

您可以在 SQL 查询中执行此操作,例如:

INSERT INTO Selection
(
    SELECT
      Id,
      CASE WHEN firstName || lastName IN ['JohnLuie' , 'FranklinWatson] THEN 1 ELSE 0 END
    FROM person
)

【讨论】:

以上是关于根据 Redshift 中其他表的条目在表中插入值的主要内容,如果未能解决你的问题,请参考以下文章

根据列中的状态更改创建触发器并在表的另一列中插入值

Redshift:使用来自另一个表的随机数据更新或插入列中的每一行

是否可以在 Redshift 中并行运行查询?

如何在 Oracle 11g 中使用游标在表中插入数据?

Redshift - 问题在存储在表中的表中显示时差

数据库表的设计用 自增长int类型字段做主键,插入数据时怎么保证这条记录在表中是唯一的呢