【问题标题】:How to differentiate between insert and update in transformation如何区分转换中的插入和更新
【发布时间】:2018-07-10 20:05:47
【问题描述】:

我在包含这些列的数据库中有这张表

学生

student_id INT

student_name VARCHAR

class_name VARCHAR

我想把表变成两张表

student_transformed

student_key 

student_id 

student_name

类转换

class_key       

class_name

我的问题是类表的转换:

插入新记录:

select * 
  from student  s
  left
  join class_transformed  c
    on s.class_name = c.class_name

但是如果学生表中的 class_name 得到更新,它将是一个新的行记录。换句话说,无法区分插入和更新。

我的问题是,如何进行转换并使插入和更新工作?请注意,我们没有 class_id。

【问题讨论】:

  • 您对渐变维度的熟悉程度如何?
  • @Error_2646,我对scd很熟悉,这里的问题是我没有类的ID,并且名称可以更改,因此会导致更新和插入出现问题。
  • 我明白你在说什么。抱歉 - 仅凭您提供的数据无法做您想做的事。根本没有足够的信息。如果这是一个现实世界的问题,您需要在数据流中进入上游并获取一些持久的类标识符。也许如果班级名称可以更改,但您希望与班级相关的所有学生保持不变,您可以进行一些丑陋的覆盖,但这是牵强的。

标签: sql database amazon-redshift data-warehouse


【解决方案1】:

我认为您需要另一张桌子,例如:

Student_to_Class

Student_key

Class_key

这样就可以了

select * 
  from student  s
left join Student_to_Class s2c
on s.student_key = s2c.student_key
  left join class_transformed  c
    on s2c.class_key= c.class_key

【讨论】:

  • 我认为这个问题比联结表更棘手。在不知道数据的确切性质的情况下很难判断,但从他的描述来看,问题似乎是这样的——假设你想加载一个“Person”表。在一个完美的世界里,你会有 {id, name} 这样 Day1: {1, Jane Doe} 是一个插入 Day2: {2, John Deer} 是一个插入 Day3 {1, Jane Deer} (他们结婚了)是更新。如果没有 id,就不可能知道 Jane Deer 是一个新人,还是一个改名的现有人。我假设这对他的数据至关重要。
猜你喜欢
  • 1970-01-01
  • 2020-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多