hive,
一 基本命令:(注意hive命令都要加;) sphive 进入数据仓库 show tables; 列出所有表名 desc table_name; 列出表内数据段信息 quit;退出hive select * from aorder by rand() limit 10;
二 建立表:
create table test_partition (id int, name string, no int)
partitioned by(dt string) stored as textfile;
CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。 EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。 如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。 有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。
三 插入数据: 3.1使用了OVERWRITE关键字,目标表中原来相同partition中的所有数据被覆盖,如果目标表中没有partition,则整个表会被覆盖。 从本地导入:load data local inpath 'wyp.txt' into table wyp PARTITION (dt=${dt}); 从HDFS上导入:load data inpath '/home/wyp/add.txt' into table wyp;
3.2在实际情况中,表的输出结果可能太多,不适于显示在控制台上,这时候,将Hive的查询输出结果直接存在一个新的表中是非常方便的,我们称这种情况为CTAS(create table .. as select),CTAS唯一的限制是目标表,不能是一个有分区的表,也不能是外部表。如下:
| hive> create table test4 > as > select id, name, tel > from wyp; |
3.3将表的输出结果直接插入到另一个表内,如果目标表(test)中不存在分区字段,可以去掉partition (age='25')语句。当然,我们也可以在select语句里面通过使用分区值来动态指明分区: hive> insert into table test > partition (age='25') > select id, name, tel > from wyp;
四 删除: 删除表 DROP TABLE table_name; 截断清空表: TRUNCATE TABLE table_name;
五 修改表 修改字段 alter table table_name change colum1 colum2 column2_type;
五 hive与shell交互: 5.1建立一个脚本文件a.sh,用hive -e"select* from…">result.txt 可以将结果重定向到一个文件中去。 5.2用spark跑,/usr/bin/hadoop/software/spark/bin/spark-hive -e "${query}" -c 1000 ,把命令写在query里 5.3写一个mapreduce跑
六 其他 order by 能保证结果全部有序化,sort by是保证同一个reduce下的有序 hive中判断某一字段为null :a is not null,或者a!=‘null’(不要和外面的引号重复)
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。