数据格式不正确 - 将查询从 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()
想知道是否有人可以提供帮助。
我有云函数 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()