全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析师(CDA)专版
1251 13
2025-09-28

在 CDA(Certified Data Analyst)数据分析师的工作流中,“获取数据→处理数据→分析数据→输出结论” 的每一步都离不开对数据载体的操作。而视图,正是分析师处理数据时最核心的两种载体:表是 “数据的永久仓库”,用于存储清洗后、预处理后的结构化数据;视图是 “数据的临时窗口”,用于简化复杂查询、复用分析逻辑。掌握表与视图的创建方法,不仅能让分析师摆脱 “重复写长 SQL” 的低效困境,更能确保数据处理的规范性与可复用性,是从 “初级取数” 迈向 “高效分析” 的关键技能。

一、核心概念:表与视图的 “差异与协同”

对 CDA 分析师而言,表与视图并非 “二选一” 的工具,而是 “分工不同、协同配合” 的搭档。要高效使用两者,需先明确其本质差异与适用场景。

(一)表:数据的 “永久存储仓库”

表(Table)是数据库中用于永久存储结构化数据的载体,具有固定的字段结构(列)与数据记录(行),数据一旦插入,除非主动删除或更新,否则会长期保留。其核心特征是 “物理存储、独立存在、可直接修改”:

  • 物理存储:表的数据以文件形式存储在数据库服务器的磁盘中,占用实际存储空间;

  • 独立存在:表不依赖其他对象,可单独进行查询、插入、更新、删除(CRUD)操作;

  • 数据可控:分析师可通过INSERT插入新数据、UPDATE修改错误数据、DELETE清理冗余数据。

CDA 分析师常用表类型

  1. 原始数据表:存储业务系统直接生成的原始数据(如电商的订单原始表、用户注册原始表),结构与业务系统一致,需后续清洗;

  2. 中间表:存储数据预处理(清洗、关联、聚合)后的中间结果(如 “清洗后的订单中间表”“用户 - 订单关联中间表”),用于后续分析复用,避免重复处理;

  3. 结果表:存储最终分析结论(如 “2024 年 Q3 各渠道用户消费报表”“月度 GMV 趋势表”),可直接用于可视化或业务汇报。

(二)视图:数据的 “临时查询窗口”

视图(View)是基于一个或多个表的虚拟查询结果集,本身不存储数据,仅保存查询逻辑(SQL 语句)。当调用视图时,数据库会动态执行其背后的 SQL,返回实时数据。其核心特征是 “逻辑存储、依赖表、不可直接修改数据”:

  • 逻辑存储:视图仅保存查询语句,不占用实际存储空间,数据来源于关联的基础表;

  • 依赖基础表:若基础表结构变更(如字段删除、重命名),视图可能失效,需同步调整;

  • 数据只读性:分析师可通过视图查询数据,但无法直接用INSERT/UPDATE/DELETE修改视图数据(需修改基础表)。

CDA 分析师常用视图类型

  1. 简化查询视图:将复杂的多表关联、嵌套查询封装为视图,后续分析直接调用(如 “用户消费视图”,关联用户表与订单表,避免每次写多表JOIN);

  2. 数据筛选视图:筛选特定业务场景的数据(如 “北京地区新用户视图”“高客单价订单视图”),聚焦目标分析范围;

  3. 权限控制视图:隐藏敏感字段(如手机号、身份证号),仅展示非敏感信息(如 “脱敏用户视图”,手机号显示为 “138****1234”),保障数据安全。

(三)表与视图的核心差异对比

对比维度 表(Table) 视图(View)
数据存储 物理存储,占用磁盘空间 逻辑存储,仅保存查询语句,不占空间
数据独立性 独立存在,不依赖其他对象 依赖基础表,基础表变更可能导致失效
数据操作 支持 INSERT/UPDATE/DELETE(可修改数据) 仅支持 SELECT(查询),无法直接修改数据
性能 查询速度快(数据预存储) 查询速度依赖基础表与视图逻辑(动态计算)
适用场景 存储中间结果、最终分析结论 简化复杂查询、复用逻辑、数据脱敏

二、CDA 分析师创建表:从 “结构设计” 到 “数据落地”

