hive与传统数据库的比较
数据加载模式
传统数据库在数据加载时数据类型必须符合数据要求,这种在写入时进行数据验证的称为写时模式(schema on write)
而hive在数据加载时不对数据进行验证,而是在读的时候进行验证。
优劣势比较:
写时模式在查询时速度更快,加上索引、数据压缩等优化,但在数据写入时会比较慢,比如数据验证、更新索引等。
读时模式在数据加载更快,因为hive是基于大数据的,数据量较大的情况下,我们优先关注数据怎么存的问题,在查时才去确认数据。
hive加载数据基本上是数据文件的移动,而不是复制。
复制是会出现在不是在一个文件系统上,比如有local关键字。
练习
下面我做个实验直接将数据复制到了表的仓库(warehouse)里。
可以看到warehouse中tt2的表什么都没有。右边我开始上传数据。
然后开始查询
表结构:
create table tt2(name string ,age int) row format delimited fields terminated by ',';
数据格式:
hadoop fs -cat /user/hive/warehouse/tt2/table_data.txt
jack,15
tom,61
tony,35
这里我规定了行内数据的分割符,不然会造成数据对不上的情况,比如age显示为空。
外部表和内部表
内部表(managed table)由hive管理数据和表信息。
外部表(external table)由hive管理表信息,数据放在外部。
具体操作的差异体现在load和drop上。
Tables | load | drop |
---|---|---|
内部表 | 将数据加载到仓库目录 | 删除表和表数据 |
外部表 | 将数据存放在外部 | 仅删除表信息 |
外部表创建方式
create external table exttable (name string ,age int) row format delimited fields terminated by ',' location '/input/exttable';
上传数据文件
hadoop fs -put table_data.txt /input/exttable/
表查询
表删除实验:
发现数据文件还在: