云数据仓库实践:AWS Redshift在大数据储存分析上的落地经验分享

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:数据库与数据仓库
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、关于数据仓库
    • 🔎1.1 数据整合与一致性
    • 🔎1.2 支持复杂查询和分析
    • 🔎1.3 提高决策支持能力
  • 🚀二、AWS Redshift的特点
    • 🔎2.1 高性能
    • 🔎2.2 弹性扩展
    • 🔎2.3 完全托管
    • 🔎2.4 安全性
    • 🔎2.5 一体化分析解决方案
  • 🚀三、RedShift的常见实践问题解答
    • 🔎3.1 RedShift和MySQL有什么不同?
    • 🔎3.2 RedShift实现怎删改查怎么写?
    • 🔎3.3 怎么把MySQL的数据放进RedShift?
    • 🔎3.4 RedShift为什么很多时候会插入失败?
    • 🔎3.5 RedShift如何进行查询优化?
    • 🔎3.6 RedShift能做实时数仓与实时计算么?
    • 🔎3.7 电商网站可以用Redshift存储数据么?
    • 🔎3.8 Redshift支持多大规模的存储?
    • 🔎3.9 如何维护数据库的数据正确性?
  • 🚀四、常见的一些数据库操作分享
    • 🔎4.1 创建表
    • 🔎4.2 数据的增删改查
    • 🔎4.3 判断语句
    • 🔎4.4 类型转化
    • 🔎4.5 数值运算
    • 🔎4.6 字符串操作
  • 🚀五、总结


🚀一、关于数据仓库

数据仓库是用于存储、管理和分析组织内部和外部数据的集中化系统。它的主要作用是将多个数据源中的结构化和非结构化数据整合到一个统一的位置,以便进行跨部门的数据分析和决策支持。数据仓库还具有以下几个重要的作用:

在这里插入图片描述

🔎1.1 数据整合与一致性

数据仓库将来自不同数据源的数据进行整合,并保持数据的一致性和准确性,确保用户可以从一个统一的位置访问和分析数据。

🔎1.2 支持复杂查询和分析

数据仓库提供强大的查询和分析功能,使用户能够进行复杂的数据挖掘、统计分析和报表查询,以发现数据中的模式、关联和趋势。

🔎1.3 提高决策支持能力

数据仓库为组织的决策层提供实时和历史数据的分析报告,支持企业管理者做出准确的决策和制定战略。

一些成熟的大数据仓库产品包括AWS RedshiftGoogle BigQueryMicrosoft Azure Synapse AnalyticsIBM Db2 Warehouse 等,他们的主要特点如下:

在这里插入图片描述
这些大数据仓库产品在架构、性能、可扩展性、集成能力、安全性等方面有所差异。具体选择哪种产品取决于组织的需求、预算、数据规模和技术栈等因素。在下表中,我们展示了这些产品的一些主要特点和区别。
在这里插入图片描述
我们实际真的的企业业务可能非常复杂,这就需要一款非常贴合场景的数据仓库产品来更好的做数据驱动。

在这里插入图片描述

当然国内也有用到的比较多的例如HiveClickHouse等数据产品,都能够解决一些特定领域的问题,今天本文重点论述一下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 服务(如S3Glue)以及第三方工具(如TableauPowerBI)无缝集成,为用户提供一体化的分析解决方案。

🚀三、RedShift的常见实践问题解答

🔎3.1 RedShift和MySQL有什么不同?

在这里插入图片描述

下面是使用Markdown表格展示Redshift和MySQL的不同之处:

方面RedshiftMySQL
架构列存储行存储
主要用途数据仓库解决方案,大规模数据分析和报表查询在线事务处理(OLTP)和常规关系型数据库需求
数据处理能力处理大规模数据集和复杂查询,适用于数据分析和报表低延迟和高并发处理能力,适用于在线交互式应用和事务处理
扩展性自动扩展存储和计算资源,弹性扩展能力需手动进行水平或垂直扩展
托管方式由AWS完全托管,无需自行管理和维护可自行部署在服务器上,也可选择云托管服务
数据一致性较弱的数据一致性和事务支持强大的事务支持和数据一致性保证

