Presto 的 CREATE VIEW 语句完全指南:语法、安全模式与实战示例
大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载导读本文基于 Presto 官方文档 presto-docs/src/main/sphinx/sql/create-view.rst系统讲解 Presto 中视图View的创建语法、DEFINER/INVOKER两种安全模式的差异与配置方法并结合当前仓库的语法解析源码SqlBase.g4与配置实现FeaturesConfig.java进行纵深剖析。读完本文你将掌握CREATE VIEW/CREATE OR REPLACE VIEW的完整语法与使用场景、如何通过会话属性或服务端配置设置默认视图安全模式以及视图与普通表的本质区别。一、视图是什么逻辑表而非数据副本在 Presto 中视图View本质上是一个逻辑表logical table它本身不保存任何数据而是把一条SELECT查询语句存储下来。当视图被其他查询引用时Presto 会每次重新执行该视图背后存储的查询而不是读取一份预先物化的数据。CREATE [ OR REPLACE ] VIEW view_name [ SECURITY { DEFINER | INVOKER } ] AS query这一设计与物化视图Materialized View形成鲜明对比物化视图会真正落盘存储查询结果见 create-materialized-view 相关文档而普通视图只是存储的查询。因此视图天然具备两个特性实时性每次被引用都重新执行底层查询看到的是最新数据零存储成本不占用额外存储空间代价是每次访问都要付出查询执行的开销。从语法解析器的角度看CREATE VIEW在 SqlBase.g4 中被定义为| CREATE (OR REPLACE)? VIEW qualifiedName viewSecurity? AS query #createView可以看到OR REPLACE与SECURITY子句均为可选视图名必须是qualifiedName支持 schema 限定名AS之后紧跟一条完整的query。二、完整语法与 OR REPLACE 语义2.1 SynopsisCREATE [ OR REPLACE ] VIEW view_name [ SECURITY { DEFINER | INVOKER } ] AS query各部分含义语法片段说明CREATE VIEW view_name创建一个新视图若同名视图已存在默认报错CREATE OR REPLACE VIEW若视图已存在则替换覆盖之而不是抛出错误SECURITY DEFINER视图安全模式以视图拥有者权限访问底层表默认SECURITY INVOKER视图安全模式以查询执行用户权限访问底层表AS query视图背后存储的 SELECT 查询可以是任意合法的查询表达式2.2 OR REPLACE 的替换语义OR REPLACE子句解决的是视图已存在这一冲突场景不带该子句时创建同名视图会直接报错带上后Presto 会用新的查询定义覆盖旧视图常用于迭代式地调整视图定义而不必先执行DROP VIEW再重建。在语法解析器中CREATE (OR REPLACE)? VIEW将OR REPLACE标记为可选?当用户输入CREATE OR REPLACE VIEW ...时命中createView规则解析器会为OR REPLACE生成对应的 AST 节点供后续分析器判断是新建还是替换。2.3 视图名的限定view_name使用qualifiedName规则即可以写成schema.view_name或catalog.schema.view_name的限定形式。若不指定 schema则默认创建在当前会话的默认 schema 下。三、视图安全模式DEFINER 与 INVOKER视图安全模式决定了视图内部引用的表以谁的权限来访问这是视图安全模型的核心也是原文档重点阐述的内容。3.1 DEFINER 模式默认在默认的DEFINER模式下视图中引用的表使用**视图拥有者创建者/定义者**的权限来访问而不是执行查询的用户因此可以借助视图向不能直接访问底层表的用户提供受限访问能力例如只暴露某些列或经过过滤的行需要注意current_user函数返回的是当前查询用户而不是视图拥有者。这意味着可以在视图查询中通过current_user过滤行、按用户限制访问范围从而实现更细粒度的行级安全。典型用法示例在原文档示例基础上延伸-- 视图拥有者创建只暴露已发货的订单 CREATE VIEW shipped_orders AS SELECT orderkey, orderstatus, totalprice FROM orders WHERE orderstatus F; -- 结合 current_user 做按用户过滤限制每个用户只能看到自己的数据 CREATE VIEW my_orders AS SELECT orderkey, orderstatus, totalprice FROM orders WHERE customer current_user;这样即使普通用户没有orders表的直接 SELECT 权限也能通过视图查询到被授权暴露的数据子集。3.2 INVOKER 模式在INVOKER模式下视图中引用的表使用**查询执行用户调用者**的权限访问视图仅仅是一个存储的查询不带来任何额外的权限提升适合需要严格遵循调用者权限边界的场景避免视图成为权限绕过的通道。3.3 安全模式的语法解析SECURITY { DEFINER | INVOKER }在语法上被抽为独立的viewSecurity规则见 SqlBase.g4viewSecurity : SECURITY (DEFINER | INVOKER) ;该规则不仅被CREATE VIEW复用也被CREATE MATERIALIZED VIEW使用SqlBase.g4 第 103 行说明两种视图共享同一套安全模式机制。四、配置默认视图安全模式4.1 会话级别推荐即开即用不指定SECURITY子句时视图默认安全模式由default-view-security-mode决定。可以在会话中临时修改SET SESSION default_view_security_modeINVOKER此后在该会话中创建的、未显式声明SECURITY的视图将默认采用INVOKER模式。原文档给出的这一示例即为此用法。4.2 服务端全局配置除了会话级设置Presto 还支持在协调节点的config.properties中通过配置项default-view-security-mode全局设定默认值。从源码看FeaturesConfig.javaConfig(default-view-security-mode) ConfigDescription(Sets the default security mode for view creation. The options are definer/invoker.) public FeaturesConfig setDefaultViewSecurityMode(ViewSecurity securityMode) { this.defaultViewSecurityMode securityMode; return this; }关键实现事实配置键名为default-view-security-mode取值只能是definer或invoker源码注释明确 The options are definer/invoker默认值为DEFINERFeaturesConfig.java 第 338 行private ViewSecurity defaultViewSecurityMode DEFINER;该配置项在 properties-session 文档 与 properties 文档 中均有登记属于features类别下的会话可配置属性。因此实际使用中有三条途径设定默认安全模式优先级从高到低依次为SQL 中显式的SECURITY子句 会话属性default_view_security_mode 服务端配置default-view-security-mode。五、实战示例以下示例全部来自原文档并保持可复制可运行示例 1基于 orders 表创建简单视图CREATE VIEW test AS SELECT orderkey, orderstatus, totalprice / 2 AS half FROM orders示例 2按日期汇总订单CREATE VIEW orders_by_date AS SELECT orderdate, sum(totalprice) AS price FROM orders GROUP BY orderdate示例 3替换已存在的视图CREATE OR REPLACE VIEW test AS SELECT orderkey, orderstatus, totalprice / 4 AS quarter FROM orders示例 4显式指定安全模式创建视图CREATE VIEW restricted_orders SECURITY DEFINER AS SELECT orderkey, orderstatus FROM orders WHERE customer current_user;示例 5将会话默认安全模式切换为 INVOKERSET SESSION default_view_security_modeINVOKER六、视图的配套操作与测试验证6.1 相关 SQL 语句视图的完整生命周期由三兄弟语句覆盖均位于presto-docs/src/main/sphinx/sql/目录语句文档位置功能CREATE VIEWcreate-view.rst创建/替换视图DROP VIEWdrop-view.rst删除视图支持DROP VIEW [ IF EXISTS ] view_nameSHOW CREATE VIEWshow-create-view.rst查看视图的创建语句例如删除前文示例创建的视图DROP VIEW orders_by_date; DROP VIEW IF EXISTS orders_by_date; -- 视图不存在时不报错6.2 测试层面的支撑在仓库的分布式查询测试基类 AbstractTestDistributedQueries.java 中包含对CREATE VIEW相关行为含安全模式与OR REPLACE语义的集成测试可作为验证本文所述语法的参考用例物化视图相关测试如 TestCreateMaterializedViewTask.java、TestMaterializedViewAccessControl.java则印证了viewSecurity规则在普通视图与物化视图之间的共用关系。七、易错点与最佳实践小结视图不存数据每次引用都会重跑底层查询不适合作为高频低延迟的缓存层需要缓存时考虑物化视图。OR REPLACE只能替换、不能改权限语义替换视图时若未显式写SECURITY子句新视图的安全模式由当时的默认模式决定建议替换时显式声明避免语义漂移。DEFINER模式是双刃剑它能向低权限用户安全暴露数据子集但也意味着视图本身成为权限边界务必确保视图内查询不会泄露超出预期的数据善用current_user做行级过滤。默认模式可全局收敛若团队希望统一使用INVOKER可在协调节点config.properties中设置default-view-security-modeinvoker从源头收紧视图的默认权限模型。配套语句牢记于心DROP VIEW [ IF EXISTS ]负责删除、SHOW CREATE VIEW负责反查定义三者配合完成视图的完整管理闭环。赞分享大数据数据库后端【免费下载链接】prestoThe official home of the Presto distributed SQL query engine for big data项目地址https://gitcode.com/gh_mirrors/pre/presto点击查看免费下载相关推荐Presto CREATE MATERIALIZED VIEW 完整指南语法、安全模式与跨 Catalog 物化视图实战Presto CREATE MATERIALIZED VIEW 完整指南语法、安全模式与跨 Catalog 物化视图实战 导读 本文基于 Presto 官方文大数据数据库后端Presto CREATE TABLE AS 语句完全指南语法、表属性与 CTAS 实战Presto CREATE TABLE AS 语句完全指南语法、表属性与 CTAS 实战 本指南基于 Presto 官方文档中 CREATE TABLE AS大数据数据库后端Presto SET SESSION 语句完全指南语法、执行原理与实战示例Presto SET SESSION 语句完全指南语法、执行原理与实战示例 SET SESSION 是 Presto分布式 SQL 查询引擎中用于在单个查大数据数据库后端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