创建表是 CDA 分析师处理数据的 “基础动作”,核心目标是 “设计合理的表结构,存储高质量数据,为后续分析提供支撑”。完整流程分为 4 个步骤,需结合业务需求与数据特征精准设计。

(一)步骤 1:需求分析 —— 明确 “为什么建表”

创建表前需先明确表的用途与数据来源,避免 “盲目建表导致数据冗余”:

  1. 确定表的用途:是存储原始数据、中间结果还是最终结论?例如:
  • 若需 “存储清洗后的电商订单数据,用于后续各维度分析”,则创建 “订单清洗中间表”;

  • 若需 “存储 2024 年各月 GMV 统计结果,用于季度汇报”,则创建 “月度 GMV 结果表”;

  1. 梳理数据来源:数据来自哪些基础表?需包含哪些字段?例如:
  • “订单清洗中间表” 的数据来自 “原始订单表”,需包含 “订单 ID、用户 ID、订单金额、下单时间、支付状态” 等核心字段,排除 “冗余的日志 ID、临时状态字段”;
  1. 预估数据量:若数据量超过 100 万行,需考虑表的分区(如按 “下单时间” 分区),避免后续查询卡顿。

(二)步骤 2:结构设计 —— 确定 “表长什么样”

表结构设计是核心,需重点关注 “字段名、字段类型、约束条件”,确保数据准确性与可用性:

  1. 字段名设计:遵循 “见名知意、统一规范” 原则,用小写字母 + 下划线命名(如 “order_id”“user_id”“order_amount”),避免中文或特殊字符;

  2. 字段类型选择:根据数据特征选择合适类型,避免 “大材小用” 或 “类型不匹配”(如用INT存储订单金额会丢失小数,用VARCHAR存储日期无法按时间排序):

数据类型 适用场景 示例字段
INT/BIGINT 整数型数据(无小数) 订单 ID(order_id)、用户 ID(user_id)
DECIMAL(p,s) 小数型数据(需精确计算) 订单金额(order_amount,DECIMAL (10,2))、折扣率(discount_rate,DECIMAL (5,2))
VARCHAR(n) 字符串型数据(长度可变) 用户名(user_name)、商品品类(product_category)
DATETIME 日期时间型数据(精确到秒) 下单时间(order_time)、支付时间(pay_time)
BOOLEAN/TINYINT 布尔型数据(是 / 否、0/1) 支付状态(is_paid,1 = 已支付,0 = 未支付)
  1. 约束条件设置:添加必要的约束确保数据质量,常用约束包括:
  • 主键(PRIMARY KEY):唯一标识一条记录(如 “order_id” 设为主键,避免重复订单);

  • 非空(NOT NULL):核心字段不允许为空(如 “order_amount”“order_time” 设为 NOT NULL,避免数据缺失);

  • 默认值(DEFAULT):非核心字段设置默认值(如 “备注(remark)” 默认值为 “无”)。

(三)步骤 3:SQL 实现 —— 编写 “创建表语句”

基于结构设计,用CREATE TABLE语句创建表,不同数据库(MySQL、Hive)语法略有差异,核心逻辑一致。

实战案例 1:MySQL 创建 “电商订单清洗中间表”

需求:存储清洗后的订单数据,包含订单基本信息、支付状态,排除冗余字段,订单 ID 为主键,金额非空。

SQL 语句:

\-- 创建电商订单清洗中间表(MySQL)

CREATE TABLE IF NOT EXISTS order\_clean\_mid (

   order\_id BIGINT PRIMARY KEY COMMENT '订单ID(主键,唯一标识订单)',

   user\_id BIGINT NOT NULL COMMENT '用户ID(关联用户表)',

   product\_id BIGINT NOT NULL COMMENT '商品ID(关联商品表)',

   order\_amount DECIMAL(10,2) NOT NULL COMMENT '订单金额(单位:元,保留2位小数)',

   order\_time DATETIME NOT NULL COMMENT '下单时间(格式:YYYY-MM-DD HH:MM:SS)',

   pay\_time DATETIME DEFAULT NULL COMMENT '支付时间(未支付则为NULL)',

   is\_paid TINYINT NOT NULL DEFAULT 0 COMMENT '支付状态(0=未支付,1=已支付)',

   product\_category VARCHAR(50) NOT NULL COMMENT '商品品类(如女装、电子产品)'

) COMMENT '电商订单清洗中间表(存储清洗后的订单数据,用于后续分析)';
  • 关键语法说明:IF NOT EXISTS避免表已存在时报错;COMMENT添加字段 / 表注释,便于后续理解;DEFAULT NULL设置可选字段默认值。

