Hive之表操作
本文最后更新于:2 年前
创建表
通过 create table
创建表,建表语句遵循SQL语法:
1 |
|
以上命令中,可以通过数据库名.表名
的方式来指定表所在的数据库。
用户可以增加可选项 if not exists
,即使表已经存在,也会忽略后面的执行语句而不会有异常信息。这种方式一般常用与第一个执行时需要创建表的脚本中。后面的 row format delimited fields terminated by '字段分隔符'
是可选的,用于指定数据文件中字段的分隔符的。
用户可以拷贝一张已经存在的表:
1 |
|
只会复制表的结构,不会拷贝数据。
查看表
查看正在使用的数据库中的所有表:
1 |
|
即使用户不位于目标数据库下,也可以通过 in
来查看指定数据库下的表:
1 |
|
可以通过desc查看表的结构信息:
1 |
|
内部表(管理表)与 外部表
之前创建的表都是内部表:即先在 hive 中创建一个表,然后向这个表中插入数据(insert、外部文件导入),这样的表称之为内部表。
对于内部表,Hive 控制数据的生命周期,Hive 默认情况下会将这些数据存在HDFS的 /hive/warehouse
目录下,当我们删除一个内部表时,Hive 也会删除表中数据。
假设 HDFS 上已经有数据了,此时我们通过 hive 创建一张表来管理这个文件数据,此时,这个表被称为外部表。
在 Linux 本地创建一个 txt 文件:
1 |
|
将此文件上传到 HDFS 的 /hivetest 目录下:
1 |
|
创建外部表:
1 |
|
对于外部表,Hive并不完全拥有这份数据,因此,如果在Hive中删除了对应的外部表,并不会删除数据,不过表的元数据信息会被删除掉。
内部表和外部表的区别:
建表命令
内部表:
create table ...
外部表:
create external table ... location '文件所在的路径'
删除表
对于内部表,删除时会把表的元数据和数据一并删除;
对于外部表,删除时会删除元数据,但是不删除源数据。
修改表
重命名
1 |
|
为表新增字段
1 |
|
更改字段
更改字段名、数据类型、位置
1 |
|
以上语句作用为:将 student 表的 age 字段改为 hobby ,类型改为string。
可以通过 after 字段名 将当前字段移动到指定字段后面。注意,移动完之后,数据是不会移动的,一般是用在空表或者表中的数据要刷新:
1 |
|
删除/替换字段
1 |
|
replace 会将原来表的列都删除掉,然后添加新的列。上面的语句代表的是:将 id、name、hobby 都删除,然后添加 hobby 字段。
删除/清空表
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!