使用 Deployer 零停机部署 TYPO3 项目:完整实战指南

使用 Deployer 零停机部署 TYPO3 项目:完整实战指南

DevOpsCI/CDCLI开发工具运维 【免费下载链接】deployer The PHP deployment tool with support for popular frameworks out of the box 项目地址: https://gitcode.com/gh_mirrors/de/deployer 点击查看 免费下载 TYPO3 是德国企业级 PHP CMS,其 Compo…

2026/9/25 3:32:09 阅读更多 →
OpenSSL 命令行速查指南:密钥生成、证书管理、加密与 TLS 诊断实战(reference 项目版)

OpenSSL 命令行速查指南:密钥生成、证书管理、加密与 TLS 诊断实战(reference 项目版)

文档知识库教程开发工具 【免费下载链接】reference 为开发人员分享快速参考备忘清单(速查表) 项目地址: https://gitcode.com/jaywcjlove/reference 点击查看 免费下载 本文是基于 reference 开源速查表仓库中 OpenSSL 备忘清单 整理而成的深度实战指南。文章覆盖…

2026/9/25 4:52:57 阅读更多 →
基于Python的舆情热点分析平台:从网易新闻爬虫到情感可视化

基于Python的舆情热点分析平台:从网易新闻爬虫到情感可视化

