确定使用者账户中的事件共享信息

本主题介绍提供商如何设置应用程序以确定使用者是否在其账户中启用了事件共享。

使用系统函数验证事件定义

要确定是否在使用者账户中启用了事件共享,提供商可在安装脚本中调用以下系统函数:

  • 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
语言: 中文