第 1 步:在控制台中创建远程服务 (Google Cloud Function)

本主题详细说明了有关创建 Google Cloud Function 以用作外部函数的远程服务。

本主题内容:

上一步

规划用于 GCP 的外部函数

创建 Google Cloud Function

按照 Google 的 创建 Cloud Function 的说明 (https://cloud.google.com/functions/docs/quickstart-console) 来创建函数。

如果您使用 Snowflake 提供的示例 Python 语言函数来创建函数,则选择 Python Quickstart;否则,请基于您所使用的语言来选择合适的 QuickStart。

按照 Google 的说明操作时,请确保执行以下操作:

  1. 指定该函数的触发器是 HTTP。

  2. 将触发器 URL 复制到跟踪工作表中的 Cloud Function Trigger URL 字段。

  3. Authentication 部分中,选择 Require authentication

    GCP 说明指明要选择 Allow unauthenticated invocations。这对于示例函数(包括 Snowflake 提供的示例函数)而言是可接受的,但大多数生产系统应需身份验证。

  4. 如果 Require HTTPS 尚未启用,请启用它。

  5. 点击 Save

  6. 选择合适的 Runtime。如果您正在创建 Snowflake 提供的示例 Python 函数,请选择 Python 3.7 运行时。

    重要

    在您粘贴代码 ,请选择 Runtime 值。

  7. 将默认代码替换为 Snowflake 示例代码或您自己的自定义代码。Snowflake 示例代码详述于 同步的 Google Cloud Function 示例 (本主题内容)。

  8. 确保 Entry point 匹配函数的名称(在本例中为 echo)。

测试 Google Cloud Function

创建完 Google Cloud Function 后,使用控制台中的 Testing 选项卡调用函数,以确保其正常运行。

对于 Snowflake 提供的示例 Python 函数,使用以下测试数据(用以下数据替换 Testing 选项卡中的任何默认数据):

{ "data":
  [
    [ 0, 43, "page" ],
    [ 1, 42, "life, the universe, and everything" ]
  ]
}
Copy

执行结果应该类似于:

{"data":
  [
    [0, [43, "page"] ],
    [1, [42, "life, the universe, and everything"] ]
  ]
}
Copy

结果的显示格式可能与上面所示的示例不同。

如果测试成功,您现在就有了一个 Google Cloud Function,可以将其用作外部函数的远程服务。

同步的 Google Cloud Function 示例

此示例代码将输入参数值组合成一个列表(数组),并将该列表返回为 SQL 类型 VARIANT 的单个值。该代码是用 Python 3.7 编写的。

此函数接受并返回的数据的格式与 Snowflake 发送和读取的格式 (JSON) 相同。

import json

HTTP_SUCCESS = 200
HTTP_FAILURE = 400

def echo(request):
    try:
        # The list of rows to return.
        return_value = []

        payload = request.get_json()
        rows = payload["data"]

        # For each input row
        for row in rows:
            # Include the row number.
            row_number = row[0]
            # Combine the value(s) in the row into a Python list that will be treated as an SQL VARIANT.
            row_value = row[1:]
            row_to_return = [row_number, row_value]
            return_value.append(row_to_return)

        json_compatible_string_to_return = json.dumps( { "data" : return_value } )
        return (json_compatible_string_to_return, HTTP_SUCCESS)

    except:
        return(request.data, HTTP_FAILURE)
Copy

有关数据格式的更多信息,请参见 远程服务输入和输出数据格式

下一步

第 2 步:在控制台中创建代理服务(Google Cloud API Gateway)

语言: 中文