简介:面向Python课程设计与毕业设计的一站式舆情热点分析平台源码,完整覆盖从网易新闻及评论抓取、数据清洗、中文分词、停用词过滤、情感分析、关键词提取到时间序列分析与可视化展示的典型数据科学流程。资源共1403个文件,约23.83MB&#x…

2026/9/25 3:31:57 阅读更多 →

最新新闻

使用 VoltAgent 构建 YouTube 转博客 Agent:MCP 工具、共享记忆与 Supervisor 编排实战

使用 VoltAgent 构建 YouTube 转博客 Agent:MCP 工具、共享记忆与 Supervisor 编排实战

人工智能AI AgentAgent 框架后端多智能体RAG工具调用Agent 记忆 【免费下载链接】voltagent AI Agent Engineering Platform built on an Open Source TypeScript AI Agent Framework 项目地址: https://gitcode.com/gh_mirrors/vo/voltagent 点击查看 免费下载 本…

2026/9/25 5:46:34 阅读更多 →
用Winhance外部应用功能快速装机:WinGet一键安装常用软件指南

用Winhance外部应用功能快速装机:WinGet一键安装常用软件指南

用Winhance外部应用功能快速装机:WinGet一键安装常用软件指南 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winh…

2026/9/25 5:46:34 阅读更多 →
Read the Docs 文档内搜索 UI 设计:Search-as-you-type 的设计思路、后端选型与落地现状

Read the Docs 文档内搜索 UI 设计:Search-as-you-type 的设计思路、后端选型与落地现状

后端文档 【免费下载链接】readthedocs.org The source code that powers readthedocs.org 项目地址: https://gitcode.com/gh_mirrors/re/readthedocs.org 点击查看 免费下载 本文基于 Read the Docs 的设计文档 In-doc search UI 展开,完整解读“边输…

2026/9/25 5:46:34 阅读更多 →
ZYNQ上FreeRTOS实战:Vitis 2023.2从工程创建到调试全流程

ZYNQ上FreeRTOS实战:Vitis 2023.2从工程创建到调试全流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 5:46:34 阅读更多 →
Easy-Vibe 安全思维与攻防基础:XSS、SQL 注入、CSRF 的原理剖析与上线前安全自查清单

Easy-Vibe 安全思维与攻防基础:XSS、SQL 注入、CSRF 的原理剖析与上线前安全自查清单

教程文档 【免费下载链接】easy-vibe 从 0 到 1 学会 vibe coding,项目制学习 项目地址: https://gitcode.com/datawhalechina/easy-vibe 点击查看 免费下载 安全不是"安全团队的事",而是每个开发者的基本功。本文基于 Easy-Vibe …

2026/9/25 5:46:34 阅读更多 →
如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解

如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解

如何用MindSpeed LLM YaRN扩展上下文:长文本训练技巧详解 【免费下载链接】MindSpeed-LLM 昇腾LLM分布式训练框架 项目地址: https://gitcode.com/Ascend/MindSpeed-LLM MindSpeed-LLM 是昇腾 LLM 分布式训练框架,内置 YaRN 上下文扩展能力&#…

2026/9/25 5:45:34 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →