Salesforce 数据分析解决方案:Snowflake & Tableau

Posted by Peter Dong on February 4, 2023

在 Salesforce 项目中,随着业务的不断增长,随之产生的数据量也越来越庞大,有的项目可能每年就会产生几千万甚至上亿条的数据,而这些数据随着时间推移逐渐变成历史数据,而这些数据也不想删除,因为历史数据可能还是要时常进行数据分析,产生各种报表,看看近几年的销售数据的走势。对于上亿条的数据,Salesforce 是没有办法保存的 ( 可以使用 Big Objects, 参考我之前的文章 ), 更没有办法通过 Salesforce 报表来分析。接下来我会介绍两种工具或平台,主要作用是用于数据的归档和分析。

Snowflake 是什么?

Snowflake 是一种计算和存储分离的云数据仓库一个数据仓库,它提供了一个灵活,可扩展和安全的解决方案,用于存储,处理和分析数据。它将传统的数据仓库与云计算技术结合起来,可以适应不断变化的数据需求.Snowflake 支持多种数据源和数据类型,可以在云中运行,为数据分析和数据工程师提供了更多的灵活性和可用性。

在 Snowflake 中,数据存储在云存储中,而计算则通过 Snowflake 的计算节点进行。这种分离计算和存储的架构使得 Snowflake 具有更高的灵活性和可伸缩性,可以适应不断变化的数据需求。此外,用户只需要支付实际使用的计算资源,而不必担心存储空间的限制。

Snowflake 的优势

  • 云计算: Snowflake 是一种云数据仓库,具有较高的可扩展性和可靠性。
  • 计算和存储分离: Snowflake 使用计算和存储分离的架构,使用者可以根据需要动态扩展计算和存储资源。
  • 支持多种数据源: Snowflake 支持多种数据源,包括结构化,半结构化和非结构化数据,使用者可以方便地管理不同类型的数据。
  • 高效的数据分析: Snowflake 提供了高效的数据分析功能,支持大规模数据的实时分析。
  • 数据分享: Snowflake 提供了方便的数据分享功能,可以安全地在多个组织间共享数据。

Snowflake 的劣势

  • 运维成本较高:Snowflake 是一种云数据仓库,需要相对较高的运维成本。
  • 安全性:Snowflake 存储的数据需要放在云端,需要考虑数据的安全性问题。
  • 数据传输成本:由于 Snowflake 存储的数据在云端,数据的传输成本较高。
  • 与现有系统的集成:Snowflake 是一种新兴的云数据仓库,与现有系统的集成可能有一定难度。

Tableau 是什么

Salesforce 是在 2019 年 06 月 10 日宣布收购 Tableau. 它是一个专业的数据可视化软件,可以帮助用户快速创建和共享交互式的图形,以对数据进行分析和可视化。Tableau 可以连接到各种数据源 (比如 Snowflake), 并使用其强大的图形和图表功能帮助用户探索数据,挖掘有价值的洞察力。

Tableau 的优势

  • 可视化功能:Tableau 拥有丰富的数据可视化功能,可以创建各种图表,帮助用户快速理解和分析数据。
  • 易用性:它拥有易于使用的界面和拖放功能,使得非技术人员也能创建引人入胜的数据可视化。
  • 数据连接:Tableau 可以连接多种数据源,包括 Excel, SQL Server, Oracle, Salesforce 等。
  • 实时分析:Tableau 可以对实时数据进行分析,帮助用户及时了解数据的情况。
  • 分享功能:Tableau 可以轻松分享分析结果和数据可视化,并可以在云端或其他平台上共享,以便多人协作分析数据。

Tableau 的劣势

  • 高昂的价格:Tableau 的许多功能都以高昂的价格提供,这可能不适合那些预算有限的公司或个人
  • 学习曲线较高:学习和使用 Tableau 可能需要一些时间和练习,特别是对于那些没有数据分析经验的人。
  • 资源需求较高:使用 Tableau 可能需要更强的计算机硬件和内存,特别是当处理大量数据时。

与 Salesforce 集成

场景:将 Salesforce 的数据进行归档,同步至云数据仓库 Snowflake 中,然后通过 Tableau 连接 Snowflake 并作为数据源来展示 Salesforce 数据,最后进行数据分析。

我们来看下 Snowflake 官方给出的整体架构示意图:

img

准备

Snowflake 环境的配置

Snowflake 账户注册完成之后,登陆到主页面,让我们先点击 Worksheet , Worksheet 的主要作用是在交互式环境中执行 SQL 命令和查询。它提供了一个简单的界面,使用户能够快速测试 SQL 语句,并实时显示查询结果。因此,Snowflake Worksheet 对于数据分析和快速查询数据非常有用。如图所示:

img

我们可以重新修改 Worksheet 的名字:

img

创建 Snowflake 相关对象

因为我们需要将 Salesforce 数据同步到 Snowflake, 所以我们需要为此创建相关的 Role, User, Warehouse, Database, Scheme 等,这样做的好处是:我们可以更好的控制权限,每个流程都对应特定的用户和权限,方便管理,而不是都使用 Admin 的角色去做数据同步和集成。

将当前角色切换为 SECURITYADMIN:

SECURITYADMIN 角色是 Snowflake 中的系统管理员角色。它拥有执行 Snowflake 安全管理任务的所有权限,包括创建,修改和删除角色,授予和撤销权限,管理用户,管理防火墙规则等。因此最好为少数受信任的用户分配该角色。我们会使用这个角色为我们的数据集成创建特定的角色和用户等。

img

在交互环境中执行如下 SQL 命令,以下 SQL 会创建一个新的角色叫 CRM_ANALYST_ROLE, 而且 SYSADMIN 角色将拥有 CRM_ANALYST_ROLE 角色的所有权限。

