PySpark。如何确保每日增量数据在 HIVE 中没有重复的 UUID 作为 PK

Posted

技术标签:

【中文标题】PySpark。如何确保每日增量数据在 HIVE 中没有重复的 UUID 作为 PK【英文标题】:PySpark. How do I make sure the daily incremental data has NO duplicated UUID as PK in HIVE 【发布时间】:2020-09-18 09:40:39 【问题描述】:

我在 hive 中创建了一个表,以 UUID 作为主键,例如

create table if not exists mydb.mytable as SELECT uuid() as uni_id, c.name, g.city, g.country 
FROM client c 
INNER JOIN geo g ON c.geo_id = g.id

每天都需要往mytable中插入数据,如何保证每天的增量数据没有重复的UUID作为PK?

【问题讨论】:

【参考方案1】:

如果通过 UUID,您正在寻找的是一个系列通用唯一标识符,那么我认为您可以使用自动增量 id。在纯HQL中,可以通过row_numer和cross join来实现。

insert overwrite table dest_tbl 
select
    a.rn + b.mid as id, col1, col2,...
from (
    select 
        *, row_number() over(order by rand()) as rn
    from src_tbl
) a 
join (select max(id) as mid from dst_tbl) b

【讨论】:

我尝试了row_number,只要我找到最后一次摄取的最大id,并将该id添加到row_number,它就像一个魅力。然而,我们的目标是在每日增量数据中使用 UUID。有任何想法吗?感谢您的帮助!

以上是关于PySpark。如何确保每日增量数据在 HIVE 中没有重复的 UUID 作为 PK的主要内容,如果未能解决你的问题,请参考以下文章

通过pyspark更新hive中的插入数据

SQOOP增量抽取时,在HIVE中实现类似Oracle的merge操作

每日一学数据仓库之全量表增量表拉链表流水表

在 Pyspark/Hive 中处理不断变化的数据类型

如何获取 HIVE/PySpark 表中每一列的唯一值?

如何使用 pyspark 并行插入 Hive