开发者生态
morning
基于雪花语义视图构建自助式报表数据集市|技术实践
2026-05-27
1 阅读
Sabrina Liu
2026 年,智能体将在企业级应用中取得哪些实质性突破? 点击下载 "《2026 年 AI 与数据发展预测》白皮书,获悉专家一手前瞻,抢先拥抱新的工作方式! 业务用户总是想要新的东西,而且想要得很快。今天上午按区域拆分,午饭后按季度看趋势,下班前按部门做透视。传统的请求、开发、测试和部署周期根本跟不上现代分析需求的节奏。如果我们把交付的概念改成一个始终可用、并且保留完整审计轨迹的自助式报表集市,会怎样? 本文介绍了一种创新方法,可以在 Snowflake 中以极低的管理开销自动处理大多数临时报表请求。通过将 Snowflake Semantic Views 与 Streamlit 界面结合起来,我们把报表创建的能力直接交到业务用户手中。无需提交工单,无需等待。 这个解决方案的亮点如下。设置大约只需要五分钟。只需克隆代码仓库并部署到你的 Snowflake 账户。业务用户可以通过直观的 UI 自助使用。报表可以即时交付、完全可配置,并且系统会记住用户创建过的每一份报表,方便以后访问。 该解决方案利用了多项 Snowflake 原生能力。Snowflake 中的 Streamlit 提供应用层。Semantic Views 提供驱动 UI 的结构化元数据。Cortex Analyst 支持一个可选的自然语言 Agent。而整个解决方案都是使用 Snowflake Cortex Code 编写的,这是 Snowflake 自家的 agentic AI 编码助手。 所需访问权限 这个解决方案涉及两个角色:一个用于部署和维护应用的开发者角色,以及一个供业务用户使用应用的用户角色。 开发者角色权限 开发者角色需要以下权限来创建和管理 Streamlit 应用、semantic views、sequences 以及底层对象。这里假设该角色已经对所需的数据库、schema 和 warehouse 拥有 USAGE 权限,并且对所需的报表表和 semantic views 拥有 SELECT 权限。 -- Set these session variables before running SET dev_role = 'YOUR_DEV_ROLE'; SET use_database = 'YOUR_DATABASE'; SET use_schema = 'YOUR_SCHEMA'; SET app_schema = $use_database || '.' || $use_schema; -- Object creation privileges GRANT CREATE TABLE , CREATE SEQUENCE , CREATE SEMANTIC VIEW , CREATE STREAMLIT ON SCHEMA IDENTIFIER($app_schema) TO ROLE IDENTIFIER($dev_role); -- Cortex Analyst (for the optional Cortex Agent tab) GRANT DATABASE ROLE SNOWFLAKE.CORTEX_USER TO ROLE IDENTIFIER($dev_role); 使用开发者角色在应用 schema 中配置以下 sequence 对象和主配置表,用于记录保存: -- Sequence for report IDs (create once, shared among all users) CREATE SEQUENCE IF NOT EXISTS REPORT_MART_CONFIG_SEQ START = 1 INCREMENT = 1; -- Master config history table (shared audit log) CREATE TABLE IF NOT EXISTS REPORT_MART_MASTER_CONFIG_HISTORY ( REPORT_ID NUMBER(38,0), REPORT_NAME VARCHAR(500), REQUEST_TIMESTAMP TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP(), REQUEST_USER VARCHAR(255) DEFAULT CURRENT_USER(), SEMANTIC_VIEW VARCHAR(500), TABLE_NAME VARCHAR(500), TIME_DIMENSION VARCHAR(255), START_DATE VARCHAR(20), END_DATE VARCHAR(20), AGG_WINDOW VARCHAR(20), GROUP_COL VARCHAR(255), EXCLUDE_VALS VARCHAR(2000), MEASURES VARCHAR(2000), AGGREGATION VARCHAR(50), INCLUDE_NULLS BOOLEAN, CHART_TYPE VARCHAR(50), SHOW_ALL_AVAILABLE BOOLEAN, ADD_ACCUMULATIVE BOOLEAN, GENERATED_SQL TEXT, ACTION VARCHAR(10) ); 用户角色权限 用户角色需要以下权限来运行 Streamlit 应用、查询表和 semantic views,并将报表配置保存到自己的个人配置表中。这里同样假设该角色已经像开发者角色一样具备必要的 USAGE 和 SELECT 权限。 用户角色需要能够创建基于用户的报表配置表,在个人配置表中追加/移除记录,并在主配置表中追加记录。在这个演示中,sequence 对象和主配置表名称都硬编码在应用定义中。 -- Set these session variables before running SET user_role = 'YOUR_USER_ROLE'; SET tbl_conf = $app_schema||'.REPORT_MART_MASTER_CONFIG_HISTORY'; SET seq_conf = $app_schema || '.REPORT_MART_CONFIG_SEQ'; SET app_name = $app_schema || '.' || 'YOUR_APP_NAME'; -- Create personal config tables (one per user) GRANT CREATE TABLE ON SCHEMA IDENTIFIER($app_schema) TO ROLE IDENTIFIER($user_role); -- Write access for personal config tables GRANT INSERT ON TABLE IDENTIFIER($tbl_conf) TO ROLE IDENTIFIER($user_role); -- Sequence usage for report IDs GRANT USAGE ON SEQUENCE IDENTIFIER($s