当前位置: 首页 > news >正文

软件工程期末复习+数据仓库ETL

一、软件工程

请用基本路径测试方法为下列程序设计测试用例,并写明中间过程:

第1步:画出流程图

1.菱形用于条件判断。用在有分支的地方。

2.矩形表示一个基本操作。

3.圆形是连接点

第2步:计算程序环路复杂性

流图G的环路复杂度V(G)定义为:V(G)=E-N+2 (E为流图中的边数量,N为流图中的节点数量)。

V(G)也可以定义为:V(G)=P+1 其中:P为流图中的判断节点数量。

第3步:给出独立路径集

需要注意的是:路径集对每个循环至多只执行一次,所以第2次不会进入已经进入过的循环中。

(1)2.1 - 2.2.1 - 2.2.2 - 15 - 16

表示不满足i-1后大于等于0,即i-1后小于0,于是直接15,16退出。

(2)2.1 - 2.2.1 - 3 - 4.1 - 4.2 - 12 - 13 - 16

表示i-1后等于0,即i原本为1,即数组中只有1个数,i-1后i值为0,因为j=0,所以不满足j<i,直接退出循环,直接进入12,13,16退出

(3)2.1 - 2.2.1 - 2.2.2 - 3 - 4.1 - 4.2 - 5 - 10 - 4.3 - 4.2 - 12 - 13 - 16

(4)2.1 - 2.2.1 - 2.2.2 - 3 - 4.1 - 4.2 - 5 - 10 - 4.3 - 4.2 - 12 - 2.2.1 - 2.2.2 - 15 - 16

(5)2.1 - 2.2.1 - 2.2.2 - 3 - 4.1 - 4.2 - 5 - 6,7,8,9 - 10 - 4.3 - 4.2 - 12 - 13 - 16

(6)2.1 - 2.2.1 - 2.2.2 - 3 - 4.1 - 4.2 - 5 - 6,7,8,9 - 10 - 4.3 - 4.2 - 12 - 2.2.1 - 2.2.2 - 15 - 16

第4步:测试用例

(1)输入空值

(2)输入只有一个元素的数组,比如数组[3]

(3)输入升序排序的数组,比如数组[2,3,6,9]

(4)同样也是输入升序排序的数组,比如数组[2,3,6,9]

(5)输入数组[1,5,2]

(6)输入降序排序的数组,比如数组[9,5,3,2]

二、数据仓库

要解决的几个问题:

1.如何从数据库中抽取数据

如果你需要导入的数据量很小(如只有两张表,每张表大约一千行数据),你可能不需要使用Sqoop。Sqoop更适合批量数据传输和数据仓库场景,对于少量数据的导入,可以考虑以下几种简单的替代方法:直接导出/导入:使用MySQL的导出工具(例如mysqldump)导出表为SQL文件,然后在Hive命令行界面中运行这些SQL语句。
或者,如果数据表结构不复杂,可以将MySQL表数据导出为CSV文件,然后在Hive中创建表,并使用LOAD DATA LOCAL INPATH命令加载CSV文件。

2.如何进行数据转换,是否需要数据转换,需要使用什么工具,在哪个步骤中进行转换(是当数据在数据库中,还是要通过别的工具,还是要在数据仓库中转换??)

使用Hive SQL:你可以编写Hive SQL脚本来进行数据转换。例如,通过CREATE TABLE AS SELECT (CTAS) 语句创建新表,并在这个过程中对数据进行转换。
通过Hive的内置函数或自定义函数(UDF)对数据进行转换。
使用INSERT OVERWRITE 语句将转换后的数据写入到新的表或分区中。
使用ETL工具:你可以使用ETL(Extract, Transform, Load)工具,如Apache NiFi, Talend, Informatica等,来在数据进入Hive之前进行转换。
这些工具可以帮助你从多种源提取数据,应用复杂的转换逻辑,然后将其加载到Hive数据仓库中。
在Hadoop生态系统中进行转换:使用如Apache Spark, Apache Pig等其他Hadoop生态系统工具来进行数据的预处理和转换,然后再将数据加载到Hive。
编写转换脚本: 可以在IDEA中编写Hive SQL脚本、Spark程序(使用Scala或Python)或其他任何数据处理脚本,这些脚本可以用来进行数据转换。连接数据库和数据仓库: IDEA支持数据库插件,如Database Navigator或DataGrip功能,可以连接到Hive或其他数据库系统,从而可以直接运行SQL脚本来进行数据转换。

