为列表准备数据

本主题包含列表创建准备工作指南,包括如何为不同类型的列表准备数据产品。

本主题内容:

准备创建列表

在创建列表之前,请执行以下操作:

  1. 确定如何提供数据产品。请参阅 列表可用性选项列表访问选项

  2. 设置角色和权限以简化列表的创建。请参阅 为列表设置角色和权限

  3. 确定要共享的对象。请参阅 确定列表内容

  4. 准备要与他人共享的对象。请参阅 为列表准备共享

  5. 确定要如何管理对数据产品的访问:

    • 免费提供访问权限,并且无限制。

    • 创建付费列表,为您的列表收取费用。请参阅 准备提供付费列表

    • 免费试用提供对数据产品的受限访问权限,然后可按请求提供对数据产品的无限制访问权限。请参阅 准备提供受限试用列表

  6. 选择您要在哪个云区域提供列表。请参阅 为在其他区域共享准备列表

列表和数据共享必须符合 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 上提供了重要数据,但向已经拥有可信业务关系的组织提供了更具体的见解。

为列表准备共享

You can create a share before creating a listing, or select the database, tables, and views to comprise your data product when you create the listing. See 创建和配置共享.

如果您计划提供许多列表,请分别创建共享和列表,以便更轻松地管理数据产品。您不能从同一共享中提供多个列表。

考虑如何更新共享

考虑共享中数据的维护。随着时间的推移,您希望在列表中提供的信息会发生变化,此时您可能需要更改数据共享。

您还需要考虑如何更新共享中的数据,并确保共享的内容对使用者有用。

如果删除并在后续重新创建共享中的对象,则需要将重新创建的对象添加到共享中,这样使用者才能继续使用它们。例如,如果为了刷新共享中的某些数据,您删除并重新创建了数据库中的某个表,则需要更新共享以包含重新创建的表。

准备要共享的数据

准备要在列表中共享的数据,以便与他人共享。

  • Use unquoted object identifiers for tables, columns, and share names. Use only upper case and alphanumeric characters for object names to let listing consumers use the shared data objects without having to double-quote identifiers. See 标识符要求.

  • Protect sensitive data in shared databases. Create secure views and use secure objects to control access to data. See 使用安全对象控制数据访问

  • 您可以将已与使用者账户共享(例如通过直接共享)的共享添加到列表中。

  • 一个共享只能附加到一个列表。如果某个共享已附加到某个列表,即便在删除此列表后,您仍然无法将其附加到其他列表。

  • Do not use account-level roles to protect data, such as with a policy or a secure view definition. Auto-fulfillment does not replicate account-level roles. For more information about this restriction, see 依赖于账户角色的对象的自动履行. Instead, use database roles and the IS_DATABASE_ROLE_IN_SESSION system function. For more information, see 共享受策略保护的数据.

准备提供受限试用列表

受限试用列表允许您提供数据产品样本的免费试用,让使用者深入了解完整数据产品可能提供的内容,或者在限定时间内访问您的完整数据产品。提供商可以将受限试用列表的可用期设置为 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;
Copy

如果试用您的 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
  $$;
Copy

在此示例中,如果使用者正在试用您的 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!")
Copy

准备提供付费列表

如果您想为列表收费,必须执行以下操作:

  1. 确定您能否提供付费列表。请参阅 谁可以提供付费列表

  2. 准备数据以提供数据试用。请参阅 为付费列表准备共享

  3. 确定最适合您的列表的定价方案。请参阅 付费列表定价模式,查看可用定价方案。

可以在何处发布付费列表

只有特定区域的提供商可以发布付费列表。请参阅 谁可以提供付费列表

此外,付费列表只能发布到特定区域。请参阅 支持的使用者所在地,了解可以向哪些区域发布付费列表。

为付费列表准备共享

当您在 Snowflake Marketplace 上提供付费列表时,必须允许使用者在购买之前试用该列表。付费私密列表没有强制性试用要求。在试用中,您可以限制使用者,仅允许其使用特定数据和功能、特定时间段或组合。

If you choose to limit trial consumers to specific data and functionality, create a single share for your paid listing and use secure views and a system function provided by Snowflake, SYSTEM$IS_LISTING_PURCHASED, to control which data is visible to trial consumers and which data is available only to paying consumers.

备注

如果您的列表包含安全的用户定义函数 (UDF),则无法限制 UDF 的可见性。列表的付费客户和试用客户均可安全查看 UDF。

请参阅以下示例,创建自己的安全视图,以便向付费使用者和试用使用者显示不同的数据。

如果您想允许试用使用者在限定时长内使用列表中的所有数据,请勿在共享的视图定义中使用 SYSTEM$IS_LISTING_PURCHASED 函数。

