【问题标题】:fill null values from another table with the same dimensions从另一个具有相同维度的表中填充空值
【发布时间】:2020-02-26 23:02:16
【问题描述】:

我有两张桌子,例如

第一个表:

| A | B    |  
|---|------|  
| 3 | 2    |  
| 1 | NULL |  

第二张桌子:

| A | B    |  
|---|------|  
| 0 | 9    |  
| 7 | 5    | 

它们具有相同的列、相同的顺序和相同的行数。我需要用第二个表中对应于同一单元格的值填充第一个表的 NULL 值,以便第一个表变为

| A | B    |  
|---|------|  
| 3 | 2    |  
| 1 | 5    | 

【问题讨论】:

  • SQL 表代表 无序 集。您需要一个指定顺序的列。
  • 为什么?我看不出有任何理由这样做。
  • @gordon-linoff 实际上我有一个,它是 id
  • @jarlh 我有一些时间戳的数据,这是第一个表,我需要这个时间戳,但是缺少一些值,所以我采用更新的值,因为它比缺失值更好

标签: sql hive


【解决方案1】:

如果你有一个列指定每个表中的排序,你可以使用joinrow_number()

select t1.a, coalesce(t1.b, t2.b) as b
from (select t1.*, row_number() over (order by id) as seqnum
      from t1
     ) t1 left join
     (select t2.*, row_number() over (order by id) as seqnum
      from t2
     ) t2
     on t1.seqnum = t2.seqnum;

这在 Hive 中表示为 update 有点挑战性。我建议将结果保存为临时表,然后覆盖原始表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2017-12-16
    • 2022-08-18
    • 1970-01-01
    相关资源
    最近更新 更多