消費者アカウントのイベント共有に関する情報を決定する

このトピックでは、コンシューマーが自分のアカウントでイベント共有を有効にしているかどうかを判断するために、プロバイダーがアプリを設定する方法について説明します。

システム関数を使用したイベント定義の検証

コンシューマーアカウントでイベント共有が有効になっているかどうかを判断するために、プロバイダーはアプリロジックを定義するときに次のシステム関数を呼び出すことができます。

  • SYSTEM$IS_APPLICATION_AUTHORIZED_FOR_TELEMETRY_EVENT_SHARING()

    コンシューマアカウントでイベント共有が許可されていることを示す AUTHORIZE_TELEMETRY_EVENT_SHARING プロパティが設定されている場合、 TRUE を返します。そうでない場合、このシステム関数は FALSE を返します。

  • SYSTEM$IS_APPLICATION_ALL_MANDATORY_TELEMETRY_EVENT_DEFINITIONS_ENABLED()

    コンシューマ・アカウントで必要なイベント定義がすべて有効になっている場合、 TRUE を返します。そうでない場合、このシステム関数は FALSE を返します。

次の例は、 IS_APPLICATION_AUTHORIZED_FOR_TELEMETRY_EVENT_SHARING と IS_APPLICATION_ALL_MANDATORY_TELEMETRY_EVENT_DEFINITIONS_ENABLED の両方が TRUE に設定されている場合にのみ計算を実行するストアド プロシージャを示しています。

CREATE OR ALTER VERSIONED SCHEMA app_schema;
CREATE OR REPLACE PROCEDURE app_schema.sum(num1 float, num2 float)
RETURNS STRING
LANGUAGE SQL
EXECUTE AS OWNER
AS $$
    BEGIN
      IF (SYSTEM$IS_APPLICATION_AUTHORIZED_FOR_TELEMETRY_EVENT_SHARING() and SYSTEM$IS_APPLICATION_ALL_MANDATORY_TELEMETRY_EVENT_DEFINITIONS_ENABLED()) THEN
        RETURN num1 + num2;
      ELSE
        -- notify consumers that they need to enable event sharing
        RETURN 'Sorry you can\'t access the API, please enable event sharing.';
      END IF;
    END;
$$;
Copy

Permissions SDK を使ってイベント定義を確認する

Python Permission SDK は、コンシューマーアカウントで共有が有効になっているかどうかを判断するために、次の機能を提供します。

  • is_application_authorized_for_telemetry_event_sharing()

    AUTHORIZE_TELEMETRY_EVENT_SHARING プロパティが true の場合、 true を返します。それ以外の場合は false を返します。

  • is_application_all_mandatory_telemetry_event_definitions_enabled()

    すべての必須イベント定義がコンシューマ・アカウントで有効になっている場合、 true を返します。

以下の例は、 Python Permission SDK の is_application_authorized_for_telemetry_event_sharing()is_application_all_mandatory_telemetry_event_definitions_enabled() 関数を使用して、コンシューマー・アカウントでイベント共有が有効になっていること、および必須イベントが有効になっていることを検証する方法を示しています。

import streamlit as st
import snowflake.permissions as permissions

def critical_feature_that_requires_event_sharing():
  st.write("critical_feature_that_requires_event_sharing")

def main():
  if permissions.is_application_authorized_for_telemetry_event_sharing() and permissions.is_application_all_mandatory_telemetry_event_definitions_enabled():
     critical_feature_that_requires_event_sharing()
  else:
     permissions.request_event_sharing()

if __name__ == "__main__":
  main()
Copy