Hive 简单SQL

简介: 1.创建表(1)内部表和外部表的区别默认创建的是内部表,可以指定目录,如果不指定则会创建默认目录,一旦drop,该目录和数据都会被删除创建external table 的时候需要指定存放目录,并且drop表的时候,不会删除该目录和目录下的数据,只会删除元信息#创建一个外部表0: jdbc:hive2://192.

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";


[root@Darren2 tmp]# hdfs dfs -put file1 /dir1

[root@Darren2 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)


[root@Darren2 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格式存储的文件无法直接查看其内容

[root@Darren2 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中的表

[root@Darren2 tmp]# cat /tmp/file2

5,eee


[root@Darren2 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;

[root@Darren2 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

[root@Darren2 tmp]# hdfs dfs -get /user/hive/warehouse/tmp/000000_0 /tmp/


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

[root@Darren2 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;

[root@Darren2 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  |

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


目录
相关文章
|
4月前
|
SQL HIVE
Hive sql 执行原理
Hive sql 执行原理
42 0
|
4月前
|
SQL 分布式计算 数据挖掘
Hive SQL初级练习(30题)
Hive SQL初级练习(30题)
|
4月前
|
SQL 存储 大数据
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
【大数据技术Hadoop+Spark】Hive基础SQL语法DDL、DML、DQL讲解及演示(附SQL语句)
74 0
|
4月前
|
SQL 分布式计算 数据库
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
【大数据技术Spark】Spark SQL操作Dataframe、读写MySQL、Hive数据库实战(附源码)
85 0
|
6月前
|
SQL 存储 大数据
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
黑马程序员-大数据入门到实战-分布式SQL计算 Hive 语法与概念
74 0
|
28天前
|
SQL 数据可视化 Apache
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
阿里云数据库 SelectDB 内核 Doris 的 SQL 方言转换工具, Doris SQL Convertor 致力于提供高效、稳定的 SQL 迁移解决方案,满足用户多样化的业务需求。兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移。
阿里云数据库内核 Apache Doris 兼容 Presto、Trino、ClickHouse、Hive 等近十种 SQL 方言,助力业务平滑迁移
|
4月前
|
SQL 分布式计算 Hadoop
Hive SQL 优化
Hive SQL 优化
48 1
|
4月前
|
SQL 存储 关系型数据库
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
Presto【实践 01】Presto查询性能优化(数据存储+SQL优化+无缝替换Hive表+注意事项)及9个实践问题分享
88 0
|
5月前
|
SQL Java 关系型数据库
hive中 sql执行过程
hive中 sql执行过程
67 0
|
5月前
|
SQL JSON 分布式计算
常用的hive sql
常用的hive sql
44 0