数据结构算法及知识点总结

本文介绍了希尔排序的原理和实现,以及Hive中的数据库概念、数据仓库与OLTP/OLAP的区别,数据仓库架构层次,ETL与ELT方法,以及Hive表的类型(内部表与外部表)及其区别。

数据结构算法第二天

 希尔排序

希尔排序法又称缩小增量法。

希尔排序法的基本思想

先选定一个整数gap,把待排序文件中所有元素分成gap组,即所有距离为gap的分在同一组内,并对每一组内的元素进行直接插入排序(本质是进行预排序,使数组更接近有序,目的是使最后一次直接插入排序提高效率)。然后取gap=gap/2或者gap=gap/3+1重复上述分组和排序的工作。当gap到达1时,数组是已经接近有序的,而对于直接插入排序在顺序有序或者接近顺序有序的数组内的时间复杂度为O(N),效率很高,当gap=1,即以一个元素为一组,就相当于对整个数组进行直接插入排序,得到的就是有序数组,也就排好序。

希尔排序的总体实现应该由三个循环完成:

  • 第一层循环:将gap依次折半,对序列进行分组,直到gap=1
  • 第二、三层循环:也即直接插入排序所需要的两次循环。

【代码实现】

#希尔排序
def insert_shell(L):
    / * 初始化gap值,此处利用序列长度的一般为其赋值 * /
    gap = (int)(len(L)/2)
    / * 第一层循环:依次改变gap值对列表进行分组 * /
    while (gap >= 1):
    / *下面:利用直接插入排序的思想对分组数据进行排序 * /
    / * range(gap,len(L)):从gap开始 * /
        for x in range(gap,len(L)):
    / * range(x-gap,-1,-gap):从x-gap开始与选定元素开始倒序比较,每个比较元素之间间隔gap * /
            for i in range(x-gap,-1,-gap):
    / * 如果该组当中两个元素满足交换条件,则进行交换 * /
                if L[i] > L[i+gap]:
                    temp = L[i+gap]
                    L[i+gap] = L[i]
                    L[i] =temp
    / *while循环条件折半 * /
        gap = (int)(gap/2)

深入Hive

一、数据库与数据仓库的区别

数据库

操作型处理(数据库),叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向用户交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常进行增删改查操作。用户较为关心操作的响应时间、数据的安全性、完整性和并发支持的用户数等问题。传统的数据库系统作为数据管理的主要手段,主要用于操作型处理。

数据仓库

分析型处理(数据仓库),叫联机分析处理OLAP(On-Line Analytical Processing),也可以称为面向专业分析人员进行数据分析,通常进行查询分析操作,一般针对某些主题的历史数据进行分析,支持管理决策。

二、数据仓库架构分层

数据仓库架构可分为三层——源数据层数据仓库层数据应用层:

源数据层(ODS):此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。

数据仓库层(DW):也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。

数据应用层(DA或APP):前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。

三、ETL和ELT

数据仓库从各数据源获取数据及在数据仓库内的数据转换和流动都可以认为是ETL(抽取Extract,转化Transform ,装载Load)的过程。但是在实际操作中将数据加载到仓库却产生了两种不同做法:ETL和ELT。

ETL: 先从数据源池中抽取数据,数据保存在临时暂存数据库中(ODS)。然后执行转换操作,将数据结构化并转换为适合目标数据仓库系统的形式,然后将结构化数据加载到数据仓库中进行分析。

ELT: 从数据源中抽取后立即加载。没有专门的临时数据库(ODS),这意味着数据会立即加载到单一的集中存储库中,数据在数据仓库系统中直接进行转换,然后进行分析。

四、数据库操作

数据库本质上就是在HDFS之上的文件夹。

默认数据库的存放路径是HDFS的:/user/hive/warehouse 

1. 创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [LOCATION position];

2. 删除数据库

DROP DATABASE db_name [CASCADE]; 

 3. 强制删除数据库,包含数据库下面的表一起删除(不要用这个

drop database myhive2 cascade;

4. 数据库和HDFS的关系

•Hive的库在HDFS上就是一个以.db结尾的目录

•默认存储在:/user/hive/warehouse

•可以通过LOCATION关键字在创建的时候指定存储目录

 五、内部表与外部表

1.Hive表的类型

•内部表(MANAGED_TABLE):分区表、分桶表

未被external关键字修饰的即是内部表,内部表又称管理表或者托管表。

创建内部表 : create table [if not exists]内部表名(字段名字段类型, ...)...;

复制内部表 :复制表结构: CREATE TABLE表名like存在的表名;

复制表结构和数据 : CREATE TABLE表名as select语句;

删除内部表 : drop table内部表名;

查看表格式化信息 : desc formatted表名;truncate

清空内部表数据 : truncate table内部表名;

•外部表(EXTERNAL_TABLE):分区表、分桶表

被external关键字修饰的即是外部表,外部表又称非管理表或者非托管表。

创建外部表 : createexternaltable [if not exists]内部表名(字段名字段类型, ...)...;

复制外部表 : 复制表结构:CREATE EXTERNAL TABLE表名like存在的表名;

删除外部表 : drop table外部表名;

查看表格式化信息 : desc formatted表名;

注意 : 外部表不能使用truncate关键字清空数据

2.区别

删除内部表: 直接删除元数据(metadata)及存储数据

删除外部表: 仅仅是删除元数据(表的信息),不会删除数据本身

六、Hive的默认字段分隔符

\001(^A)是一种特殊字符,是ASCII值在Notepad++文本编辑器中是显示为SOH的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值