实战案例 2:Hive 创建 “月度 GMV 结果表”(按月份分区)

需求:存储 2024 年各月 GMV 统计结果,按 “月份(month)” 分区,便于按月份查询。

SQL 语句:

\-- 创建月度GMV结果表(Hive,按月份分区)

CREATE TABLE IF NOT EXISTS monthly\_gmv\_result (

   year INT NOT NULL COMMENT '年份(如2024)',

   month INT NOT NULL COMMENT '月份(如9)',

   total\_gmv DECIMAL(15,2) NOT NULL COMMENT '月度总GMV(单位:元)',

   avg\_order\_amount DECIMAL(10,2) NOT NULL COMMENT '月度平均订单金额',

   order\_count INT NOT NULL COMMENT '月度订单总数'

)

PARTITIONED BY (month\_part STRING COMMENT '分区字段:格式YYYY-MM(如2024-09)')

COMMENT '月度GMV结果表(按月份分区存储,用于季度/年度汇报)';
  • 关键语法说明:Hive 的PARTITIONED BY用于分区表,按 “month_part” 分区后,查询 “2024-09” 数据时仅扫描该分区,提升效率。

(四)步骤 4:数据插入与验证 —— 确保 “表能用”

表创建后需插入数据,并验证数据准确性,避免 “表结构正确但数据错误”:

  1. 插入数据:用INSERT INTO(追加数据)或INSERT OVERWRITE(覆盖数据)插入数据,来源可为基础表查询结果:
\-- 向order\_clean\_mid插入清洗后的数据(从原始订单表筛选有效数据)

INSERT INTO order\_clean\_mid (order\_id, user\_id, product\_id, order\_amount, order\_time, pay\_time, is\_paid, product\_category)

SELECT

   order\_id,

   user\_id,

   product\_id,

   order\_amount,

   order\_time,

   pay\_time,

   CASE WHEN pay\_time IS NOT NULL THEN 1 ELSE 0 END AS is\_paid, -- 计算支付状态

   product\_category

FROM order\_original -- 原始订单表

WHERE order\_amount > 0 -- 过滤异常订单(金额≤0)

 AND order\_time >= '2024-01-01'; -- 仅保留2024年数据
  1. 数据验证:用SELECT查询表数据,验证字段值、数据量是否符合预期:
\-- 验证order\_clean\_mid:查询前10条数据,检查支付状态与金额

SELECT \* FROM order\_clean\_mid LIMIT 10;

\-- 验证数据量:统计2024年9月订单数

SELECT COUNT(order\_id) AS sep\_2024\_order\_count

FROM order\_clean\_mid

WHERE DATE\_FORMAT(order\_time, '%Y-%m') = '2024-09';

三、CDA 分析师创建视图:从 “逻辑封装” 到 “高效复用”

创建视图的核心目标是 “简化复杂查询、复用分析逻辑”,尤其适合 “频繁使用多表关联、固定筛选条件” 的场景。完整流程分为 3 个步骤,需聚焦 “逻辑清晰、易于维护”。

(一)步骤 1:需求拆解 —— 明确 “为什么建视图”

创建视图前需明确视图的使用场景与查询逻辑,避免 “视图逻辑复杂导致查询缓慢”:

  1. 确定使用场景:是简化多表关联、筛选特定数据,还是数据脱敏?例如:
  • 若 “需频繁分析‘用户消费情况’,每次都要关联用户表与订单表”,则创建 “用户消费视图”;

  • 若 “业务部门需查看‘北京地区新用户数据’,但不能接触手机号”,则创建 “北京新用户脱敏视图”;

  1. 梳理查询逻辑:明确视图依赖的基础表、筛选条件、关联关系。例如:
  • “用户消费视图” 依赖 “user_table(用户表)” 与 “order_clean_mid(订单清洗表)”,需关联 “user_id”,包含 “用户名、地域、订单金额、下单时间” 字段。

(二)步骤 2:SQL 实现 —— 编写 “创建视图语句”

CREATE VIEW语句创建视图,核心是封装查询逻辑,语法简洁,不同数据库(MySQL、Hive)通用。

实战案例 1:MySQL 创建 “用户消费视图”(简化多表关联)

需求:封装用户表与订单表的关联逻辑,后续分析直接调用视图,无需重复写JOIN

SQL 语句:

\-- 创建用户消费视图(关联用户表与订单表)

CREATE VIEW user\_consume\_view AS

SELECT

   u.user\_id AS 用户ID,

   u.user\_name AS 用户名,

   u.region AS 地域,

   u.register\_time AS 注册时间,

   o.order\_id AS 订单ID,

   o.order\_amount AS 订单金额,

   o.order\_time AS 下单时间,

   o.is\_paid AS 支付状态

FROM user\_table u

LEFT JOIN order\_clean\_mid o ON u.user\_id = o.user\_id -- 关联用户与订单

WHERE o.order\_time >= DATE\_SUB(CURDATE(), INTERVAL 3 MONTH); -- 仅保留近3个月订单
  • 关键语法说明:视图逻辑包含LEFT JOIN与筛选条件,调用时直接查询user_consume_view,即可获取用户与订单的关联数据,例如:
\-- 用视图分析“北京地区近3个月用户平均消费金额”

SELECT

   region AS 地域,

   AVG(order\_amount) AS avg\_consume,

   COUNT(DISTINCT user\_id) AS user\_count

FROM user\_consume\_view

WHERE region = '北京' AND is\_paid = 1

GROUP BY region;

实战案例 2:MySQL 创建 “用户脱敏视图”(数据安全)

需求:隐藏用户表中的手机号、身份证号,仅展示脱敏信息,供非技术部门使用。

SQL 语句:

\-- 创建用户脱敏视图(隐藏敏感字段)

CREATE VIEW user\_desensitized\_view AS

SELECT

   user\_id AS 用户ID,

   user\_name AS 用户名,

   region AS 地域,

   register\_time AS 注册时间,

   CONCAT(LEFT(phone, 7), '\*\*\*\*') AS 脱敏手机号, -- 手机号脱敏:1381234\*\*\*\*

   CONCAT(LEFT(id\_card, 6), '\*\*\*\*\*\*\*\*', RIGHT(id\_card, 4)) AS 脱敏身份证号 -- 身份证脱敏:110101\*\*\*\*\*\*\*\*1234

FROM user\_table;
  • 关键语法说明:用CONCAT+LEFT/RIGHT实现字段脱敏,非技术部门查询视图时无法获取完整敏感信息,保障数据安全。

(三)步骤 3:视图维护 —— 确保 “逻辑有效”

视图依赖基础表,当基础表结构变更(如字段删除、重命名)时,视图会失效,需及时维护:

  1. 查询视图状态:用DESCRIBE查看视图结构,用SHOW CREATE VIEW查看视图背后的 SQL 逻辑:
\-- 查看user\_consume\_view的结构

DESCRIBE user\_consume\_view;

\-- 查看user\_consume\_view的创建语句

SHOW CREATE VIEW user\_consume\_view;
  1. 修改视图逻辑:若基础表字段变更(如 “order_clean_mid” 的 “order_amount” 改名为 “amount”),用ALTER VIEW修改视图逻辑:
\-- 修改用户消费视图:适配order\_amount字段改名

ALTER VIEW user\_consume\_view AS

SELECT

   u.user\_id AS 用户ID,

   u.user\_name AS 用户名,

   u.region AS 地域,

   u.register\_time AS 注册时间,

   o.order\_id AS 订单ID,

   o.amount AS 订单金额, -- 字段名从order\_amount改为amount

   o.order\_time AS 下单时间,

   o.is\_paid AS 支付状态

FROM user\_table u