3.如何进行数据清洗,是否需要数据清洗,需要使用什么工具,在哪个步骤中进行清洗(是当数据在数据库中,还是要通过别的工具,还是要在数据仓库中转换??)

数据探索与评估: 在开始清洗之前,首先需要对数据进行探索和评估,确定需要进行哪些清洗操作。这一步骤可以通过SQL查询、数据可视化工具或者数据探索工具来完成。数据清洗操作: 包括但不限于去除重复数据、填充或删除缺失值、标准化数据格式、校验和更正数据错误等。在Hive中,这通常通过编写HiveQL脚本来完成。
在数据库中清洗: 如果原始数据已经在Hive或其他数据库中,可以直接在数据库中使用SQL脚本进行清洗。
使用ETL工具: 可以使用ETL工具(如Apache NiFi、Talend、Informatica等)来设计数据清洗流程。
在数据仓库中转换: 有时候,数据在加载到数据仓库之后进行清洗和转换,尤其是在使用Hive这样的大数据平台时。
使用IDEA进行数据清洗: 可以在IntelliJ IDEA中编写HiveQL脚本或Spark程序来进行数据清洗,然后将这些脚本运行在Hive上。

4.如何进行数据装载,如何将数据库中的数据导入数据仓库?是通过某种工具,还是通过IDEA这类编译器编写代码脚本的方式?

使用HiveQL命令:可以使用Hive提供的HiveQL命令来装载数据,这些命令可以在Hive的CLI(命令行界面)、通过Beeline客户端、或者在任何支持Hive连接的IDE中执行。例如,可以使用LOAD DATA命令来将数据从本地文件系统或者Hadoop的HDFS导入Hive表中。
-- 将本地文件系统中的数据导入Hive表
LOAD DATA LOCAL INPATH '/path/to/local/data.txt' INTO TABLE your_table;
-- 将HDFS中的数据导入Hive表
LOAD DATA INPATH '/path/to/hdfs/data.txt' INTO TABLE your_table;
关于使用IDEA进行数据装载,IntelliJ IDEA是一个集成开发环境,它支持连接Hive,并可以执行HiveQL脚本。你可以通过在IDEA中配置Hive连接,然后在SQL脚本编辑器中编写并执行HiveQL命令来进行数据装载。以下是在IDEA中进行数据装载的基本步骤:
在IDEA中安装Database Navigator插件或使用已内置的数据库支持功能。
配置Hive连接:你需要提供Hive服务器的JDBC URL、用户名和密码。
打开IDEA的数据库视图,右键点击创建的Hive连接,选择"Console"打开一个新的查询窗口。
在查询窗口中编写上述提到的LOAD DATA命令,并执行。

5.如何在数据仓库中建表,导入的数据在数据仓库中是一种怎么样的组织形式?

创建表的步骤:打开Hive的CLI(命令行界面),Beeline客户端,或者任何支持Hive连接的IDE(如IntelliJ IDEA)。使用CREATE TABLE语句定义表的结构,包括列名和数据类型。可以指定表的存储格式(如TEXTFILE、SEQUENCEFILE、ORC、PARQUET等)和位置(HDFS上的路径)。可以为表设置分区(PARTITIONED BY)和桶(CLUSTERED BY)等属性来优化查询性能和数据组织。CREATE TABLE IF NOT EXISTS my_table (id INT,name STRING,age INT,created_at TIMESTAMP
)
COMMENT 'This is a sample table'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/my_database/my_table';TEXTFILE:默认格式,以纯文本形式存储数据,字段通常由特定分隔符(如逗号或制表符)分隔。
SEQUENCEFILE:二进制格式,适用于键值对数据,可以压缩。
ORC (Optimized Row Columnar):高效的列存储格式,适合大型数据集,支持高度压缩和快速读取。
PARQUET:另一种列式存储格式,广泛用于Hadoop生态系统。

6.如何对数据仓库中的数据进行可视化?是通过某种工具还是?

