数据库相关零散知识点记录

以下内容记录数据库相关的一些零散知识点,主要以Hive为主,内容不定期更新

(1)MySQL数据库基础知识

数据库的底层存储通常使用文件系统,它可以是普通操作系统文件、专用操作系统文件,甚至可能是磁盘分区,其实就是比普通的文件系统多了数据管理的功能。数据库存储数据的单位为表格,可想像成pandas中的DataFrame,有四种操作数据的方式:查询、插入、更新、删除。数据库的基本操作见《python 核心编程》p595。
在表中,可能会包含重复值。如果只需列出不同的值,可使用distinct关键词,可作用于单字段或多字段。
参考http://www.cnblogs.com/rainman/archive/2013/05/03/3058451.html

SQL各关键字的执行顺序:参考http://blog.csdn.net/linxianliang5201314/article/details/6871199,具体执行顺序可查看查询分析器的执行计划
(8)SELECT (9)DISTINCT (11)<Top Num> <select list>
(1)FROM [left_table]
(3)<join_type> JOIN <right_table>
(2)ON <join_condition>
(4)WHERE <where_condition>
(5)GROUP BY <group_by_list>
(6)WITH <CUBE | RollUP>
(7)HAVING <having_condition>
(10)ORDER BY <order_by_list>

SQL查询语句
select count(*) from tag_analise_zh where flag is null;    #字段为NULL时的查询方法,而不是where flag = 'null'
select count(*) from tag_analise_zh where flag is not null;
select distinct class_fst from tag_analise_zh;    #查看某列的所有取值
in与inner join的区别 http://blog.csdn.net/du_qi/article/details/51305380

SQL可以使用集合类型,可使用find_in_set(str, strlist)查找某集合类型字段中的某个常量值,http://www.cnblogs.com/manongxiaobing/p/4682698.html

(2)Hive基础知识
Hive是一个基于Hadoop文件系统上的数据仓库架构。

Hive的查询很慢,查看某个表中数据的总条数或者部分数据都可能要走map/reduce过程。

Hive命令有三种调用方式:
$hive,进入hive中,以交互的方式使用命令
$hive -e 'sql语句',直接执行单条sql语句,可以加-S选项采用静音模式,如hive -S -e 'select * from t1',静音模式下不会显示mapreduce的操作过程
$hive -f 'sql脚本','sql脚本'就是一个文本,里面内容是sql语句

hive支持的数学运算:http://www.cnblogs.com/end/archive/2012/06/18/2553682.html
show create table table_name; 可以获得表的建表语句,与desc相比,各自适合怎样的应用场景?
Hive中主要包含四类数据模型:表、外表、分区和桶。每个表在Hive中都有一个对应的存储目录,如'hdfs://nameservice1/user/hive/warehouse/app.db/imei_app_d'。表中的每个分区都对应数据库中相应分区列的一个索引,每个分区的存储都对应表下的一个目录。分区是对表进行粗粒度的划分,那么桶就是对表进行细粒度的划分,桶对指定列进行哈希计算,然后再根据计算的哈希值分配到不同的桶,每个桶的实际存储就是一个文件,这时不能再进行划分了。没有分区的表也可以创建桶。外表只有元数据,没有实际数据,实际数据仍然存储在创建语句LOCATION指定的HDFS路径中,并不会移动到数据仓库目录中,如果删除一个外表,仅会删除元数据,不会删除表中数据,有点类似于mysql中的视图。
show tables 带通配符的正则表达式; 将列出与正则表达式匹配的表名,比如show tables 'tag*';将列出以tag开头的表名

hive中的limit与sql的limit有点不同,语句例子如下所示:
select * from t1 limit 5;    随机选取检索结果中的5条输出
select * from t1 sort by num desc limit 5;    输出top5的查询结果
select * from t1 limit 5;    sql中是返回前5个记录
select * from t1 limit 5,10;    sql中的limit可以有两个参数,返回记录行6-15

tablesample是抽样语句,语法:TABLESAMPLE(BUCKET x OUT OF y on id) 。y必须是table总bucket数的倍数或者因子。hive根据y的大小,决定抽样的比例。例如,table总共分了64份,当y=32时,抽取 (64/32=)2个bucket的数据,当y=128时,抽取(64/128=)1/2个bucket的数据。x表示从哪个bucket开始抽取。例 如,table总bucket数为32,tablesample(bucket 3 out of 16),表示总共抽取(32/16=)2个bucket的数据,分别为第3个bucket和第(3+16=)19个bucket的数据。id是被划分为桶的列,使用rand()函数可以对没有划分成桶的表进行取样,但是这样即使只需要读取很小一部分样本,也要扫描整个输入数据集。

hive中数组元素的分割符是^B,同时按住ctrl+v+b可打出该字符
hive查询字段的值,最好与定义的类型一致,如select * from app.imei_app_d where data_date=20160514 and tail=0 limit 10;   //走mapReducuce查询

select * from app.imei_app_d where data_date=20160514 and tail='0' limit 10; //不走mapReduce查询,因为分区字段tail是string类型

(3) Redis基础知识

Redis是目前公认的速度最快的基于内存的键值对(Key-Value)数据库,但redis的缺点也非常明显,仅提供string、list、set、zset(sorted set)和hash等基本数据类型,不分表,没有schema,没有索引,没有外键,缺少int/date等基本数据类型,多条件查询需要通过集合内联(sinter,zinterstore)和连接间接实现,操作不便,开发效率低,可维护性不佳。因此,一般不将其视为完整的数据库单独使用,很多网站将redis作为高速缓存和session状态存储层,然后再与其他数据库搭配使用。
Redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。
Redis启动时从硬盘加载数据到内存,需要的时候也可以把数据从内存保存到硬盘。
Redis数据库采用极简的设计思想,最新版的源码包还不到2Mb
Redis没有严格意义上的表名和字段名,以 Key-Value 键值对的方式存储,因此一般采用 schema:key 形式做为键值,其中
schema: 可理解为传统数据库中的表名
key:    可理解为表中的主键

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值