LEFT JOIN order\_clean\_mid o ON u.user\_id = o.user\_id

WHERE o.order\_time >= DATE\_SUB(CURDATE(), INTERVAL 3 MONTH);
  1. 删除无用视图:若视图长期不使用(如业务场景变更),用DROP VIEW删除,避免视图冗余:
\-- 删除无用的“旧用户视图”

DROP VIEW IF EXISTS old\_user\_view;

四、实战协同:表与视图在 CDA 分析中的 “组合应用”

在实际分析场景中,表与视图通常协同使用:先创建中间表存储预处理数据,再基于中间表创建视图简化查询,最终用视图快速开展多维度分析。

实战场景:电商 “2024 年 Q3 新用户消费分析”

1. 场景需求

分析 “2024 年 Q3(7-9 月)新注册用户的消费行为”,需完成:

  • 计算新用户首单转化率、平均首单金额;

  • 按注册渠道(抖音、淘宝)对比新用户消费差异;

  • 输出高价值新用户(首单金额 > 500 元)列表。

2. 协同操作步骤

(1)创建 “Q3 新用户中间表”(存储预处理数据)

先从用户表筛选 Q3 新用户,存储为中间表,避免重复筛选:

\-- 创建Q3新用户中间表

CREATE TABLE IF NOT EXISTS q3\_new\_user\_mid (

   user\_id BIGINT PRIMARY KEY COMMENT '用户ID',

   user\_name VARCHAR(50) NOT NULL COMMENT '用户名',

   region VARCHAR(50) NOT NULL COMMENT '地域',

   register\_time DATETIME NOT NULL COMMENT '注册时间',

   register\_channel VARCHAR(50) NOT NULL COMMENT '注册渠道(抖音/淘宝)'

) COMMENT '2024年Q3新用户中间表';

\-- 插入Q3新用户数据

INSERT INTO q3\_new\_user\_mid

SELECT

   user\_id,

   user\_name,

   region,

   register\_time,

   register\_channel

FROM user\_table

WHERE register\_time BETWEEN '2024-07-01' AND '2024-09-30'

 AND register\_time IS NOT NULL;
(2)创建 “Q3 新用户消费视图”(简化关联查询)

基于 “Q3 新用户中间表” 与 “订单清洗表” 创建视图,封装关联逻辑:

\-- 创建Q3新用户消费视图

CREATE VIEW q3\_new\_user\_consume\_view AS

SELECT

   u.user\_id AS 用户ID,

   u.user\_name AS 用户名,

   u.region AS 地域,

   u.register\_channel AS 注册渠道,

   u.register\_time AS 注册时间,

   o.order\_id AS 订单ID,

   o.order\_amount AS 订单金额,

   o.order\_time AS 下单时间,

   o.is\_paid AS 支付状态

FROM q3\_new\_user\_mid u

LEFT JOIN order\_clean\_mid o ON u.user\_id = o.user\_id

WHERE o.is\_paid = 1; -- 仅保留已支付订单
(3)基于视图开展分析

直接调用视图,快速完成多维度分析,无需重复写表关联:

\-- 1. 计算Q3新用户首单转化率、平均首单金额

SELECT

   COUNT(DISTINCT u.user\_id) AS 新用户总数,

   COUNT(DISTINCT v.user\_id) AS 有消费新用户数,

   ROUND(COUNT(DISTINCT v.user\_id)/COUNT(DISTINCT u.user\_id), 4)\*100 AS 首单转化率,

   ROUND(AVG(v.order\_amount), 2) AS 平均首单金额

FROM q3\_new\_user\_mid u

LEFT JOIN q3\_new\_user\_consume\_view v ON u.user\_id = v.user\_id;

\-- 2. 按注册渠道对比新用户消费差异

SELECT

   register\_channel AS 注册渠道,

   COUNT(DISTINCT user\_id) AS 渠道用户数,

   SUM(order\_amount) AS 渠道总消费,

   ROUND(AVG(order\_amount), 2) AS 渠道平均消费

FROM q3\_new\_user\_consume\_view

GROUP BY register\_channel;

\-- 3. 筛选高价值新用户(首单金额>500元)

