代码之家  ›  专栏  ›  技术社区  ›  Ben P

从BigQuery到Python数据框架的实时数据

  •  1
  • Ben P  · 技术社区  · 8 年前

    我正在探索将BigQuery数据引入Python的方法,以下是我迄今为止的代码:

    from google.cloud import bigquery
    from pandas.io import gbq
    
    client = bigquery.Client.from_service_account_json("path_to_my.json")
    
    project_id = "my_project_name"
    
    query_job = client.query("""
        #standardSQL
        SELECT date,
        SUM(totals.visits) AS visits
        FROM `projectname.dataset.ga_sessions_20*` AS t
        WHERE parse_date('%y%m%d', _table_suffix) between 
        DATE_sub(current_date(), interval 3 day) and
        DATE_sub(current_date(), interval 1 day)
        GROUP BY date
        """)
    
    results = query_job.result()  # Waits for job to complete.
    
    #for row in results:
    #  print("{}: {}".format(row.date, row.visits))
    
    results_df = gbq.read_gbq(query_job,project_id=project_id)
    

    注释掉的行: #for row in results: print("{}: {}".format(row.date, row.visits)) 从我的查询中返回正确的结果,但它们在此表单中不可用,下一步我想将它们放入数据帧中,但此代码返回错误 TypeError: Object of type 'QueryJob' is not JSON serializable .

    有人能告诉我生成这个错误的代码有什么问题吗,或者有人能建议一种更好的方法将BigQuery数据引入到数据帧中吗?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Willian Fuks    8 年前

    方法 read_gbq 应为 str 作为输入,而不是 QueryJob

    请尝试这样运行:

    query = """
        #standardSQL
        SELECT date,
        SUM(totals.visits) AS visits
        FROM `projectname.dataset.ga_sessions_20*` AS t
        WHERE parse_date('%y%m%d', _table_suffix) between 
        DATE_sub(current_date(), interval 3 day) and
        DATE_sub(current_date(), interval 1 day)
        GROUP BY date
    """
    
    results_df = gbq.read_gbq(query, project_id=project_id, private_key='path_to_my.json')