Sql 在pyspark或hive中应用变换或连接条件以实现结果

Sql 在pyspark或hive中应用变换或连接条件以实现结果,sql,pyspark,hive,window-functions,gaps-and-islands,Sql,Pyspark,Hive,Window Functions,Gaps And Islands,给定两个表或数据帧。一个是拥有数据集和相应的表格。另一个将具有源和目标。 我需要以下情况的解决方案: 一旦我们找到ft.dataset=st.source,我们需要替换st.source中的ft.table并忽略其余记录 例如:在第二个表的第一个块(从序号1到6)中,我们在Abc中有一个匹配项,因此我们用db.table1替换,而忽略该块中的其余记录。类似地,我们需要对第二个表的每个块执行相同的操作。 注意,目标在第二个表的所有行中都是相同的。 请帮助我在pyspark或Hive中找到可能的解决

给定两个表或数据帧。一个是拥有数据集和相应的表格。另一个将具有源和目标。 我需要以下情况的解决方案: 一旦我们找到ft.dataset=st.source,我们需要替换st.source中的ft.table并忽略其余记录

例如:在第二个表的第一个块(从序号1到6)中,我们在Abc中有一个匹配项,因此我们用db.table1替换,而忽略该块中的其余记录。类似地,我们需要对第二个表的每个块执行相同的操作。 注意,目标在第二个表的所有行中都是相同的。 请帮助我在pyspark或Hive中找到可能的解决方案

第一张表格:

Dataset |   Table
_________________
Abc           db.table1
Xyz           db.table2
Def           db.table3
第二个表T:

Target| seq_no| source
______________________
A             1           A
A             2           B1
A             3           C1
A             4           D1
A             5           Abc
A             6           Xyz
A             1           A
A             2           B1
A             3           C1
A             4           D1
A             5           Def
A             6           Abc
A             7           Xyz
预期产出:

Target| seq_no | source
_______________________
A             1           A
A             2           B1
A             3           C1
A             4           D1
A             5           db.table1
A             1           A
A             2           B1
A             3           C1
A             4           D1
A             5           db.table3

在配置单元中,可以使用左联接在第一个表中搜索匹配项,使用窗口最小值来标识第一个匹配项的序列

select target, seq_no, source
from (
    select 
        st.target, 
        st.seq_no, 
        coalesce(st.source, ft.table) as source,
        min(case when ft.dataset is not null then st.seq_no end) over(partition by st.target) first_matched_seq_no
    from st 
    left join ft on ft.dataset = st.source
) t
where first_matched_seq_no is null or seq_no <= first_matched_seq_no
order by target, seq_no

谢谢你的回答。但它并没有像预期的那样工作。它总是将seq_no作为输出中的一个,甚至不替换st中的源。它在seq_no为一的情况下给出输出,而不考虑剩余的记录。Target | seq_no | source | uuuuuuuuuuuuuuuuuuuuuuuuuua1 AI提到了随查询而来的输出。这是预料不到的。请更新查询并发送。请看一下我在问题中提到的预期产出。