如何修复:将 bigquery 查询的结果与列表进行比较
How to fix: compairing result of a bigquery query to a list
我是 Python 的新手,感谢所有帮助。
我想要一个以 4 美元的方式购买的团体的活动列表: purchase_date(1,1,0,1,1,0,1)
其中 purchase_date
是购买日期,arrays indeces+1
给出购买后的天数。 1 表示活跃日,0 表示不活跃日。
例如。 20190203(1,1,1,0,0,0,1)
表示购买发生在 2019-02-03
,用户在 2 月 4 日、5 日、6 日和 10 日活跃。
我尝试了下面的代码。
步骤:
- 创建了包含购买的数据表:
four_dollar_buyers(user_pseudo_id,purchase_date)
。查询它并将结果加载到 four_dollar_purchases
列表中。
- 迭代
four_dollar
次购买
- 制作了 2 个辅助数组:
seven_days_date
包含购买后的日期
seven_days_number
应包含 1 和 0(给定的活动或不活动
天)
- 遍历
seven_days_date
,从
给定日期,是什么给出了当天活跃用户的 id-s。载入
查询结果放入名为“actives
” 的列表中
- 如果给定购买的
user_id
处于活动状态,则
seven_days_number
数组应在给定索引上从 0 更改为 1。
client = bigquery.Client(project="project")
QUERY = ('SELECT * FROM `project.four_dollar_buyers`')
query_job = client.query(QUERY)
four_dollar_purchases = list(query_job.result())
for row in four_dollar_purchases:
seven_days_date = ["","","","","","",""]
seven_days_number = [0,0,0,0,0,0,0]
for i in range(7):
date_time_obj = datetime.strptime(row[1], '%Y%m%d')
date_time_obj = date_time_obj + timedelta(days=1)+timedelta(days=i)
seven_days_date[i] = date_time_obj.strftime("%Y%m%d")
for idx, days in enumerate(seven_days_date):
QUERY = ('''SELECT DISTINCT user_pseudo_id FROM
`project.events_'''+days+'''` WHERE event_name IN
("activity_added")''')
query_job = client.query(QUERY)
actives = list(query_job.result())
if row[0] in actives:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))
没有错误信息了,但是所有的结果都是这样的20181212(0,0,0,0,0,0,0)
。
因此,出于某种原因,辅助数组不会更改,在购买日期之后它只给出零。
我用 pprint 检查了变量 row[0] 和 actives,它们都包含正确的结果。
Days 不是 ralaxpy 建议的整数类型。因此,您可以使用枚举或其他方式来使用索引修改列表。
query_job = client.query(QUERY)
actives = list(query_job.result())
for dict in actives:
if dict[0] == row[0]:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))
我是 Python 的新手,感谢所有帮助。
我想要一个以 4 美元的方式购买的团体的活动列表: purchase_date(1,1,0,1,1,0,1)
其中 purchase_date
是购买日期,arrays indeces+1
给出购买后的天数。 1 表示活跃日,0 表示不活跃日。
例如。 20190203(1,1,1,0,0,0,1)
表示购买发生在 2019-02-03
,用户在 2 月 4 日、5 日、6 日和 10 日活跃。
我尝试了下面的代码。 步骤:
- 创建了包含购买的数据表:
four_dollar_buyers(user_pseudo_id,purchase_date)
。查询它并将结果加载到four_dollar_purchases
列表中。 - 迭代
four_dollar
次购买 - 制作了 2 个辅助数组:
seven_days_date
包含购买后的日期seven_days_number
应包含 1 和 0(给定的活动或不活动 天) - 遍历
seven_days_date
,从 给定日期,是什么给出了当天活跃用户的 id-s。载入 查询结果放入名为“actives
” 的列表中
- 如果给定购买的
user_id
处于活动状态,则seven_days_number
数组应在给定索引上从 0 更改为 1。
client = bigquery.Client(project="project")
QUERY = ('SELECT * FROM `project.four_dollar_buyers`')
query_job = client.query(QUERY)
four_dollar_purchases = list(query_job.result())
for row in four_dollar_purchases:
seven_days_date = ["","","","","","",""]
seven_days_number = [0,0,0,0,0,0,0]
for i in range(7):
date_time_obj = datetime.strptime(row[1], '%Y%m%d')
date_time_obj = date_time_obj + timedelta(days=1)+timedelta(days=i)
seven_days_date[i] = date_time_obj.strftime("%Y%m%d")
for idx, days in enumerate(seven_days_date):
QUERY = ('''SELECT DISTINCT user_pseudo_id FROM
`project.events_'''+days+'''` WHERE event_name IN
("activity_added")''')
query_job = client.query(QUERY)
actives = list(query_job.result())
if row[0] in actives:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))
没有错误信息了,但是所有的结果都是这样的20181212(0,0,0,0,0,0,0)
。
因此,出于某种原因,辅助数组不会更改,在购买日期之后它只给出零。
我用 pprint 检查了变量 row[0] 和 actives,它们都包含正确的结果。
Days 不是 ralaxpy 建议的整数类型。因此,您可以使用枚举或其他方式来使用索引修改列表。
query_job = client.query(QUERY)
actives = list(query_job.result())
for dict in actives:
if dict[0] == row[0]:
seven_days_number[idx] = 1
print(row[1] + str(seven_days_number))