欢迎投稿

今日深度:

HIVE一,

HIVE一,


Hive的数据存储

1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
Mysql有自己的数据存储格式,如window的mysql 表的存储格式是扩展名为 .frm的文件

2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。

插入数据

只能load,没有insert
不检查数据,在读取时才检查数据,数据不符合就读出来null
load data local inpath ‘/home/hadoop/develop_env/mydata/t_order.txt’ into table t_order;
追加
insert into table table1 select * from table2
覆盖
insert overwrite table table1 select * from table2
多插入模式
insert into table t_user select id,name from t_user2
Hive的数据管理模式
关系型数据库的数据管理模式:写时模式,即添加数据的时候就检查数据格式,格式错误无法插入。
Hive的数据管理模式:读时模式,即读取数据的时候才检查数据格式,不匹配返回null。(即hive:使用的读时模式,写操作不检测数据,读数据有问题时,使用NULL代替。)

内部表&外部表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);
区别:
内部表数据由Hive自身管理,外部表数据由HDFS管理;
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

创建一个内部表:

CREATE TABLE page_view ( viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING ,
ip STRING COMMENT ‘IP Address of the User’ )
COMMENT ‘This is the page view table’
PARTITIONED BY( dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY
‘\001’
STORED AS SEQUENCEFILE;

分区和分桶

“order by” 和“sort by"的区别

   1、order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
    2、sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。

    3、distribute by(字段)根据指定的字段将数据分到不同的reducer,且分发算法是hash散列。
    4、Cluster by(字段) 除了具有Distribute by的功能外,还会对该字段进行排序。
    5、创建分桶表并不意味着load进数据也是分桶的,你必须先分好桶,然后再放到表中

www.htsjk.Com true http://www.htsjk.com/hive/41689.html NewsArticle HIVE一, Hive的数据存储 1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等) Mysql有自己的数据存储格式,如window的mysql 表的存储...
相关文章
    暂无相关文章
评论暂时关闭