1
2
3
4
-- 创建角色 CRM_ANALYST_ROLE
CREATE OR REPLACE ROLE CRM_ANALYST_ROLE COMMENT='CRM ANALYST ROLE';
-- 将 CRM_ANALYST_ROLE 角色授权给 SYSADMIN
GRANT ROLE CRM_ANALYST_ROLE TO ROLE SYSADMIN;

执行以下 SQL 命令创建一个 User, 并将 CRM_ANALYST_ROLE 角色赋予用户 CRM_ANALYST. 请记住该用户名和密码,在之后 Salesforce 和 Tableau 集成中需要用到。

1
2
3
4
5
6
7
8
-- 创建用户和密码
CREATE OR REPLACE USER CRM_ANALYST PASSWORD='CRMSnowflake001' 
    DEFAULT_ROLE=CRM_ANALYST_ROLE 
    DEFAULT_WAREHOUSE=CRM_WH
    DEFAULT_NAMESPACE=CRM_DB.PUBLIC
    MUST_CHANGE_PASSWORD = FALSE
    COMMENT='CRM ANALYST';
GRANT ROLE CRM_ANALYST_ROLE TO USER CRM_ANALYST;

将当前角色切换为 SYSADMIN:

这里解释下为什么要切换角色:

SYSADMIN 角色具有对整个 Snowflake 实例的最高管理权限,可以执行任何操作,例如创建,修改或删除数据仓库,数据库,账户等.

SECURITYADMIN 角色具有管理 Snowflake 安全的权限,但不能执行所有操作,例如创建,修改或删除数据库。他们可以管理安全性相关的内容,例如创建和管理用户,角色,权限和安全策略.

因此,SYSADMIN 角色拥有比 SECURITYADMIN 角色更多的权限。

可以通过 UI 切换角色,也可以通过以下 SQL 命令:

1
2
-- 切换 SYSADMIN 角色
USE ROLE SYSADMIN;

创建 Database 和 scheme, 将来 Salesforce 同步的数据将会存入到该数据库里

1
2
3
4
-- 创建数据库 CRM_DB
CREATE OR REPLACE DATABASE CRM_DB;
-- 创建 SCHEMA SALESFORCE
CREATE OR REPLACE SCHEMA CRM_DB.SALESFORCE;

授予 CRM_ANALYST_ROLE 在这些结构上的必要权限:

1
2
3
4
-- 将 CRM_DB 数据库的使用权限授予 CRM_ANALYST_ROLE 角色。这意味着 CRM_ANALYST_ROLE 角色现在可以连接到 CRM_DB 数据库并对其进行查询,但是不能执行任何写入操作
GRANT USAGE ON DATABASE CRM_DB TO ROLE CRM_ANALYST_ROLE;
-- 将 CRM_DB.SALESFORCE 的所有权限授予 CRM_ANALYST_ROLE 角色。这意味着 CRM_ANALYST_ROLE 角色现在可以对 CRM_DB.SALESFORCE 进行读取和写入操作,包括对数据表,字段,索引,视图等进行修改。
GRANT ALL ON SCHEMA CRM_DB.SALESFORCE TO ROLE CRM_ANALYST_ROLE;

接下来我们将创建一个 Snowflake WAREHOUSE, 我们还将在 WAREHOUSE 上授予 CRM_ANALYST_ROLE 使用权限:

在 Snowflake 中,WAREHOUSE 是一个计算集群,可以根据需要即时启动/停止或扩大/缩小。WAREHOUSE 只执行计算工作,而所有的数据都管理和存储在 DATABASES 中,因为 Snowflake 在存储和计算之间完全分离,允许快速和灵活的独立扩展。

1
2
3
4
5
6
CREATE OR REPLACE WAREHOUSE CRM_WH
      WITH WAREHOUSE_SIZE = 'XSMALL'
      AUTO_SUSPEND = 300
      AUTO_RESUME = TRUE;

GRANT USAGE ON WAREHOUSE CRM_WH TO ROLE CRM_ANALYST_ROLE;

Salesforce 环境配置

在 Salesforce 中,点击 Setup, 在快速查找栏中,输入 Analytics.点击 Settings.

img

在 Salesforce 中,打开 Analytics Studio, 点击 Data Manager

img img

在 Data Manager 界面,点击 New Connection:

img

然后选择 Output, 选中 Snowflake Output Connector

img

然后根据之前在 Snowflake 中的配置,填入如下信息:

img

Note: 通过查看登录到 Snowflake 用户界面的浏览器标签中的 URL, 可以找到 Snowflake 账户名称。复制 https:// 之后和 snowflakecomputing.com 之前的字符,即 https://abcd123.us-east-1.snowflakecomputing.com, Account name 将是 abcd123.us-east-1.

配置 Connection Sync out:

img img

然后选择需要同步的对象,比如 Account, 可以选择增量同步,或者全量同步。

img

同步完成之后,登陆 Snowflake, 执行如下 SQL 查询结果:

1
select * from  crm_db.salesforce.account

如图所示:

img

至此,我们已经成功将 Salesforce 的数据同步至 Snowflake.

配置 Tableau

打开 Tableau 软件,点击 更多

img

在搜索框中输入 Snowflake 并点击。

img

输入用户名密码等信息,该信息来自之前创建的 Snowflake 对象。

img

登陆成功之后,选择创建的数据库,scheme 和 table:

img

打开新的工作表,我们可以选中需要查看的字段,至此 Salesforce 的 Account 数据就会展示在 Tableau 的页面上。

img


Buy Me a Coffee