使用远程函数
通过 BigQuery 远程函数,您可以使用 SQL 和 JavaScript 以外的语言或 BigQuery 用户定义的函数中不允许的库或服务来实现函数。
概览
BigQuery 远程函数能够与 Cloud Run functions 和 Cloud Run 直接集成,使您可以将 GoogleSQL 的功能与 BigQuery 之外的软件结合使用。借助 BigQuery 远程函数,您可以在使用任何支持的语言实现的 Cloud Run functions 或 Cloud Run 中部署您的函数,然后从 GoogleSQL 查询调用这些函数。
工作流
- 在 Cloud Run functions 或 Cloud Run 中创建 HTTP 端点。
- 在 BigQuery 中创建远程函数。
- 创建类型为
CLOUD_RESOURCE的连接。 - 创建一个远程函数。
- 创建类型为
- 与任何其他用户定义的函数一样,在查询中使用该远程函数。
限制
远程函数仅支持以下数据类型之一作为参数类型或返回值类型:
- 布尔值
- 字节
- 数字
- 字符串
- 日期
- 日期时间
- 时间
- 时间戳
- JSON
远程函数不支持
ARRAY、STRUCT、INTERVAL或GEOGRAPHY类型。您无法创建表值型远程函数。
创建具体化视图时不能使用远程函数。
远程函数的返回值始终假定为具有非确定性,因此系统不会缓存调用远程函数的查询的结果。
由于暂时性网络错误或 BigQuery 内部错误,您可能会看到向端点发送的请求重复出现,即使在收到成功响应后也是如此。
当由于短路而跳过某些行的远程函数评估时,例如,在条件表达式或带有
WHEN [NOT] MATCHED的MERGE语句中,批处理不会与远程函数一起使用。在这种情况下,HTTP 请求正文中的calls字段有且仅有一个元素。如果通过跨区域数据集复制将与远程函数关联的数据集复制到目标区域,则只能在远程函数的创建区域中查询该远程函数。
创建端点
如需创建可实现业务逻辑的远程函数,您必须使用 Cloud Run functions 或 Cloud Run 创建 HTTP 端点。该端点必须能够在单个 HTTP POST 请求中处理一批行,并将该批处理的结果作为 HTTP 响应返回。
如果您使用 BigQuery DataFrame 创建远程函数,则无需手动创建 HTTP 端点;该服务会自动为您执行此操作。
如需了解如何编写、部署、测试和维护 Cloud Run 函数,请参阅 Cloud Run functions 教程及其他 Cloud Run functions 文档。
请参阅 Cloud Run 快速入门和其他 Cloud Run 文档,了解如何编写、部署、测试和维护 Cloud Run 服务。
建议您保留默认身份验证,而不是允许对 Cloud Run functions 或 Cloud Run 服务进行未经身份验证的调用。
输入格式
BigQuery 会发送包含 JSON 正文的 HTTP POST 请求,格式如下:
| 字段名称 | 说明 | 字段类型 |
|---|---|---|