BI工具集成:
有许多商业智能(BI)工具可以连接到Hive并对其数据进行可视化,这些包括但不限于:Tableau
Power BI
QlikView
Looker
Apache Superset
这些工具通常提供了一个用户友好的界面,通过JDBC或ODBC驱动与Hive进行交互,并且允许用户创建图表、报表和仪表板。
数据分析平台:
一些数据分析平台如Zeppelin或Jupyter Notebook可以与Hive直接交互,允许用户写Hive查询并利用Python、R等语言中的可视化库(如matplotlib、seaborn、ggplot2等)来展示结果。
Hadoop生态集成工具:Hue:Hue是一个开源的SQL助手,为Hive提供了一个易于使用的Web界面,可以执行查询并查看结果。Hue也有基本的图表和可视化功能。
Apache Drill:可以通过SQL查询Hive和其他数据源,并且与BI工具集成,提供数据可视化能力。
自定义应用程序:
可以使用各种编程语言(如Java、Python、Scala等)通过Hive的JDBC或Thrift API连接到Hive,执行查询并获取数据。然后,可以使用图形库(如Python中的matplotlib或JavaScript中的D3.js)来创建自定义的可视化。

相关文章:

软件工程期末复习+数据仓库ETL

一、软件工程 请用基本路径测试方法为下列程序设计测试用例&#xff0c;并写明中间过程&#xff1a; 第1步&#xff1a;画出流程图 1.菱形用于条件判断。用在有分支的地方。 2.矩形表示一个基本操作。 3.圆形是连接点 第2步&#xff1a;计算程序环路复杂性 流图G的环路复杂…...

学习C语言——体会计算机中的0和1

/* 把hello隐写入一个整型数组,这个小程序可以考察是否清楚数据在内存中存储的具体细节。 具体的说&#xff0c;int类型在小端机器上的存储方式是高位在高地址&#xff0c;低位在低地址&#xff0c;从视觉习惯上和我们的日常书写习惯相反&#xff1b; char类型占用…...

PyTorch官网demo解读——第一个神经网络(1)

神经网络如此神奇&#xff0c;feel the magic 今天分享一下学习PyTorch官网demo的心得&#xff0c;原来实现一个神经网络可以如此简单/简洁/高效&#xff0c;同时也感慨PyTorch如此强大。 这个demo的目的是训练一个识别手写数字的模型&#xff01; 先上源码&#xff1a; fr…...

升华 RabbitMQ:解锁一致性哈希交换机的奥秘【RabbitMQ 十】

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 升华 RabbitMQ&#xff1a;解锁一致性哈希交换机的奥秘【RabbitMQ 十】 前言第一&#xff1a;该插件需求为什么需要一种更智能的消息路由方式&#xff1f;一致性哈希的基本概念&#xff1a; 第二&…...

vue3 element-plus 日期选择器 el-date-picker 汉化

vue3 项目中&#xff0c;element-plus 的日期选择器 el-date-picker 默认是英文版的&#xff0c;如下&#xff1a; 页面引入&#xff1a; //引入汉化语言包 import locale from "element-plus/lib/locale/lang/zh-cn" import { ElDatePicker, ElButton, ElConfigP…...

剑指 Offer(第2版)面试题 35:复杂链表的复制

剑指 Offer&#xff08;第2版&#xff09;面试题 35&#xff1a;复杂链表的复制 剑指 Offer&#xff08;第2版&#xff09;面试题 35&#xff1a;复杂链表的复制解法1&#xff1a;模拟 剑指 Offer&#xff08;第2版&#xff09;面试题 35&#xff1a;复杂链表的复制 题目来源&…...

自定义指令Custom Directives

<script setup langts> import { ref } from "vue"const state ref(false)/*** Implement the custom directive* Make sure the input element focuses/blurs when the state is toggled* */ // 以v开头的驼峰式命名的变量都可以作为一个自定义指令 const VF…...

预测性维护对制造企业设备管理的作用

制造企业设备管理和维护对于生产效率和成本控制至关重要。然而&#xff0c;传统的维护方法往往无法准确预测设备故障&#xff0c;导致生产中断和高额维修费用。为了应对这一挑战&#xff0c;越来越多的制造企业开始采用预测性维护技术。 预测性维护是通过传感器数据、机器学习和…...

华为、新华三、锐捷常用命令总结

