python - 连接 Google BigQuery 时遇到问题
问题描述
我一直在 Google App Engine 上使用烧瓶制作 api,当我在部署后从浏览器向该应用发送请求时,出现 502 错误。我确定此错误是由“gcloud app logs tail -s test”的 GCP 凭证引起的,但凭证 Json 文件的路径和文件名似乎 OK 。我已经用谷歌搜索了,我尝试了在那里找到的所有文章,但无法解决。我已经完成了 export GOOGLE_APPLICATION_CREDENTIALS="/home/user/secret_key/bq.json" 谁能告诉我解决方案?如果缺少任何信息,请告诉我。谢谢你 。
此外,我的 api 函数通过 http 请求获取 luid 参数并使用该 luid 运行 SQL,如果 luid 的行在 BigQuery 的 cv_date 列中有数据,它会向客户端返回 True。
【The result of "gcloud app logs tail -s test"】
File "/env/lib/python3.7/site-packages/google/auth/_default.py", line 97, in load_credentials_from_file "File {} was not found.".format(filename) google.auth.exceptions.DefaultCredentialsError: File /home/user/secret_key/bq.json was not found.
【/home/user/api_dev/main.py】
from flask import Flask,request
from google.cloud import bigquery
import os
credentials_json = '/home/user/secret_key/bq.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json
client = bigquery.Client()
app = Flask(__name__)
@app.route('/')
def get_request():
request_luid = request.args.get('luid') or ''
query = """
SELECT EXISTS(SELECT cv_date FROM `test-266110.conversion_log.conversion_log_202008*` t WHERE request_luid = p.luid)
"""
query_res = client.query(query)
return query_res
if __name__ == "__main__":
app.run()
【Remove the codes for BigQuery except import library and variables】
*This code works well and returns luid you input on url parameter
from flask import Flask, request
from google.cloud import bigquery
import os
credentials_json = '/home/user/secret_key/bq.json'
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = credentials_json
app = Flask(__name__)
@app.route('/')
def get_request():
request_luid = request.args.get('luid') or ''
return request_luid
if __name__ == "__main__":
app.run()
解决方案
我建议通读 auth 文档。
https://cloud.google.com/docs/authentication/production更详细地讨论了服务帐户交互。您可能不需要在实时应用程序中传递您的凭据。您可以在本地运行时简单地设置 GOOGLE_APPLICATION_CREDENTIALS 以使用凭据,但您不需要在生产中设置它。
问题是您指定的路径 ( /home/user/secret_key/bq.json
) 仅对您的开发环境有效,并且根本不包含在您的生产部署中,或者已部署应用程序中文件的绝对路径不同。
推荐阅读
- python - 执行线性回归时出现 Theano 错误
- python - Pandas:将通过 API 调用检索到的 None 类型数组从列表转换为字符串(以启用数据透视表)
- python - 如何将 X-FRAMES_OPTIONS 设置为拒绝 Django 媒体文件嵌入目的以外的任何其他值?
- c# - 如何在没有对话框的情况下对我的机器人进行单元测试?(C#)
- c# - 如何使 Bear Token 在 Postman 中工作
- python - pytest mark django db:避免在测试中保存夹具
- redis - Redis EXPIRE:秒数有实际的上限吗?
- c - Valgrind:REALLOC 未初始化的值是由堆分配创建的
- c# - 无法从程序集“System.Drawing,版本 = 4.0.0.0”加载类型“System.Drawing.BitmapSuffixInSatelliteAssemblyAttribute”
- azure-active-directory - Salesforce 与 APIM 的集成