数据抽取+dataworks的使用+ADB的应用

2023-11-05 05:30

本文主要是介绍数据抽取+dataworks的使用+ADB的应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一,大数据处理之数据抽取

1,什么是数据抽取

在大数据领域中,数据抽取是指从原始数据源中提取所需的数据子集或特定数据项的过程,
数据抽取是数据预处理的重要步骤,它为后续的数据分析和建模提供了基础。

2,为什么要进行数据抽取

1,大数据量中,频繁的大批量查询需要很大的计算资源和时间,会影响数据库的性能,从而影响应用业务逻辑的执行
2,业务与数据分离,可以在不影响业务的前提下,更好的实现数据处理、数据分析,进而产出数据报表

二,阿里大数据平台dataworks实现数据抽取

1,数据抽取方式

1,抽取方式-全量抽取:在数据量不大时可以选中按照类似创建时间字段进行每次全量抽取,实现简单
2,抽取方式-增量抽取:大数据量中全量抽取效率过低,应选择按照类似修改时间字段进行每次增量抽取
2,数据抽取工具阿里dataworks

1,dataworks简单介绍

阿里云产品文档地址:https://help.aliyun.com/zh/dataworks/product-overview/
DataWorks基于MaxCompute、Hologres、EMR、AnalyticDB、CDP等大数据引擎,为数据仓库、数据湖、湖仓一体等解决方案提供统一的全链路大数据开发治理平台。

2,dataworks使用流程图

dataworks使用总体流程
在这里插入图片描述

数据开发流程
在这里插入图片描述

数据集成流程
在这里插入图片描述

3,数据地图

搜索需要使用的源数据表——>申请表权限
在这里插入图片描述

4,数据开发(DataStudio)

新建一个数据处理的业务流程
在这里插入图片描述

新建数据处理sql文件编写数据处理sql:业务流程下MaxCompute——>数据开发——>新建节点——>ODPS SQL——>编写数据处理汇集的查询sql并调试通过
在这里插入图片描述

新建数据处理后的中间层表:业务流程下MaxCompute——>表——>新建表
在这里插入图片描述

配置往数据处理后的中间层表同步的ODPS SQL的调度配置:重点为调度时间配置+调度依赖配置
注意:若所依赖的数据源表和数据处理后的中间层表不在同一工作空间下,则无法绑定依赖关系,则需观察数据源表的数据生成时间,手动设置ODPS SQL的调度时间延后
在这里插入图片描述

新建数据集成任务:数据集成——>新建节点——>离线同步——>选择数据来源(数据处理建立的ads层临时表)
——>选择数据去向——>调度配置配置时间属性等参数
在这里插入图片描述

4,ODPS SQL的开发规范+常用sql函数

1,sql语句全部大写,格式化操作
2,sql参考:https://help.aliyun.com/zh/maxcompute/user-guide/sql-3/
日期与时间函数:https://help.aliyun.com/zh/maxcompute/user-guide/date-functions
字符串函数:https://help.aliyun.com/zh/maxcompute/user-guide/string-functions
聚合函数:https://help.aliyun.com/zh/maxcompute/user-guide/aggregate-functions

三,ADB数据库的应用——数据抽取后的应用

1,ADB数据库注意点

1,adb表可以插入,可以带条件删除,不支持修改命令,不支持清空表表命令,不支持delete全量删除
2,adb表支持主键冲突——即主键冲突时不会多次插入数据
3,AnalyticDB MySQL版集群默认编码格式为utf-8,相当于MySQL中的utf8mb4编码,暂不支持其他编码格式。
4,AnalyticDB MySQL版不支持unsigned约束(指定当前列的数值为非负数)。

2,建表注意事项

1,AnalyticDB MySQL版的表分为分区表和维度表。

分区表:又称普通表,用于存储业务数据的度量值。AnalyticDB MySQL版根据分布键将数据打散在各个数据节点上。每个节点再根据分区键将数据文件拆分为不同的文件。
如果业务明确有增量数据导入需求,创建分区表时可以同时指定分布键和分区键,来实现数据的增量同步

维度表:维度表是业务特性描述的集合,每个节点冗余一份。通常数据量小,变化频率低。

2,主键中必须包含分布键和分区键,建议将分区键和分布键放在组合主键的前部

3,在普通表中定义表的分布键:DISTRIBUTED BY HASH(column_name,…),按照column_name的HASH值进行分片。
AnalyticDB MySQL版支持将多个字段作为分布键。
AnalyticDB MySQL版不支持修改分布键。