华为、新华三、锐捷常用命令总结 一、华为交换机基础配置命令二、H3C交换机的基本配置三、锐捷交换机基础命令配置 一、华为交换机基础配置命令 1、创建vlan&#xff1a; <Quidway> //用户视图&#xff0c;也就是在Quidway模式下运行命令。 <Quidway>system-view…...

链路追踪详解(四):分布式链路追踪的事实标准 OpenTelemetry 概述

目录 OpenTelemetry 是什么&#xff1f; OpenTelemetry 的起源和目标 OpenTelemetry 主要特点和功能 OpenTelemetry 的核心组件 OpenTelemetry 的工作原理 OpenTelemetry 的特点 OpenTelemetry 的应用场景 小结 OpenTelemetry 是什么&#xff1f; OpenTelemetry 是一个…...

Node.js 工作线程与子进程:应该使用哪一个

Node.js 工作线程与子进程&#xff1a;应该使用哪一个 并行处理在计算密集型应用程序中起着至关重要的作用。例如&#xff0c;考虑一个确定给定数字是否为素数的应用程序。如果我们熟悉素数&#xff0c;我们就会知道必须从 1 遍历到该数的平方根才能确定它是否是素数&#xff…...

python matplotlib 三维图形添加文字且不随图形变动而变动

要在三维图形中添加文字并使其不随图形变动而变动&#xff0c;可以使用 annotate() 方法。这个方法可以在三维图形中添加文字&#xff0c;并且可以指定文字的位置、对齐方式和字体大小等属性。 下面是一个示例代码&#xff0c;演示如何在三维图形中添加文字&#xff1a; impo…...

Ubuntu设置kubelet启动脚本关闭swap分区

查看swap分区 swapon -s打开swap分区 swapon -a查看/etc/fstab下所有固化的swap分区&#xff0c;注释 vi /etc/fstab修改kubelet.conf文件 vi /etc/systemd/system/kubelet.service.d/10-kubeadm.conf添加 ExecStartPre/sbin/swapoff -a生效 systemctl daemon-reload sys…...

MySQL数据库存储

MySQL数据库存储 MySQL数据库简介MySQL开发环境MySQL安装图形化界面工具Navicat使用 表的操作表的概念3.2 创建表3.3 修改表 数据的操作-增删改查4.1 增加数据4.2 删除数据4.3 修改数据4.4 查询数据4.4.1 基础查询4.4.2 分组查询和聚合函数4.4.4 having语句4.4.5 排序4.5 多表联…...

verilog语法进阶,时钟原语

概述&#xff1a; 内容 1. 时钟缓冲 2. 输入时钟缓冲 3. ODDR2作为输出时钟缓冲 1. 输入时钟缓冲 BUFGP verilog c代码&#xff0c;clk作为触发器的边沿触发&#xff0c;会自动将clk综合成时钟信号。 module primitive1(input clk,input a,output reg y); always (posed…...

案例069:基于微信小程序的计算机实验室排课与查询系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…...

C语言:将三个数从大到小输出

#include<stdio.h> int main() {int a 0;int b 0;int c 0;printf("请输入abc的值&#xff1a;");scanf_s("%d%d%d", &a, &b, &c);if (b > a){int tmp a;a b;b tmp;}if (c > a){int tmp a;a c;c tmp;}if (b < c){int t…...

基于Hadoop的铁路货运大数据平台设计与应用

完整下载&#xff1a;基于Hadoop的铁路货运大数据平台设计与应用 基于Hadoop的铁路货运大数据平台设计与应用 Design and Application of Railway Freight Big Data Platform based on Hadoop 目录 目录 2 摘要 3 关键词 4 第一章 绪论 4 1.1 研究背景 4 1.2 研究目的与意义 5 …...

Java基础题2:类和对象

1.下面代码的运行结果是&#xff08;&#xff09; public static void main(String[] args){String s;System.out.println("s"s);}A.代码编程成功&#xff0c;并输出”s” B.代码编译成功&#xff0c;并输出”snull” C.由于String s没有初始化&#xff0c;代码不能…...

冒泡排序学习

冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法&#xff0c;它通过重复地交换相邻的元素来排序。具体实现如下&#xff1a; 1. 从待排序的数组中的第一个元素开始&#xff0c;依次比较相邻的两个元素。 2. 如果前一个元素大于后一个元素&#xff0c;则交换…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

R 语言科研绘图第 55 期 --- 网络图-聚类

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…...