ステップ1: コンソールでリモートサービスを作成する(Google Cloud Function)¶
このトピックでは、外部関数のリモートサービスとして使用するGoogle Cloud Functionを作成するための詳細な手順について説明します。
このトピックの内容:
前のステップ¶
Google Cloud関数を作成する¶
Googleの Cloud Functionを作成するための手順 に従って、Google Cloud Functionを作成します。
Snowflakeが提供するサンプルのPython言語関数を使用して関数を作成する場合は、 Python Quickstart を選択します。それ以外の場合は、使用している言語に基づいて適切なQuickStartを選択してください。
Googleの手順に従いながら、次を確認します。
関数のトリガーが HTTP であることを指定します。
トリガー URL をワークシートの
Cloud Function Trigger URL
フィールドにコピーします。Authentication セクションで、 Require authentication を選択します。
GCP の手順では、 Allow unauthenticated invocations を選択するようになっています。これは、Snowflakeが提供するサンプル関数を含むサンプル関数では許容されますが、実稼働システムの大半では認証が必要です。
Require HTTPS がまだ有効になっていない場合は、有効にします。
Save をクリックします。
適切な Runtime を選択します。Snowflakeが提供するサンプルPython関数を作成する場合は、Python 3.7ランタイムを選択します。
重要
コードに貼り付ける 前に、 Runtime 値を選択します。
デフォルトのコードをSnowflakeサンプルコード、または独自のカスタムコードに置き換えます。Snowflakeサンプルコードは 同期Google Cloud Functionのサンプル (このトピック)で提供されています。
Entry point が関数の名前(この場合は
echo
)と一致することを確認します。
Google Cloud Functionをテストする¶
Google Cloud Functionの作成が完了したら、コンソールの Testing タブを使用して関数を呼び出し、期待どおりに機能することを確認します。
Snowflakeが提供するサンプルPython関数の場合、次のテストデータを使用します(Testing タブにあるデフォルトのデータを以下のデータで置換します)。
{ "data": [ [ 0, 43, "page" ], [ 1, 42, "life, the universe, and everything" ] ] }
実行結果は次のようになります。
{"data": [ [0, [43, "page"] ], [1, [42, "life, the universe, and everything"] ] ] }
結果は、上記の例とは異なる形式で表示される場合があります。
テストが成功すれば、外部関数のリモートサービスとして使用可能なGoogle Cloud Functionができたことになります。
同期Google Cloud Functionのサンプル¶
このサンプルコードは、入力パラメーター値を単一のリスト(配列)に結合し、そのリストを SQL 型 VARIANT の単一値として返します。コードはPython3.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)
データ形式の詳細については、 リモートサービスの入力および出力データ形式 をご参照ください。