🚀一、关于数据仓库
数据仓库是用于存储、管理和分析组织内部和外部数据的集中化系统。它的主要作用是将多个数据源中的结构化和非结构化数据整合到一个统一的位置,以便进行跨部门的数据分析和决策支持。数据仓库还具有以下几个重要的作用:
🔎1.1 数据整合与一致性
数据仓库将来自不同数据源的数据进行整合,并保持数据的一致性和准确性,确保用户可以从一个统一的位置访问和分析数据。
🔎1.2 支持复杂查询和分析
数据仓库提供强大的查询和分析功能,使用户能够进行复杂的数据挖掘、统计分析和报表查询,以发现数据中的模式、关联和趋势。
🔎1.3 提高决策支持能力
数据仓库为组织的决策层提供实时和历史数据的分析报告,支持企业管理者做出准确的决策和制定战略。
一些成熟的大数据仓库产品包括AWS Redshift、Google BigQuery、Microsoft Azure Synapse Analytics、IBM Db2 Warehouse 等,他们的主要特点如下:
这些大数据仓库产品在架构、性能、可扩展性、集成能力、安全性等方面有所差异。具体选择哪种产品取决于组织的需求、预算、数据规模和技术栈等因素。在下表中,我们展示了这些产品的一些主要特点和区别。
我们实际真的的企业业务可能非常复杂,这就需要一款非常贴合场景的数据仓库产品来更好的做数据驱动。
当然国内也有用到的比较多的例如Hive和ClickHouse等数据产品,都能够解决一些特定领域的问题,今天本文重点论述一下aws上这一款云数据仓库Redshift,是众多使用aws作为云服务并且用到数据仓库的首选产品。
🚀二、AWS Redshift的特点
AWS Rdshift是亚马逊网络服务(Amazon Web Services)提供的一种完全托管的云数据仓库解决方案。它是基于列存储的关系型数据库,专门用于处理大规模数据集。Redshift旨在通过实现高度可扩展的并行查询引擎,支持高性能的数据分析和报表查询。
以下是Redshift的主要特点和优势:
🔎2.1 高性能
Redshift利用列存储方式、压缩、并行化查询等技术,提供了出色的查询性能。它可以在大规模数据集上执行复杂的分析查询,支持高并发访问。
🔎2.2 弹性扩展
Redshift可以根据需求自动扩展存储和计算资源,以应对不同规模的数据工作负载。这种弹性扩展的能力使其适用于处理大量数据的情况。
🔎2.3 完全托管
Redshift是一种完全托管的云服务,AWS负责处理硬件和软件的配置、管理和维护。用户无需关心底层的基础设施管理,可以专注于数据分析和查询。
🔎2.4 安全性
Redshift提供了一系列安全性功能,包括数据加密、访问控制和网络隔离。这有助于保护数据的机密性和完整性。
🔎2.5 一体化分析解决方案
Redshift可以与其他 AWS 服务(如S3和Glue)以及第三方工具(如Tableau和PowerBI)无缝集成,为用户提供一体化的分析解决方案。
🚀三、RedShift的常见实践问题解答
🔎3.1 RedShift和MySQL有什么不同?
下面是使用Markdown表格展示Redshift和MySQL的不同之处:
方面 Redshift MySQL
架构 列存储 行存储
主要用途 数据仓库解决方案,大规模数据分析和报表查询 在线事务处理(OLTP)和常规关系型数据库需求
数据处理能力 处理大规模数据集和复杂查询,适用于数据分析和报表 低延迟和高并发处理能力,适用于在线交互式应用和事务处理
扩展性 自动扩展存储和计算资源,弹性扩展能力 需手动进行水平或垂直扩展
托管方式 由AWS完全托管,无需自行管理和维护 可自行部署在服务器上,也可选择云托管服务
数据一致性 较弱的数据一致性和事务支持 强大的事务支持和数据一致性保证
需要注意的是,Redshift和MySQL使用的查询语言不同。Redshift使用的是类似于PostgreSQL的SQL方言,而MySQL使用的是标准的SQL语言。不过大部分情况下是通用的。
🔎3.2 RedShift实现怎删改查怎么写?
这个和主流的关系型数据库差不多。大家可以参见我这一篇文章AWS RedShift实战应用SQL大全及经验分享。
🔎3.3 怎么把MySQL的数据放进RedShift?
RedShift和AWS s3结合的非常好,可以利用mydumper将MySQL数据导出后,处理成一定规则的数据文件,传输到s3,然后通过Copy命令直接拷贝到RedShift。拷贝的命令如下:
copy student_score from 's3://xxxx/student_score/'
access_key_id ''
secret_access_key ''
ACCEPTINVCHARS AS ' ' TRUNCATECOLUMNS IGNOREBLANKLINES delimiter '\t'
gzip region 'us-east-1'
-- 其中注意delimiter要根据实际文件里面的分隔符来确定
1
2
3
4
5
6
🔎3.4 RedShift为什么很多时候会插入失败?
Redshift提倡大批次处理插入,如果批次太小很频繁可能会导致写入失败,这个时候建议先将数据放入缓冲区或者文件,然后文件积累到一定量,在通过上面说到的Copy命令到数据库,这才是一个最佳实践。
🔎3.5 RedShift如何进行查询优化?
首先查询的时候要保证表的量够小,所以要使用一些任务调度的方式,将大表转化成小表,尤其是行为数据这种表,实际上很多业务查询的时候用不到这一整张表,这个时候需要我们独立成特定的小表。另外注意要关注整个数仓的负载,当别的任务执行过多的时候,当前任务的算力必然会被分担。
🔎3.6 RedShift能做实时数仓与实时计算么?
当然这是可以的,不过要借助一些其他的工具和技术来实现。毕竟数据从产生到进入数据仓库还是要经过一系列的过程。下面是一些实践的用法:
🔎3.7 电商网站可以用Redshift存储数据么?
完全OK的,Redshift的查询是要先解释查询语句才能进行查询,查询的速度还是比较慢的,比MySQL或者说Clickhoue慢的多,当然这个说法不一定准确,但你应该能了解我的意思,所以给网站服务一般还是不能直接查Redshift,还是得依赖一些缓存作为支撑,不过这个取决于具体的业务设计。行为数据如何进库,参考我上面提到的方式。
🔎3.8 Redshift支持多大规模的存储?
AWS官方宣传的是PB级别的存储,目前我们的规模在几百TB,每天支撑数百亿级别的数据清洗,数据分析,数据挖掘任务,还是比较可以的,对大量报表以及系统业务做到了不错的支撑。
🔎3.9 如何维护数据库的数据正确性?
如果要把业务数据库的数据放进Redshift,可以通过在业务库放一个last_update_time字段,通过这个字段的变化来增量同步数据进去,如果实在不放心,也可以每天进行一次全量数据覆盖,先删除再写入,这样配合起来用,同时也可以抽样进行两边的数据对比,进行一个数据监控。
🚀四、常见的一些数据库操作分享
🔎4.1 创建表
Redshift有自己独特的建表语句,大体上看上去,和常见的关系型数据库差不多,另外它可以定义索引,但是不具备索引约束
CREATE TABLE "public"."users" (
"user_id" "int4",
"name" "varchar",
"gender" "int4",
"age" "numeric"
)
WITH OIDS;
1
2
3
4
5
6
7
🔎4.2 数据的增删改查
增删改查和MySQL差不多
-- 增加数据
insert into users(user_id, name, gender, age)
values (1, 'xiaomin', '男', '12');
--查询数据
select * from users where name='xiaoming';
--修改数据
update users set age=13 where name = 'xiaoming';
--删除数据
delete from users where name='xiaoming';
1
2
3
4
5
6
7
8
9
10
11
12
🔎4.3 判断语句
case when很多时候用来代替if,下面演示统计学生的name,如果为null或空字符串,用unkonw显示
select
case when name is null then 'unkown'
when name = '' then 'unkown'
else name end as name
from users
1
2
3
4
5
🔎4.4 类型转化
Redshift是强类型的,这点和MySQL还是有些区别,因为其底层是Java的,所以查询及匹配要求类型对应。
cast(create_time as timestamp) -- 字符串转化为时间戳
cast(student_id as interger) -- 将字符串转化为整形
1
2
🔎4.5 数值运算
下面演示了一个求客单价的逻辑,用户总用的消费金额/总共用户数得到客单价,最后再四舍五入规范一下数据。
-- 这里演示类型转化的除法运算,以及保留两位小数的用法
select
cast(total_amount as numeric)/cast(total_users as numeric) as avg_user_amount,
round(avg_user_amount, 2) as avg_user_amount1
from ···
1
2
3
4
5
🔎4.6 字符串操作
字符串拼接,下面用||将三个字符串进行顺序组合。
select id || '-' || name || '-' || age from id_name_age
1
字符串截取,下面演示了获取用户名前5个字符的写法。
select substring(name,0,5) from users
1
大小写转化,下面演示了将用户名转化为小写
select lower(name) as name, age from users
1
🚀五、总结
本文从主流的数据仓库出发进行讲解,然后重点分析了一下AWS Redshift这款产品的特点,及其在数据分析领域的优劣势。然后根据平时在工作用的实际应用实践,给出了常见的一些疑惑问题解答。最后通过一些日常使用的SQL分享,让大家来初识这一款数据仓库。如果想要深入学习大数据或者数据挖掘,可以继续去官网学习相关技术。
免责申明:
本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!
《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu
《数栈V6.0产品白皮书》下载地址:https://fs80.cn/cw0iw1
想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:https://www.dtstack.com/?src=bbs
同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:https://github.com/DTStack