示例 1:基于账户购买状态返回数据

创建选择表中全部列的安全视图。只有在已购买付费列表的使用者账户中执行查询时,该视图才会返回行。

CREATE SECURE VIEW paid_v
  AS
  SELECT
    *
  FROM
    paid_t
  WHERE
    SYSTEM$IS_LISTING_PURCHASED() = TRUE;
Copy

示例 2:基于账户购买状态返回部分行

创建一个安全视图,根据数据中特定列的布尔值返回行子集。在此示例中,基础表包含一个名为 is_free 的列,用于确定向哪些使用者显示哪些数据。

有些行的 is_free 设置为 TRUE,表示可以向试用用户显示这些行中的数据。其他行的 is_free 设置为 FALSE,表示这些行中的数据应仅向付费使用者显示。

根据此示例视图的设置,仅有已购买付费列表的使用者账户进行查询时才返回所有行,否则仅返回 is_free 设置为 TRUE 的行。

CREATE SECURE VIEW paid_v
  AS
  SELECT
    *
  FROM
    paid_t
  WHERE
    is_free
    OR
    SYSTEM$IS_LISTING_PURCHASED() = TRUE;
Copy

示例 3:基于账户购买状态仅返回最新行

创建一个安全视图,仅将过去 7 天的行返回给处于试用期但尚未购买付费列表的使用者账户。

此示例使用具有时间戳数据类型的列来筛选数据,但可以在安全视图定义中使用其他列数据类型。

CREATE SECURE VIEW paid_v
  AS
  SELECT *
  FROM
    paid_t
  WHERE
    (timestamp > current_timestamp() - interval '7 days')
    OR
    SYSTEM$IS_LISTING_PURCHASED() = TRUE;
Copy

验证付费数据和试用数据的安全视图

准备好安全视图后,模拟付费和试用使用者账户的体验,验证您的设置是否正确。对安全视图运行查询,以确认每种类型的使用者访问的数据均符合预期。

重要

这种方法无法验证使用者能否安全地访问数据。此方法仅验证对于使用者而言,共享能否按预期运作。

要验证共享,请使用 SHARE_CONTEXT(SYSTEM$IS_LISTING_PURCHASED) 对安全视图执行查询:

EXECUTE USING SHARE_CONTEXT(SYSTEM$IS_LISTING_PURCHASED=>{ 'TRUE' | 'FALSE' })
  AS <query>
Copy

其中:

  • SYSTEM$IS_LISTING_PURCHASED 指定要以付费使用者身份进行验证,还是要以试用或非付费使用者身份进行验证。有效值为:

    • TRUE,以付费使用者身份验证共享。

    • FALSE,以试用或非付费使用者身份验证共享。

  • <query> 是您要针对安全视图运行的 SQL 查询。

使用该命令运行查询时,将以使用者身份对共享执行查询。

例如,假设有一个要验证的共享。共享包含一个名为 PURCHASED_VIEW 的安全视图,该视图可保护名为 SHARE_TABLE 的表中的所有数据。您要验证是否仅有已购买列表的使用者才能访问这些数据。

要确认试用使用者无法访问安全视图中的任何数据,请运行以下查询:

EXECUTE USING share_context(system$is_listing_purchased=>'FALSE')
  AS
    SELECT
      *
    FROM
      example_database.example_schema.PURCHASED_VIEW
Copy

如果安全视图按预期运行,并且试用使用者无法访问任何数据,此查询将返回以下响应:

Query produced no results
Copy

要确认付费使用者有权访问数据,请运行以下查询:

EXECUTE USING share_context(system$is_listing_purchased=>'TRUE')
  AS
    SELECT
      *
    FROM
      example_database.example_schema.PURCHASED_VIEW
Copy

如果安全视图按预期运行,则查询将返回 SHARE_TABLE 中的所有列和行,这是付费使用者需要的结果。

为在其他区域共享准备列表

配置列表时,您可以选择在不同的区域提供列表。要在其他区域提供列表,需要复制数据。

考虑复制数据所需的时间和相关费用。

  • For a listing in the Snowflake Marketplace, you can choose which regions to make your listing available in. When you do, you can manually replicate the data or use auto-fulfillment to make your product available to consumers that get your listing. See 手动复制数据以履行列表请求 or 列表的自动履行 for more details.

  • For a private listing, you need to share your listing to the regions where your consumer's accounts are. You use auto-fulfillment to replicate the product to the consumers that get your listing. See 列表的自动履行 for more details.

All cross-region data sharing at Snowflake uses Snowflake's data replication functionality. See 跨区域和云平台安全共享数据.

语言: 中文