2017-11-25 225 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