1

在我的云函数中,我有一个查询,我正在执行并将作业结果写入新的 bigquery 表。我希望我的查询应该是基于某些单位值的动态的(使用外部动态参数),我正在从谷歌云调度程序触发这个云函数(它在正文部分包含一些参数值(使用带有 http 调用的 post 方法)),任何人都可以建议如何使用来自云调度程序主体部分的参数值到我的云函数中,以使我的查询动态化

在云调度程序的正文部分传递某些参数,但不知道如何在云功能中使用它们。

云调度器主体:

{
'unit': 'myunitname'
'interval':'1'
}

云功能:

import flask
from google.cloud import bigquery

app = flask.Flask(__name__)


def main(request):
    with app.app_context():
        query = "SELECT unitId FROM `myproject.mydataset.mytable` 
        where unit ='{}' and interval='{}'".format(unit,interval)
        client = bigquery.Client()
        job_config = bigquery.QueryJobConfig()
        dest_dataset = client.dataset('mydataset', 'myproject')
        dest_table = dest_dataset.table('mytable')
        job_config.destination = dest_table
        job_config.create_disposition = 'CREATE_IF_NEEDED'
        job_config.write_disposition = 'WRITE_APPEND'
        job = client.query(query, job_config=job_config)
        job.result()

        return "Triggered"
4

1 回答 1

5

最好的方法是使用 pub/sub 将所有内容保留在 Google Cloud 内部:

[谷歌官方教程]

您的 Cloud Scheduler 向 Pub/Sub 发送一条消息,其中包含您的 Cloud Function 所需信息的有效负载对象。Cloud Function 应该从 Pub/Sub 主题触发,然后您可以访问message.attributes您所引用的动态部分所需的内容。

Cloud Scheduler-- 发布到 --> Pub/Sub Topic-- 订阅者推送 -->Cloud Function


如果你想继续使用 HTTP,你可以按照这里描述如何在你的函数中使用 POST。您正在使用该requests模块来提取您在 Cloud Scheduler 作业中传递的正文属性。

于 2019-09-19T15:03:43.010 回答