【问题标题】:google Cloud function :Error: memory limit exceeded. Function invocation was interrupted, but it works谷歌云功能:错误:超出内存限制。函数调用被中断,但它可以工作
【发布时间】:2020-12-02 06:37:49
【问题描述】:

我创建了一个新的 python google 函数,它每 10 分钟在 BigQuery 中安排一次查询,我对其进行了测试,它可以工作。

  • 部署工作正常

  • 测试给出此错误:错误:超出内存限制。日志不可用(但我可以看到查询在 BigQuery 中按预期运行)

  • 在云调度程序中使用 http 触发器,我遇到了错误消息状态:503,但我可以再次在 BigQuery 控制台中看到,它正在按预期运行

编辑:这里是函数的代码

from google.cloud import bigquery


    def load(request):
        client = bigquery.Client()
        dataset_id = 'yyyyyyyy'
        table_id='xxxxxxxxxxx'
        job_config = bigquery.QueryJobConfig()
        job_config.use_legacy_sql = False
        table_ref = client.dataset(dataset_id).table(table_id)
        job_config.destination = table_ref
        job_config.write_disposition = bigquery.WriteDisposition.WRITE_TRUNCATE
        sql = """
            SELECT * FROM `xxxxxx.datastudio.today_view`;
        """
    
        query_job = client.query(sql,location='asia-northeast1',job_config=job_config)
        query_job.result()
        print("Job finished.")

【问题讨论】:

  • 你能添加一些这个云函数的示例代码吗?
  • 我添加了代码,请注意代码有效

标签: google-cloud-platform google-cloud-functions


【解决方案1】:

BigQuery 作业是异步的。您的云函数会触发它并等待完成。如果函数在两者之间失败,这不是问题,这两个服务不相关。

如果您通过 API 执行此操作,则当您创建作业(查询)时,您会立即获得一个 JobID。然后您必须定期轮询此作业 ID 以了解其状态。客户端库完全一样!

您的内存不足问题来自wait the completion and read the results 的结果。设置页面大小或 max_result 以限制返回的数据。

但是,您也可以不等待结束并立即退出(跳过query_job.result() 行)。您将节省 Cloud Functions 处理(无用的等待)时间,从而节省金钱!

【讨论】:

  • 我在其他函数中使用相同的代码,它工作得很好
  • 当我删除 query_job.result() 500 Internal Server Error title> <h1>内部服务器错误</h1> <p>服务器遇到内部错误,无法完成您的请求。要么服务器超载,要么应用程序出错。</p>
  • 您没有退货。在末尾添加return 'job running',200 以优雅退出。格式:return &lt;response content&gt;, &lt;HTTP code&gt;
猜你喜欢
  • 2019-04-16
  • 2019-01-08
  • 2022-12-17
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多