4,PARTITION BY VALUE(column_name)表示使用column_name的值来做分区

5,updateType:表数据更新方式:
realtime:实时更新,只支持实时写入数据。
batch:批量更新,只支持批量离线导入数据。不带此参数时,默认为批量更新。

3,常规聚合函数

在这里插入图片描述

4,窗口函数

窗口函数是基于查询结果的行数据进行计算的函数,运行在 HAVING 子句之后 ORDER BY 子句之前。触发一个窗口函数需要特殊的关键字 OVER子句来指定窗口。

一个窗口包含三个组成部分:

分区规范:用于将输入行分裂到不同的分区中,与 GROUP BY 子句的分裂过程相似。
排序规范:用于决定输入数据行在窗口函数中执行的顺序。
窗口框架:用于指定一个滑动窗口的数据,以给窗口函数指定需要处理的行数据。如果这个框架没有指定,则默认是 RANGE UNBOUNDED PRECEDING (与 RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW 相同),默认框架包含当前分区中所有从开始到目前行所有数据。
cume_dist() → bigint
返回一组数值中每个值的累计分布。结果返回的是按照窗口分区下窗口排序后的数据集下,
当前行前面包括当前行数据的行数。因此,排序中任何关联值均会计算成相同的分布值。dense_rank() → bigint
返回一组数值中每个数值的排名。这个函数与 rank() 相似,但该函数关联值不会产生顺序上的空隙。ntile(n) → bigint
将每个窗口分区的数据分裂到 n 个桶中(桶号从 1 到最大 n ,桶号值最多间隔是 1)。 
如果窗口分区中的数据行数不能均匀的分到每一个桶中,则剩余值将每一个桶分一个,从第一个桶开始。percent_rank() → bigint
返回数据集中每个数据的排名百分比。结果是根据 (r - 1) / (n - 1) 计算的,
其中 r 是由 rank() 计算 的当前行排名, n 是当前窗口分区内总的行数。rank() → bigint
返回数据集中每个值的排名。排名值是根据当前行之前的行数加1,不包含当前行,
因此排序的关联值可能产生顺序上的空隙。 rank() 排名会对每个窗口分区进行计算。row_number() → bigint
根据行在窗口分区内的顺序,为每行数据返回一个唯一的顺序的行号,从1开始。值函数
first_value(x)[与输入类型相同]
返回窗口内的第一个值。last_value(x)[与输入类型相同]
返回窗口内的最后一个值。nth_value(x, offset)[与输入类型相同]
返回窗口内指定偏移的值。偏移量从 1 开始。如果偏移量是null或者大于窗口内值的个数,返回null。 
如果偏移量为0或者负数,则会报错。lead(x[, offset[, default_value]])[与输入类型相同]
返回窗口内当前行往后偏移 offset 的值。偏移量可以是标量表达式,起始值是0(即当前数据行),默认是1 。
如果偏移量的值是 null 或者大于窗口长度,则返回 default_value;如果没有指定偏移量,则会返回 null 。lag(x[, offset[, default_value]])[与输入类型相同]
返回窗口内当前行往前偏移 offset 的值。偏移量可以是标量表达式,起始值是0(即当前数据行),默认是1 。
如果偏移量的值是null或者大于窗口长度,则返回 default_value;如果没有指定偏移量,则返回 null 。

这篇关于数据抽取+dataworks的使用+ADB的应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/347723

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python使用FastAPI实现大文件分片上传与断点续传功能

《Python使用FastAPI实现大文件分片上传与断点续传功能》大文件直传常遇到超时、网络抖动失败、失败后只能重传的问题,分片上传+断点续传可以把大文件拆成若干小块逐个上传,并在中断后从已完成分片继... 目录一、接口设计二、服务端实现(FastAPI)2.1 运行环境2.2 目录结构建议2.3 serv

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Spring Security简介、使用与最佳实践

《SpringSecurity简介、使用与最佳实践》SpringSecurity是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架,本文给大家介绍SpringSec... 目录一、如何理解 Spring Security?—— 核心思想二、如何在 Java 项目中使用?——

springboot中使用okhttp3的小结

《springboot中使用okhttp3的小结》OkHttp3是一个JavaHTTP客户端,可以处理各种请求类型,比如GET、POST、PUT等,并且支持高效的HTTP连接池、请求和响应缓存、以及异... 在 Spring Boot 项目中使用 OkHttp3 进行 HTTP 请求是一个高效且流行的方式。

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1