如何修复:将 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 日活跃。

我尝试了下面的代码。 步骤:

  1. 创建了包含购买的数据表:four_dollar_buyers(user_pseudo_id,purchase_date)。查询它并将结果加载到 four_dollar_purchases 列表中。
  2. 迭代 four_dollar 次购买
  3. 制作了 2 个辅助数组: seven_days_date 包含购买后的日期 seven_days_number 应包含 1 和 0(给定的活动或不活动 天)
  4. 遍历 seven_days_date,从 给定日期,是什么给出了当天活跃用户的 id-s。载入 查询结果放入名为“actives
  5. 的列表中
  6. 如果给定购买的 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))