SELECT

   user\_id AS 用户ID,

   user\_name AS 用户名,

   register\_channel AS 注册渠道,

   order\_amount AS 首单金额,

   order\_time AS 首单时间

FROM q3\_new\_user\_consume\_view

WHERE order\_amount > 500

ORDER BY order\_amount DESC;

3. 协同价值

  • 效率提升:中间表存储 Q3 新用户数据,避免每次分析都筛选原始用户表;视图封装关联逻辑,分析语句从 “多表 JOIN” 简化为 “单表查询”;

  • 逻辑复用:若后续需补充 “Q3 新用户地域消费分析”,直接调用视图即可,无需重新设计表关联。

五、CDA 分析师创建表与视图的核心注意事项

(一)创建表的注意事项

  1. 避免过度设计:表字段仅保留 “核心必要字段”,避免冗余(如 “订单表” 无需存储 “商品详情描述”,可通过 “product_id” 关联商品表获取);

  2. 重视字段类型:金额用DECIMAL(避免FLOAT精度丢失)、日期用DATETIME(便于时间筛选)、字符串长度按需设置(如 “地域” 用VARCHAR(50)足够,无需VARCHAR(255));

  3. 大表需分区:数据量超过 100 万行的表,按 “时间(如月份)” 或 “地域” 分区(如 Hive 的分区表、MySQL 的分区表),提升查询速度;

  4. 添加注释:表与字段均需添加COMMENT,说明用途与含义(如 “order_amount DECIMAL (10,2) COMMENT ' 订单金额(单位:元)'”),便于他人理解。

(二)创建视图的注意事项

  1. 逻辑简洁:避免视图嵌套(如 “视图 A 依赖视图 B,视图 B 依赖视图 C”),嵌套过多会导致查询速度变慢,且难以排查问题;

  2. 避免复杂计算:视图中不建议包含大量聚合函数(如SUM/AVG)或子查询,复杂计算可在查询视图时动态执行,而非封装在视图中;

  3. 权限控制:脱敏视图仅授予 “非敏感数据查看权限”,避免业务部门获取敏感信息;

  4. 定期检查:每月检查视图有效性,若基础表结构变更(如字段删除),及时用ALTER VIEW修改视图逻辑,避免失效。

六、结语

对 CDA 数据分析师而言,创建表与视图并非 “单纯的 SQL 技术操作”,而是 “优化数据处理流程、提升分析效率” 的核心策略:表是 “数据的基石”,确保高质量数据的永久存储与复用;视图是 “分析的窗口”,简化复杂逻辑,让分析师聚焦业务洞察而非重复写 SQL。

在数据量日益庞大、业务需求愈发复杂的今天,熟练掌握表与视图的创建方法,能让 CDA 分析师摆脱 “低效取数、重复处理” 的困境,将更多精力投入 “深度分析与决策支撑”。无论是中间表的结构化存储,还是视图的逻辑化封装,最终都指向一个目标 —— 让数据处理更高效、分析更精准,真正实现 “数据驱动业务增长”。

推荐学习书籍 《CDA一级教材》适合CDA一级考生备考,也适合业务及数据分析岗位的从业者提升自我。完整电子版已上线CDA网校,累计已有10万+在读~ !

免费加入阅读:https://edu.cda.cn/goods/show/3151?targetId=5147&preview=0

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2025-9-28 09:52:38
在 CDA(Certified Data Analyst)数据分析师的工作流中,“获取数据→处理数据→分析数据→输出结论” 的每一步都离不开对数据载体的操作。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-9-28 09:52:56
而表与视图,正是分析师处理数据时最核心的两种载体:表是 “数据的永久仓库”,用于存储清洗后、预处理后的结构化数据;视图是 “数据的临时窗口”,用于简化复杂查询、复用分析逻辑。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-9-28 09:53:00
掌握表与视图的创建方法,不仅能让分析师摆脱 “重复写长 SQL” 的低效困境,更能确保数据处理的规范性与可复用性,是从 “初级取数” 迈向 “高效分析” 的关键技能。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-9-28 10:02:52
点赞分享!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2025-9-28 10:55:09
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群