2017-11-25 184 views
0

我有一个函数内部的BigQuery查询,如下所示:打印查看BigQuery的查询结果

def get_data_from_bigquery(): 
    """query bigquery to get data to import to PSQL""" 
    app_id = get_app_id() 
    bq = bigquery.Client(project=app_id) 
    query = """SELECT * FROM `Backup.Prod_UserUserMetadata`""" 
    query_job = bq.query(query) 
    data = query_job.result() 
    rows = list(data) 
    print(rows) 
    return rows 

我有我的路线如下:

@app.route('/azure-import-data') 
def print_data(): 
    return 'This is the data:\n \n' 

功能get_data_from_bigquery()被称为在我的下面的类内get()功能:

class AzureImportProcess(Resource): 
    def get(self): 
     get_data_from_bigquery() 
... 
api.add_resource(AzureImportProcess, '/azure-import-data') 

print(rows)函数似乎不起作用,因为它没有被打印在云控制台或浏览器中。有没有其他方法可以打印数据以查看它的格式?

+0

它看起来不像你在路由功能中调用函数'get_data_from_bigquery'。你想要做什么? – Abdou

+0

发布更新@Abdou – codeninja

+0

请参阅我的回答。 – Abdou

回答

1

首先,您不需要get_data_from_bigquery函数中的print声明。其次,get函数需要有一个return声明才能显示。

编辑函数定义如下:

def get_data_from_bigquery(): 
    """query bigquery to get data to import to PSQL""" 
    app_id = get_app_id() 
    bq = bigquery.Client(project=app_id) 
    query = """SELECT * FROM `Backup.Prod_UserUserMetadata`""" 
    query_job = bq.query(query) 
    data = query_job.result() 
    rows = list(data) 
    return rows 

编辑Resource类的定义如下:

class AzureImportProcess(Resource): 
    def get(self): 
     bq_data = get_data_from_bigquery() 
     return 'This is the data:\n \n{}'.format(bq_data) 

现在,您可以将您的资源添加到API对象:

api.add_resource(AzureImportProcess, '/azure-import-data') 

您不需要定义print_data函数,除非你正在处理更复杂的API。

我希望这会有所帮助。

+0

它可能试图打印数据(总共52k行),但它会引发以下异常:'在维护0请求总数后超过128 MB,268 MB,超过268 MB“ – codeninja

+0

这既不是'Flask'也不是'flask_restful'错误。它与'App Engine'有关。减少类似''“”SELECT * FROM Backup.Prod_UserUserMetadata LIMIT 100“”“'的查询,以确保答案真正起作用。一旦你确定它可以工作,那么你可以找出如何处理你的记忆问题。 – Abdou