数据格式不正确 - 将查询从 BigQuery 保存到 GCS

improper data formatting - saving query from BigQuery to GCS

想知道是否有人可以提供帮助。

我有云函数 python 代码查询 BigQuery table 并将查询结果作为 csv 文件存储在 GCS 存储桶中。

但是在 csv 文件中我有奇怪的格式,例如:

Row(('asser',), {'user_login': 0})
Row(('godx',), {'user_login': 0})
Row(('johnw',), {'user_login': 0})
Row(('miki',), {'user_login': 0})

但保存数据格式预计为:

asser,
godx,
johnw,
miki

当我在 GCP 日志控制台中进行调试时,我能够获得预期的格式。似乎我在处理查询结果时做错了。

我使用这个代码:

def main(event, context):
    from google.cloud import bigquery
    from google.cloud import storage
    import pandas as pd
    import datetime

    project_name = my_project
    destination_bucket = my_bucket

    bq_dataset_name = my_dataset
    bq_table_name = my_table
    bq_table_full_path = f"""{project_name}.{bq_dataset_name}.{bq_table_name}"""

    bq_client = bigquery.Client()

    query_string = """
    SELECT user_login  
    FROM `my_table_full_path`  
    WHERE DATE(insert_time) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
    GROUP BY user_login
    """

    bq_response = bq_client.query(query_string)
    df = pd.DataFrame(bq_response)
    csv_data = df.to_csv(header=False, index=False)

    # create and upload file to Google Storage
    timestr = datetime.datetime.now(datetime.timezone.utc).strftime('%Y-%m-%d')
    file_name = 'daily_active_users_' + timestr + '.csv'
    upload_blob(data=csv_data, destination_blob_name=file_name)

    def upload_blob(data, destination_blob_name):
        storage_client = storage.Client()
        bucket = storage_client.get_bucket(destination_bucket)
        blob = bucket.blob(destination_blob_name)
        blob.upload_from_string(data, 'text/csv')

提前致谢!

尝试使用 QueryJob 的方法 to_dataframe 到 return dataframe。

而不是:

df = pd.DataFrame(bq_response)

试试这个:

df = bq_response.to_dataframe()