从纯粹的技术角度来看,在我看来,您可以在您的 Snowflake 帐户中为您的每个客户创建一个用户,并正确设置他们的权限,以便他们可以写入一个或多个表并从一个或多个表或视图中读取。
例如,假设您的主数据库是 X,它包含表 E1 和 E2,每个表都有针对所有客户的增强数据。同时,您希望用户能够将数据传送到表 I1 和 I2。为客户 A 和 B 执行此操作的一种方法是:
数据库 X
数据库 A(针对客户 A)
- 表 I1、I2(供客户写入)
- 安全视图 V1、V2(提供来自 X.E1 和 X.E2 的相关列,过滤给客户 A)
数据库 B(针对客户 B)
- 表 I1、I2(供客户写入)
- 安全视图 V1、V2(提供来自 X.E1 和 X.E2 的相关列,过滤给客户 B)
您甚至可以为所有 I 表打开流,然后设置任务以从它们中获取数据、增强数据并将其添加到数据库 X 中的 E 表中。
显然,您需要确保用户只能看到他们被允许看到的数据,包括看不到其他人写入入站表的数据(I),这就是为什么我建议为每个人设置一个单独的数据库顾客。您可以改为使用模式,或者如果您真的想要,您可以在一个模式中完成所有操作,但在我看来,如果您至少将客户放在不同的模式中,安全性会更容易。这样,您可以拥有一个脚本,在给定客户名称的情况下,它可以一次性创建新架构、表、视图、流、任务和角色。
而且,当然,与您的客户团队交谈可能是值得的,尽管如果 Snowflake 坚持让您的客户成为此特定用例的 Snowflake 客户,我会感到惊讶。