Hive 简单SQL

1.创建表

(1)内部表和外部表的区别

默认创建的是内部表,可以指定目录,如果不指定则会创建默认目录,一旦drop,该目录和数据都会被删除

创建external table 的时候需要指定存放目录,并且drop表的时候,不会删除该目录和目录下的数据,只会删除元信息

#创建一个外部表

0: jdbc:hive2://192.168.163.102:10000> create external table t10(c1 int,c2 string) row format delimited fields terminated by ',' stored as testfile  location "/dir1";

[[email protected] tmp]# hdfs dfs -put file1 /dir1

[[email protected] tmp]# hdfs dfs -ls -R /dir1

-rw-r--r--   1 root supergroup         24 2017-11-25 20:53 /dir1/file1

0: jdbc:hive2://192.168.163.102:10000> drop table t10;

No rows affected (0.41 seconds)

[[email protected] tmp]# hdfs dfs -ls -R /dir1

17/11/25 20:56:41 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

-rw-r--r--   1 root supergroup         24 2017-11-25 20:53 /dir1/file1

#创建一个默认的内部表

0: jdbc:hive2://192.168.163.102:10000> create table t2(c1 int,c2 string) row format delimited fields terminated by ',' stored as textfile;

(2)Hive支持的存储文件格式

textfile, sequencefile, orc, parquet,avro

0: jdbc:hive2://192.168.163.102:10000> create table t5(c1 int,c2 string) row format delimited fields terminated by ',' stored as sequencefile ;

0: jdbc:hive2://192.168.163.102:10000> insert into t5 select * from t4;

#作为sequencefile格式存储的文件无法直接查看其内容

[[email protected] tmp]# hdfs dfs -ls  /user/hive/warehouse/testdb1.db/t5/

-rwxr-xr-x   1 root supergroup        146 2017-11-26 03:03 /user/hive/warehouse/testdb1.db/t5/000000_0

0: jdbc:hive2://192.168.163.102:10000> desc formatted t5;

2.导入数据到hive

语法:

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]

(1) 直接把本地的文件导入到hive中的表

0: jdbc:hive2://192.168.163.102:10000> load data local inpath '/tmp/file1' into table t1;

0: jdbc:hive2://192.168.163.102:10000> select * from t1;

+--------+--------+--+

| t1.c1  | t1.c2  |

+--------+--------+--+

| 1      | aaa    |

| 2      | bbb    |

| 3      | ccc    |

| 4      | ddd    |

+--------+--------+--+

(2)加载数据到表中,但是会覆盖表中所有数据,实质是覆盖t1目录下的所有文件

0: jdbc:hive2://192.168.163.102:10000> load data local inpath '/tmp/file3' overwrite into table t1;

No rows affected (0.597 seconds)

0: jdbc:hive2://192.168.163.102:10000> select * from t1;

+--------+---------+--+

| t1.c1  |  t1.c2  |

+--------+---------+--+

| 1      | yiyi    |

| 2      | erer    |

| 3      | sansan  |

| 4      | sisi    |

+--------+---------+--+

4 rows selected (0.073 seconds)

(3)把hdfs上的文件导入到hive中的表

[[email protected] tmp]# cat /tmp/file2

5,eee

[[email protected] tmp]# hdfs dfs -put /tmp/file2 /user/hive/warehouse/testdb1.db/t1

0: jdbc:hive2://192.168.163.102:10000> load data inpath '/user/hive/warehouse/testdb1.db/t1/file2' into table t1;

0: jdbc:hive2://192.168.163.102:10000> select * from t1;

+--------+--------+--+

| t1.c1  | t1.c2  |

+--------+--------+--+

| 1      | aaa    |

| 2      | bbb    |

| 3      | ccc    |

| 4      | ddd    |

| 5      | eee    |

+--------+--------+--+

(4)根据一个表创建另一个表,同时插入数据

0: jdbc:hive2://192.168.163.102:10000> create table t2 as select * from t1;

(5)根据一个表先创建表结构,后插入数据

0: jdbc:hive2://192.168.163.102:10000> create table t3 like t1;

0: jdbc:hive2://192.168.163.102:10000> insert into t3  select * from t1;

3,从查询结果导数据到文件系统中

(1)从查询结果导数据到HDFS文件系统中

0: jdbc:hive2://192.168.163.102:10000> select * from t1;

+--------+---------+--+

| t1.c1  |  t1.c2  |

+--------+---------+--+

| 1      | yiyi    |

| 2      | erer    |

| 3      | sansan  |

| 4      | sisi    |

+--------+---------+--+

0: jdbc:hive2://192.168.163.102:10000> insert overwrite directory '/user/hive/warehouse/tmp' select * from testdb1.t1;

[[email protected] tmp]# hdfs dfs -ls -R /user/hive/warehouse/tmp

-rwxr-xr-x   1 root supergroup         30 2017-11-26 00:25 /user/hive/warehouse/tmp/000000_0

[[email protected] tmp]# hdfs dfs -get /user/hive/warehouse/tmp/000000_0 /tmp/

导出的文件的分隔符对应的ASCII码是Ctrl+a 即\001

[[email protected] tmp]# vim /tmp/000000_0

1^Ayiyi

2^Aerer

3^Asansan

4^Asisi

利用这个文件创建一个外部表,使用\001为分隔符

0: jdbc:hive2://192.168.163.102:10000> create external table t5(c1 int,c2 string) row format delimited fields terminated by '\001' location '/user/hive/warehouse/tmp/';

0: jdbc:hive2://192.168.163.102:10000> select * from t5;

