一、数据结构与算法3
3、栈
栈结构具有的“后进先出”特性,使得栈成为程序设计中的有用工具。
括号匹配问题
设表达式中包含三种括号:圆括号、方括号和花括号,它们可互相嵌套,如([ || ]([ ]))或(|([][()])|)等均为正确的格式,而|[]|)|、|[()]或([]|均为不正确的格式。
【算法思想】检验算法中可设置一个栈,每读人一个字符,若是左括号,则直接入栈,等待相配的同类右括号;若是右括号,且与当前栈顶的左括号同类型,则二者匹配,将栈顶的左括号出栈,否则属于不合法的情况。另外,如果输入序列已读完,而栈中仍有等待匹配的左括号,或者读人了一个右括号,而栈中已无等待匹配的同类型左括号,均属不合法的情况。当输入序列和栈同时变为空时,说明所有括号完全匹配。
【算法描述】括号匹配算法
void BracketMatch(char * str)
/* str[]为输入的字符串,利用堆栈技术来检查该字符串中的括号是否匹配*/
{
Stack S;int i;char ch;
InitStack(&S);
For(i=0;str[i]!='\0';i++) /*对字符串中的字符逐一扫描*/
{
switch(str[i]);
{
case '(':
case '[':
case '{':
Push(&S,str[i]);
break;
case ')':
case ']':
case '}':
if(IsEmpty(&S))
{ printf("\n右括号多余!");return;}
else
{
GetTop (&S,&ch);
if( Match(ch,str[i]))/*用Match()函数判断两个括号是否匹配*/
else
{printf("\n对应的左右括号不同类!");return;}
}
}/*switch*/
}/*for*/
if(IsEmpty(S))
printf("\n括号匹配!");
else
printf("\n左括号多余!");
}
二、HIve
1、数据仓库和数据库的区别:
操作型处理(数据库):叫联机事务处理OLTP (On-Line Transaction Processing),也可以称面向用户交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常进行增删改查操作。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。
分析型处理(数据仓库):叫联机分析处理OLAP (On-Line Analytical Processing), 也可以称为面向专业分折人员进行数据分析,通常进行查询分析操作,一股针对某些主题的历史数据进行分析,支持管理决策。
数据仓库主要特征;
面向主题的(Subject-Oriented)、集成的(Integrated)、非易失的(Non-Volatile) 和时变的(Time-Variant
开源:Doris,StarRocks(可以直接在数据库里进行增删改查,不会缩秒)
StarRocks比Doris稳定,是半开源
注:Hive不是数据仓库,是处理数据仓库的一种工具
2、数仓分层
数仓架构可分为三层:源数据层、数据仓库层、数据应用层
ODS:原始数据
3、ETL和ELT
数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL (抽取Extract, 转化Transform,装载Load)的过程。
但是在实际操作中将数据加载到仓库却产生了两种不同做法:ETL和ELT。
ETL:先从数据源池中抽取数据,数据保存在临时暂存数据库中 (ODS)。然后执行转换操作,将数据结构化并转换为适合目标数据仓库系统的形式,然后将结构化数据加载到数据仓库中进行分析。
ELT:从数据源中抽取后立即加载。没有专门的临时数据库(ODS),这意味着数据会立即加载到单
一的集中存储库中,数据在数据仓库染统中直接进行转换,然后进行分析。
4、数据库命令语句
强制删除数据库
drop database myhive cascade;
删除数据库
drop database if exists myhive/drop database myhive
创建数据库
create database [if not exists] db_name [location positon]
5、内部表和外部表
内部表和外部表的区别
删除内部表:直接删除元数据(metadata)及存储数据
删除外部表:仅仅是删除元数据(表的信息),不会删除数据本身
内部表:
/*创建内部表*/
create table [if not exists] 内部表名(字段名 字段类型,...
)..;
/*复制内部表*/
/*复制表结构*/
CREATE TABLE 表名 like 存在的表名;
/*复制表结构和数据*/
CREATE TABLE 表名 as select语句;
/*删除内部表*/
drop table 内部表名;
/*查看表格式化信息*/
desc formatted 表名;
/*truncate清空内部表数据*/
truncate table 内部表名;
外部表:
/*创建外部表*/
create external table [if not exists] 内部表名(字段名 字段类型,...
)..;
/*复制外部表*/
/*复制表结构*/
CREATE EXTERNAL TABLE 表名 like 存在的表名;
/*删除外部表*/
drop table 外部表名;
/*查看表格式化信息*/
desc formatted 表名;
注:外部表不能使用truncate关键字清空数据
6、查看表结构
查看所有表
show tables;
查看建表语句
show create table 表名;
查看表结构信息
desc 表名;
查看表格式化信息
desc formatted 表名;
7、修改表操作
修改表名
alter table 旧表名 rename to 新表名;
修改表路径
alter table 表名 set location 'hdfs中存储路径';
/*注意:建议使用默认路径*/
修改表属性
alter table 表名 set tblproperties ('属性名'='属性值');
/*注意:经常用于内外部表切换*/
内部表转外部表
外部表转内部表
通过stu set tblproperties来修改属性
注:('EXTERNAL'='FALSE')或('EXTERNAL'='TRUE')为固定写法,区分大小写