需要注意的是,RedshiftMySQL使用的查询语言不同。Redshift使用的是类似于PostgreSQLSQL方言,而MySQL使用的是标准的SQL语言。不过大部分情况下是通用的。

🔎3.2 RedShift实现怎删改查怎么写?

这个和主流的关系型数据库差不多。大家可以参见我这一篇文章AWS RedShift实战应用SQL大全及经验分享。

🔎3.3 怎么把MySQL的数据放进RedShift?

RedShiftAWS s3结合的非常好,可以利用mydumperMySQL数据导出后,处理成一定规则的数据文件,传输到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要根据实际文件里面的分隔符来确定

🔎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;

🔎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';

🔎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

🔎4.4 类型转化

Redshift是强类型的,这点和MySQL还是有些区别,因为其底层是Java的,所以查询及匹配要求类型对应。

cast(create_time as timestamp) -- 字符串转化为时间戳
cast(student_id as interger) -- 将字符串转化为整形

🔎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_amount1from ···

🔎4.6 字符串操作

字符串拼接,下面用||将三个字符串进行顺序组合。

select id || '-' || name || '-' || age from id_name_age

字符串截取,下面演示了获取用户名前5个字符的写法。

select substring(name,0,5) from users

大小写转化,下面演示了将用户名转化为小写

select lower(name) as name, age from users

🚀五、总结

本文从主流的数据仓库出发进行讲解,然后重点分析了一下AWS Redshift这款产品的特点,及其在数据分析领域的优劣势。然后根据平时在工作用的实际应用实践,给出了常见的一些疑惑问题解答。最后通过一些日常使用的SQL分享,让大家来初识这一款数据仓库。如果想要深入学习大数据或者数据挖掘,可以继续去官网学习相关技术。

在这里插入图片描述

高山仰止,景行行止,学无止境,感谢阅读,我们下次见。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/185867.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ChatGPT】人工智能的下一个前沿

🎊专栏【ChatGPT】 🌺每日一句:慢慢变好,我是,你也是 ⭐欢迎并且感谢大家指出我的问题 文章目录 一、引言 二、ChatGPT的工作原理 三、ChatGPT的主要特点 四、ChatGPT的应用场景 五、结论与展望 ​​​​​​​ 一、引言 随着人工智能技…

MyBatis(二)

3. MyBatis获取参数值的两种方式 两种方式:${}和#{} ${}的本质就是字符串拼接,#{}的本质就是占位符赋值${}使用字符串拼接的方式拼接sql,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;但是#{}使用占位…

ClickHouse开发系列

一、 ClickHouse详解、安装教程_clickhouse源码安装 二、ClickHouse 语法详解_clickhouse讲解 三、ClickHouse SQL 操作语句详解 四、ClickHouse 高级教程—官方原版 五、ClickHouse主键索引最佳实践 六、MySQL与ClickHouse集成 七、ClickHouse 集成MongoDB、Re…

Yolov8部署——vs2019生成解决方案问题

Yolov8部署——vs2019生成解决方案问题 (1)Yolov8部署 最近开始在win10上部署Yolov8,并用tensorrt加速,从此贴开始记录后续遇到的部署问题。 (2)vs2019生成解决方案问题 报错如下图: NvInfer.h是Tenso…

基于SSM+Vue的随心淘网管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

BSP-STM32移植FreeRTOS

在stm32裸机工程中的Middlewares目录添加freeRtos源码 在裸机工程中的main中调用freertos接口

【JavaEESpring】认识Spring

认识Spring 1. 什么是框架2. SpringBoot 介绍2.1 Spring 的介绍2.2 SpringBoot 1. 什么是框架 框架(Framework) ,意思是框架、机制、准则。通俗的来讲: 框架是实现某种功能的半成品, 他提供了⼀些常⽤的⼯具类, 我们在框架的基础上, 可以更加⾼效的进⾏开发 后端框…