+--------+---------+--+

| t5.c1  |  t5.c2  |

+--------+---------+--+

| 1      | yiyi    |

| 2      | erer    |

| 3      | sansan  |

| 4      | sisi    |

+--------+---------+--+

(2)从查询结果导数据到本地

0: jdbc:hive2://192.168.163.102:10000> insert overwrite  local directory '/tmp' select * from testdb1.t1;

[[email protected] tmp]#  ls /tmp/000000_0

/tmp/000000_0

4 insert

(1) insert 插入数据的实质是建立一个文件

0: jdbc:hive2://192.168.163.102:10000> insert into t5 values(4,'sisi');

No rows affected (17.987 seconds)

0: jdbc:hive2://192.168.163.102:10000> dfs -ls /user/hive/warehouse/testdb1.db/t5 ;

+----------------------------------------------------------------------------------------------------------------+--+

|                                                   DFS Output                                                   |

+----------------------------------------------------------------------------------------------------------------+--+

| Found 2 items                                                                                                  |

| -rwxr-xr-x   1 root supergroup        146 2017-11-26 03:03 /user/hive/warehouse/testdb1.db/t5/000000_0         |

| -rwxr-xr-x   1 root supergroup        106 2017-11-26 04:22 /user/hive/warehouse/testdb1.db/t5/000000_0_copy_1  |

+----------------------------------------------------------------------------------------------------------------+--+

原文地址:http://blog.51cto.com/darrenmemos/2066616

时间: 2024-11-05 14:56:35

Hive 简单SQL的相关文章

使用嵌套子查询优化hive的SQL

[Author]: kwu 使用子查询优化hive的SQL 在1亿条数据中执行一条简单的语句,查询只访问主站一次的用户数量: select count(*) as cnt from tracklog group by cookieid having cnt=1 ; 查询反应很慢,半小时都未出结果 使用嵌套子查询优化hive-SQL select count(t.cookieid) from (select count(cookieid) as cnt,cookieid from tracklog

5.简单sql注入之2

提示:有回显的sql注入 这题其实使用上一篇博文的/**/技术即可获得flag 上一篇博文简单sql注入补充: 其实那题还过滤了关键词加空格(只过滤一遍,所以写两遍即可),出题者考的是如下sql语句(空格和关键词都要写两遍) 1'  unionunion  selectselect  flag  fromfrom  flag  wherewhere  '1'='1 本人也是初学者,参考了许多大佬的wp 自己写出来后有什么错误的地方,希望大家指出,谢谢!

oracle 简单SQL

1, insert into test select * from test;(造测试数据) 2, create table b as select * from a; (创建表结构一样的空表,数据可同上插入数据) 3,linux系统下让sqlplus支持历史命令回调 在linux中实现上述功能,需要一个小工具,叫做rlwrap,这个程式本身是个Shell,可以运行任何你提供给它的命令包括参数,并添加命令历史浏览功能. The rlwrap program is under the GPL li

hive 执行sql客户端异常

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.metastore.HiveMetaStoreClient 未启动hive元数据仓库 : hive --service metastore hive 执行sql客户端异常

[数据库]简单SQL语句总结

1.在查询结果中显示列名:a.用as关键字:select name as '姓名'   from students order by ageb.直接表示:select name '姓名'   from students order by age 2.精确查找:a.用in限定范围:select * from students where native in ('湖南', '四川') b.between...and:select * from students where age between 2

mybatis简单sql使用java注解而不是xml配置

一直没有系统的接触mybatis,这就导致对其构建模式并没有清晰的认知,所以项目中所有的查询语句都使用在xml中配置,无论是简单sql,还是复杂sql,无一例外的没有使用java注解,这一点,现在看来,真是后悔莫及!那么请你牢记这点原则吧:mybatis简单sql使用java注解而不是xml配置! 再次使用mybatis,觉得有必要重新认识一下它.这就好比,在你上班的路上,如果偶尔抬抬头扫一扫你的周围,也许就会瞥见不一样的风景──非常有气质的美女映入眼帘,你不得不聚精会神的把眼光的焦点全部集中于

ASP.NET简单SQL分页的实现

今天是出来实习的第32天,在学校学的像是囫囵吞枣一样,什么都是马马虎虎的,而分页这样的需要逻辑的像我这样的懒人喜欢用插件,仔细捉摸了下也不好,所以就花一点时间研究了下分页, 今天就来说说简单的SQL语句分页在ASP.NET的实现 SQL语句怎么写? 因为要写的是简单SQL语句实现分页所以SQL自然就不会很难啦! 1.IN NOT IN写法 效率低 --IN 和 NOT IN,效率较低 --这条语句的意思是查询五条数据不在前十条里的数据 SELECT TOP 5 * FROM TableName

十六、mysql 分区之 简单sql优化1

1.使用 show session status like '%Com_%'; 可以查看当前连接的各个sql的执行频率 show global status like '%Com_%'; 可以查看从上次mysql服务器启动到目前为止sql的执行频率 2.explain select * from tmp; mysql> explain select * from zi_emp where tid = 1000\G *************************** 1. row ******

十六、mysql 分区之 简单sql优化2

1.索引的分类 B-Tree 基本支持 HASH 只有memory支持 R-Tree myisam支持 Full-text myisam支持(全文索引) 2.Memory引擎下只有“=”条件才会使用索引 =============================== 导入数据的优化 ======================== 3.如何提高myisam的导入效率 alter table emp disable keys;关闭索引 load data infile 'aa.sql' into