python - 如何从表中创建对

标签 python sql pandas hive hiveql

我有一个 Hive 表,其中数据如下所示 -

enter image description here

每个客户都有相应的帐户,目标是建立客户内配对。 配对取决于帐户的出生年份是否相同或姓名的前 3 个字符是否相同。 例如 - 山姆和塞缪尔。

输出看起来像这样 - enter image description here

理想情况下,不应创建 AA、XX 等相同的帐户对。 此外,一对 AC 和 CA 都是相同的,因此只需要此类对中的一个条目。可以在“姓名”和“出生年份” key 上形成一对,但这里也只需要一个条目(可以是任何人)。

我应该如何解决这个问题。 检查测试数据 -

create table customer_account(
customer INT NOT NULL,
accounts VARCHAR(100) NOT NULL,
name VARCHAR(40) NOT NULL,
yob DATE,
);

INSERT INTO 
customer_account(customer,accounts,name,yob)
VALUES
(1,"A","John",2001),
(1,"X","Tom",1996),
(1,"C","Harry",2001),
(2,"D","Sam",1994),
(2,"F","Samuel",1995),
(3,"Z","Jake",)1994,
(3,"G","Drake",1998),
(3,"H","Arnold",1993),
(3,"K","Yang",1990)
;

最佳答案

您应该能够在 HIVE 语言中使用子字符串进行连接。尽管您可能需要根据您的需要稍微调整一下,但逻辑应该是合理的。

您想要做的是一元(或自)连接。下面是可以传递的查询类型的示例。您本质上是加入 OR 条件并使用 case 语句测试该条件以获得“Pair_Key”。我使用了内部联接,假设您只需要发生匹配的实例。

SELECT 
     t1.customer as Customer1,
     t2.customer as Customer2,
     t1.Accounts as Accounts1,
     t2.Accounts as Accounts2,
     CONCAT(t1.Accounts, t2.Accounts) as Pair_No,
     t1.Name as Name1,
     t2.Name as Name2,
     t1.YOB as YOB1,
     t2.YOB as YOB2,
     CASE
     WHEN t1.YOB = t2.YOB THEN 'YOB'
     WHEN SUBSTR(t1.Name, 3) = SUBSTR(t2.Name, 3) THEN 'Name'
     else 'Issue'
     END as Pair_Key
FROM (SELECT * FROM Table1) as t1
inner join (SELECT * FROM Table1) as t2 --instance 2 of the same table
on (SUBSTR(t1.Name, 3) = SUBSTR(t2.Name, 3) OR t1.YOB = t2.YOB)

没有测试数据或更多有关您进展情况的详细信息,这只是一个开始。

如果客户编号需要相同,只需调整为:

on (t1.Customer = t2.Customer) and (SUBSTR(t1.Name, 3) = SUBSTR(t2.Name, 3) OR t1.YOB = t2.YOB)

关于python - 如何从表中创建对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56836635/

相关文章:

python - Ansible 将变量写入 YAML 文件

python - Scikit Learn OneHotEncoder 拟合和变换错误 : ValueError: X has different shape than during fitting

sql - 如何找到两个机场之间的最短距离/旅行时间?

python - 使用来自三列的分组问题制作数据框

python - 根据另一个数据帧的值更新数据帧

java - 在 Jython 中创建 Java 对象时,类没有可见的构造函数

python - 在Python的另一个类ElementTree中继续解析

sql - 从ComboBox选择中查找数据库

php - 在没有日历表的情况下搜索给定范围内的可用日期

python - 通过附加具有不同列的 DataFrame 为 NaN 条目选择不同的值