Hive DDL DML SQL操作
工作中经常要用到的一些东西,一直没整理,用的多的记住了,用的不多的每次都是去查,所以记录一下。
DDL(数据定义语言),那就包括建表,修改表结构等等了
建表:create hive table
1 hive> CREATE TABLE pokes (foo INT, bar STRING);
创建一个名为pokes的表,包括两个字段,第一个字段foo是整型,第二个字段bar是字符串。
1 hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
创建一个名为invites的表,包括两个字段(列):foo、bar,和一个分区字段(列)ds。分区字段是虚拟的字段(列)。他不属于数据本身,而是一个特定的数据集。
默认情况下表被按照文本格式存储,以ctrl+a分隔列。
下面是工作中常用的建表方式(日期表和分区表):
需要解释的地方:
1 ROW FORMAT DELIMITED 2 FIELDS TERMINATED BY '\001' 3 COLLECTION ITEMS TERMINATED BY '\002' 4 MAP KEYS TERMINATED BY '\003' 5 STORED AS TEXTFILE;
[ROW FORMAT DELIMITED]关键字,是用来设置创建的表在加载数据的时候,支持的列分隔符。不同列之间用一个'\001'分割,集合(例如array,map)的元素之间以'\002'隔开,map中key和value用'\003'分割。
stored as textfile表示按文本存储数据文件
浏览表:browsing through table
1 hive> SHOW TABLES;
列出所有的表
1 hive> SHOW TABLES '.*s';
列出所有以‘s’结尾的表(正则模式使用Java的规则)
1 hive> DESCRIBE invites;
列出表中的字段信息
变更和删除表:altering and dropping tables
可以变更表名,或者增加和删除列等:
1 hive> ALTER TABLE events RENAME TO 3koobecaf; 2 hive> ALTER TABLE pokes ADD COLUMNS (new_col INT); 3 hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment'); 4 hive> ALTER TABLE invites REPLACE COLUMNS (foo INT, bar STRING, baz INT COMMENT 'baz replaces new_col2');
注意:REPLACE COLUMNS替换所有的列,但是数据不会变更。这个功能可以用于删除表中的某些列,如:
1 ALTER TABLE invites REPLACE COLUMNS (foo INT COMMENT 'only keep the first column');
替换后仅留下了第一列和分区列
1 hive> DROP TABLE pokes;
删除表
DML(数据处理语言)包括数据载入导出等
从本地文件加载到表
1 hive> LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;
OVERWRITE表示覆盖表中数据,如果没有使用OVERWRITE将把数据追加到表中原有数据后面
载入文件中的内容必须按照正确地分隔符分割列,load data并不会进行数据验证
1 hive> LOAD DATA LOCAL INPATH './examples/files/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15'); 2 hive> LOAD DATA LOCAL INPATH './examples/files/kv3.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-08');
上面给两条语句将数据载入到不同的分区
1 hive> LOAD DATA INPATH '/user/myname/kv2.txt' OVERWRITE INTO TABLE invites PARTITION (ds='2008-08-15');
上面的命令从HDFS中加载文件。从HDFS中加载文件将移动文件
SQL(结构化查询语言)用于查询数据
查询
1 hive> SELECT a.foo FROM invites a WHERE a.ds='2008-08-15';
从invites表的2008-08-15分区中查询出foo字段
1 hive> INSERT OVERWRITE DIRECTORY '/tmp/hdfs_out' SELECT a.* FROM invites a WHERE a.ds='2008-08-15';
查询invites表的2008-08-15分区的所有字段内容并将查询结果导入到hdfs的/tmp/hdfs_out文件中
1 hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/local_out' SELECT a.* FROM pokes a;
将查询结果保存到本地文件
1 hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a; 2 hive> INSERT OVERWRITE TABLE events SELECT a.* FROM profiles a WHERE a.key < 100; 3 hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_3' SELECT a.* FROM events a; 4 hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_4' select a.invites, a.pokes FROM profiles a; 5 hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT COUNT(*) FROM invites a WHERE a.ds='2008-08-15'; 6 hive> INSERT OVERWRITE DIRECTORY '/tmp/reg_5' SELECT a.foo, a.bar FROM invites a; 7 hive> INSERT OVERWRITE LOCAL DIRECTORY '/tmp/sum' SELECT SUM(a.pc) FROM pc1 a;
一些查询示例
GROUP BY使用
1 hive> FROM invites a INSERT OVERWRITE TABLE events SELECT a.bar, count(*) WHERE a.foo > 0 GROUP BY a.bar; 2 hive> INSERT OVERWRITE TABLE events SELECT a.bar, count(*) FROM invites a WHERE a.foo > 0 GROUP BY a.bar;
(上面的两条语句是等价的)
JOIN
1 hive> FROM pokes t1 JOIN invites t2 ON (t1.bar = t2.bar) INSERT OVERWRITE TABLE events SELECT t1.bar, t1.foo, t2.foo;
join使用时要注意方式的选择({LEFT|RIGHT|FULL} [OUTER] JOIN)及优化,下面是一些参考
http://yugouai.iteye.com/blog/1849395
http://www.open-open.com/lib/view/open1341214750402.html
多表插入(MULTITABLE INSERT)
1 FROM src 2 INSERT OVERWRITE TABLE dest1 SELECT src.* WHERE src.key < 100 3 INSERT OVERWRITE TABLE dest2 SELECT src.key, src.value WHERE src.key >= 100 and src.key < 200 4 INSERT OVERWRITE TABLE dest3 PARTITION(ds='2008-04-08', hr='12') SELECT src.key WHERE src.key >= 200 and src.key < 300 5 INSERT OVERWRITE LOCAL DIRECTORY '/tmp/dest4.out' SELECT src.value WHERE src.key >= 300;
上面的语句含义是从src表中查询出各表需要的数据插入到不同的表中
如果本文对您有帮助,点一下右下角的“推荐”
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
hadoop1.2.1伪分布模式配置
1、修改core-site.xml,配置hdfs 1 <configuration> 2 <property> 3 <name>fs.default.name</name> 4 <value>hdfs://localhost:9000</value> 5 </property> 6 <property> 7 <name>hadoop.tmp.dir</name> 8 <value>/home/jimmy/Desktop/tmp</value> 9 </property> 10 </configuration> 注: a) fs.default.name对应的value是hdfs的ip和端口,只要端口不被占用即可b) hadoop.tmp.dir对应的value是hadoop临时文件的保存目录(根据需要修改成实际目录) 2、修改hdfs-site.xml,配置数据备份 1 <configuration> 2 ...
- 下一篇
一张图测试你的Hadoop能力-Hadoop能力测试图谱
1.引言 看到一张图,关于Hadoop技术框架的图,基本上涉及到Hadoop当前应用的主要领域,感觉可以作为测试Hadoop开发人员当前能力和水平的比较好的一个工具,特此分享给大家。如果你能够明白说出每一个技术框架的功能、应用场景和设计架构,那么恭喜你,已经正式步入Hadoop应用开发的世界了。 2.Hadoop菜鸟入门测试 3.评分标准 第一档 菜鸟初级(门外汉) 1-7 不及格 第二档 菜鸟8+X段,每答对一个,加一段 8-10 及格 第三档 见习Hadoop工程师 11-13 第四档 Hadoop工程师 14 4.高级测试 关于标准只能自悟了,悟的明白登堂入室,悟不明白继续努力。欢迎加入Hadoop高级培训交流群,同步讨论中,大数据是一种信仰,我们一起努力:293503507。好文要顶,看贴要回,动手测一次吧,这是一次可以改变你命运的机会,张开双臂,让我来迎接大数据时代吧。 作者:张子良 出处:http://www.cnblogs.com/hadoopdev 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Mario游戏-低调大师作品
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS8安装Docker,最新的服务器搭配容器使用