【发布时间】:2021-06-24 14:52:58
【问题描述】:
所以我必须从用户的电子邮件中创建用户 ID,并且所有数据都存在于 BigQuery 中。在 python、pandas 中,它是一个简单的单行代码:
all_data['user_id'] = all_data['email'].factorize()[0]
但我想不出在 BigQuery SQL 中执行此操作的方法。我尝试使用RANK() 函数,但它离得很近。目前,我正在尝试使用 RANK() 的 Window 函数,但对于这样一个简单的任务,使用这种方法似乎有点牵强。所有数据都已经在 BigQuery 上,所以即使在 SQL 之外以其他方式执行此操作的任何建议也很好。
一点上下文...
-
pandas factorize() 函数根据提供的列分配唯一 ID,因此如果电子邮件类似于
email1@example.com, email2@example.com, email1@example.com, email3@example.com, email1@example.com, email2@example.com,它将返回:[0, 1, 0, 2, 0, 1]等等。 -
我在数据库中还有其他列,所以
RANK()和ROW_NUMBER()似乎不能单独提供帮助。我正在尝试绕过。
【问题讨论】:
-
你的意思是
ROW_NUMBER()? -
没有。因为电子邮件可以重复。
ROW_NUMBER()一个人是不行的。这就是我现在想要实现的目标 -
那么也许
DENSE_RANK? -
这仍然包含整行。我需要的是从电子邮件中生成基于列的 ID,同时仅考虑电子邮件
-
使用
DENSE_RANK() OVER (ORDER BY email)应该就是这样 AFAIK。
标签: python pandas google-bigquery