以下内容记录数据库相关的一些零散知识点,主要以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:    可理解为表中的主键

更多相关文章

  1. myisam 表中, 删除数据后运行 OPTIMIZE TABLE 锁表问题
  2. mysql数据库拷贝到另一个服务器上
  3. php怎么读取MYSQL数据到radio选项
  4. MySQL可视化软件Work Bench导出导入数据库
  5. MySQL数据导入到infobright中
  6. Android如何通过JDBC直连访问MySQL数据库?
  7. flash如何自动连接mysql数据库
  8. lucene 4.10 检索mysql数据库
  9. 自建MySQL5.6数据库查询优化

随机推荐

  1. Android使用addView动态添加组件
  2. android小说阅读源码、bilibili源码、MVP
  3. android:screenOrientation属性(转)
  4. 连线:纯正Android已死 “Android兼容设备
  5. Android hardware so加载流程
  6. ListView的一些应用
  7. android rom短信模块最后获取的Cursor字
  8. Android(安卓)TextView 添加下划线的几种
  9. Android那些事儿(一)成长中的Android
  10. 使用Vitamio打造自己的Android万能播放器