docker搭建mysql环境

1. 基础环境 名称描述CentOS 7.6Linux操作系统版本docker 20.10.5docker版本mysql 8.0.29mysql镜像版本 2. 下载安装 使用docker命令下载mysql镜像 [rootzhouwei ~]# docker pull mysql:8.0.29查看docker仓库是否已经下载了mysql镜像 [rootzhouwei ~]# docker images将mys…

Java算法(六):模拟评委打分案例 方法封装抽离实现 程序的节流处理

Java算法(六) 评委打分 需求: 在编程竞赛中,有 6 个评委为参赛选手打分,分数为 0 - 100 的整数分。 选手的最后得分为:去掉一个最高分和一个最低分后 的 4个评委的平均值。 注意程序的节流 package c…

【 毕设项目源码推荐 javaweb 项目】 基于 springboot+vue 的图书个性化推荐系统的设计与实现(springboot003)

简介 :::warning 【 毕设项目源码推荐 javaweb 项目】 基于 springbootvue 的图书个性化推荐系统的设计与实现适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负…

【快速使用ShardingJDBC的哈希分片策略进行分库分表】

文章目录 🔊博主介绍🥤本文内容🍊1.引入maven依赖🍊2.启动类上添加注解MapperScan🍊3.添加application.properties配置🍊4.普通的自定义实体类🍊5.写个测试类验证一下🍊6.控制台打印…

c#如何把字符串中的指定字符删除

可以使用以下四种方法: 一、使用关键字:Replace public string Replace(char oldChar,char newChar); 在对象中寻找oldChar,如果寻找到,就用newChar将oldChar替换掉。 1、实例代码: 2、执行结果: 二、Rem…

洛谷P5731 【深基5.习6】蛇形方阵java版题解

import java.util.Arrays; import java.util.Scanner;// 给出一个不大于9的正整数n,输出nn的蛇形方阵。 public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int n sc.nextInt();int[][] a new int[n][n];int total…

AWTK 与 Qt 的异同点比较

相似之处: 跨平台支持: AWTK 和 Qt 都提供了跨平台的支持,可以在多种操作系统上进行开发和部署,包括 Windows、Linux、macOS 等。丰富的组件库: 两者都提供了丰富的图形界面组件库,能够满足各种应用程序的…

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins,并实现了一个简单的Pipeline的运行。 在实际的开发中,我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…

Spring Cloud之多级缓存

目录 传统缓存 多级缓存 JVM进程缓存 Caffeine 缓存驱逐策略 实现进程缓存 常用Lua语法 数据类型 变量声明 循环使用 定义函数 条件控制 安装OpenResty 实现Nginx业务逻辑编写 请求参数解析 实现lua访问tomcat JSON的序列化和反序列化 Tomcat的集群负载均衡 …

MacOS升级后命令行出现xcrun: error: invalid active developer path报错信息

在Mac上用g编译cpp文件时,出现以下(类似于工具环境问题的)报错: 解决方案:重新安装最新版的MacOS Command Line Tools xcode-select --install重新尝试编译: 编译成功(忽略这个warning&…

vue中插槽slot

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分,不希望写死,希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分,改用&l…

OpenCV 图像复制和图像区域读写

图像复制 共享数据, 使用 new Mat(srcMat, ...) 和 newMatsrcMat 生成新的Mat都和原Mat共享数据, 也就是说如果修改某一Mat,其他Mat也会随之改变复制全新的Mat, 使用CopyTo() 和 Clone() 方法将生成一个全新的Mat, 新Mat和原Mat不共享数据. 图像区域和点的读写 区域读取: 通过s…

线上 kafka rebalance 解决

上周末我们服务上线完毕之后发生了一个kafka相关的异常,线上的kafka频繁的rebalance,详细的报错我已经贴到下面,根据字面意思:消费者异常 org.apache.kafka.clients.consumer.CommitFailedException: 无法完成提交,因为…