为列表准备数据¶
本主题包含列表创建准备工作指南,包括如何为不同类型的列表准备数据产品。
本主题内容:
准备创建列表¶
在创建列表之前,请执行以下操作:
设置角色和权限以简化列表的创建。请参阅 为列表设置角色和权限。
确定要共享的对象。请参阅 确定列表内容。
准备要与他人共享的对象。请参阅 为列表准备共享。
确定要如何管理对数据产品的访问:
免费提供访问权限,并且无限制。
创建付费列表,为您的列表收取费用。请参阅 准备提供付费列表。
免费试用提供对数据产品的受限访问权限,然后可按请求提供对数据产品的无限制访问权限。请参阅 准备提供受限试用列表。
选择您要在哪个云区域提供列表。请参阅 为在其他区域共享准备列表。
列表和数据共享必须符合 Snowflake 提供商政策。
为列表设置角色和权限¶
创建列表时,应使用包含列表中数据或应用程序包的账户。以下角色必须相同:将数据产品附加到列表并发布列表的角色,以及创建(并因此而拥有)应用程序包或共享的角色。您不能转让共享的 OWNERSHIP 权限。
如果使用其他角色创建和管理列表,请将列表的 MODIFY 权限授予拥有应用程序包或共享的角色。例如:
- 共享或应用程序包所有者角色:
共享或应用程序包的 OWNERSHIP 权限。列表的 MODIFY 权限。
- 列表所有者角色:
列表的 OWNERSHIP 权限。
全局 CREATE LISTING 权限。
在提供商账户中,您可以使用以下任一方式来创建和管理列表:
- ACCOUNTADMIN:
If you use the ACCOUNTADMIN role to create and manage listings, the ORGADMIN role must first 委派自动履行的设置权限.
- 自定义角色:
If you use a custom role, the ORGADMIN role must first 委派自动履行的设置权限 to the ACCOUNTADMIN role, which can then be used to grant the relevant privileges to the custom role.
For more information about granting sharing privileges, see Granting Privileges to Other Roles:.
确定列表内容¶
准备使用列表共享您账户中的数据时,应确定要在列表中存放哪些内容。
First, make sure that the data you want to share is in Snowflake, and that you have the legal and contractual rights to share the data. If needed, load the data that you want to share into Snowflake. See 数据加载概述.
备注
如果您的列表或数据集中的任何数据受任何法定或合同义务约束,则必须确保拥有共享此类数据的法定和合同权利。例如,您只能通过个性化列表共享受保护的健康信息 (PHI),为此,您必须符合以下条件:(1) 与 Snowflake 和接收 PHI 的使用者签署了商业伙伴协议 (BAA);并且 (2) 确保使用者也与 Snowflake 签署了 BAA。此外,虽然您可以通过免费或个性化列表共享个人数据,但如果数据并非公开可用数据,您必须拥有适用的法定和合同权利。
随后,确定如何以列表形式提供您拥有的数据。如果您计划在 Snowflake Marketplace 上提供列表,或者仅以私密列表形式直接向特定客户提供,那么对于要在列表中存放的内容,您可能会做出不同的决定。
考虑数据可用性。
考虑预计访问您的列表的使用者。
考虑为共享选择的数据格式,例如表、视图、安全视图或其他数据库对象。
例如,如果想提供有关狗狗美容的列表,可以做出如下决定:
在 Snowflake Marketplace 上提供公开的免费列表,包含有关犬种和毛发长度的信息。
在 Snowflake Marketplace 上提供受限试用列表,其中包含样本数据产品,内有关于标准贵宾犬美容所需时间的数据,使用者可以选择请求有关美容深入信息的完整数据产品,以获取更多犬种的数据。
在 Snowflake Marketplace 上提供受限试用列表,其中的数据产品包含为任何犬种美容所需时间的数据,使用者可以选择请求无限制地访问您的数据产品。
向合作伙伴组织提供一份私密列表,提供有关为各类犬种美容所需的时长、不同犬种的典型美容预约频率的见解。
在此示例中,您在 Snowflake Marketplace 上提供了重要数据,但向已经拥有可信业务关系的组织提供了更具体的见解。
准备提供受限试用列表¶
受限试用列表允许您提供数据产品样本的免费试用,让使用者深入了解完整数据产品可能提供的内容,或者在限定时间内访问您的完整数据产品。提供商可以将受限试用列表的可用期设置为 1 到 90 天。有关受限试用列表的更多信息,请参阅 受限试用列表。
如您选择提供完整数据产品的样本,则样本数据产品最好提供完整数据产品中所含真实数据的子集,并通过以下方式代表完整数据产品:
包含相同的列。
包含数据中相同或相似的值范围和值分布。
受限试用列表包含一个数据词典,因此应能从您提供的样本数据产品中清晰地了解完整数据产品中数据的整体情况。
例如,如果贵公司是训犬和犬类美容公司,则可以考虑提供以下样本数据产品之一,并提供受限试用列表:
样本数据产品推荐 |
样本数据产品示例 |
完整数据产品示例 |
---|---|---|
包含数据的特定完整属性的完整数据集。 |
包含标准贵宾犬的最新美容见解。 |
包含所有犬种的最新美容见解。 |
包含特定、已过时时间段的完整数据集。 |
包含 2021 年 5 月起所有犬种的美容见解和价格。 |
包含所有犬种的最新美容见解和价格。 |
包含代表完整数据产品的虚构数据。 |
包含有关训练虚构的阿卡迪亚猎犬的最新见解和价格。 |
包含有关训练所有犬种的最新见解和价格。 |
将完整数据产品的相关完整子集作为受限试用列表的样本数据产品提供,可帮助使用者了解您的完整数据产品的价值,也让他们更有可能申请完整数据产品。
限制试用使用者使用 Snowflake Native App 的功能¶
If you offer your Snowflake Native App on the Snowflake Marketplace as a limited trial listing and want to limit the functionality available to trial consumers, use the SYSTEM$IS_LISTING_TRIAL system function when creating secure views, secure UDFs, or Streamlit apps included in your Snowflake Native App.
使用系统函数来控制数据和 UDF 输出的可见性意味着您不必维护单独的应用程序包来将功能限制给试用使用者。
您可以限制以下各项的功能:
安全视图
安全的用户定义函数 (UDF)
应用程序逻辑,例如安装脚本或 Streamlit 应用程序。
有关将数据内容或 UDFs 添加到应用程序包的更多信息,请参阅:
示例 1:在试用中将视图中的不同数据返回给使用者¶
要定义仅向有权访问 Snowflake Native App 完整版本的使用者返回数据的安全视图,可以使用以下示例代码:
CREATE OR REPLACE SECURE VIEW limited_functionality_view
AS
SELECT *
FROM db_name.schema_name.table_name
WHERE SYSTEM$IS_LISTING_TRIAL() = false;
如果试用您的 Snowflake Native App 的使用者尝试查询视图,他们将看不到任何结果。
示例 2:仅向非试用使用者显示安全 SQL UDF 的输出¶
要定义仅向有权访问 Snowflake Native App 完整版本的使用者返回结果的安全 SQL UDF shared_function()
,可以使用以下示例代码:
CREATE OR REPLACE SECURE FUNCTION schema_name.shared_function()
RETURNS VARCHAR
AS
$$
CASE
WHEN SYSTEM$IS_LISTING_TRIAL() = FALSE
THEN 'full product'
ELSE 'trial'
END
$$;
在此示例中,如果使用者正在试用您的 Snowflake Native App,在调用安全 UDF 时,他们会看到输出 trial
。
示例 3:向试用使用者展示不同的 Streamlit UI¶
您还可以调用 Streamlit 应用程序内部的系统函数,以在 Snowflake Native App 中限制 Streamlit 应用程序的功能。例如,您可以在 UI 中向试用您的 Snowflake Native App 使用者显示一个标题,向对 Snowflake Native App 拥有完全访问权限的使用者显示另一个标题。
# Import python packages
import streamlit as st
from snowflake.snowpark.context import get_active_session
session = get_active_session()
# Here we assign result of our function to a variable
result = session.sql("SELECT SYSTEM$IS_LISTING__TRIAL()")
# Write directly to the app
if result:
st.title("Enjoy your limited trial of this application!")
else:
st.title("Welcome to the full version of this application!")
准备提供付费列表¶
如果您想为列表收费,必须执行以下操作:
可以在何处发布付费列表¶
只有特定区域的提供商可以发布付费列表。请参阅 谁可以提供付费列表。
此外,付费列表只能发布到特定区域。请参阅 支持的使用者所在地,了解可以向哪些区域发布付费列表。