Hive基础

标识符规则:

大小写规则:

  1. hive的数据库名、表名都不区分大小写

  2. 建议关键字大写

命名规则:

  1. 名字不能使用数字开头

  2. 不能使用关键字

  3. 尽量不使用特殊符号

1、操作数据库

复制代码
--创建数据库
hive> create database yhdb01;
--先判断数据库是否存在再创建
hive> create database if not exists yhdb02;
--判断数据库并在创建数据库时添加注释
hive> create database if not exists yhdb03 comment 'this is a database of yunhe';

hive默认元数据是放在mysql数据库中的,但是mysql数据库在刚开始的时候是不支持中文的,hive的元数据的数据库名字叫hive,创建该数据库的时候使用的字符集是latin 字符,不支持中文。
不信的话,创建一个带有中文解释的数据库:
create database if not exists yhdb02 comment "大数据"

创建hive数据库之后,在你的hdfs上会多一个文件夹:

而且,在mysql的元数据库,查看数据:

查看所有数据库:

复制代码
show databases;

切换数据库:

复制代码
use yhdb;
use default;

查看数据库结构:

复制代码
语法1:desc database databaseName;
语法2:desc database extended databaseName;
语法3:describe database extended databaseName;


这三个语句的展示效果一样。

hive> describe database extended yhdb;
OK
yhdb            hdfs://bigdata01:9820/user/hive/warehouse/yhdb.db       root    USER    
Time taken: 0.067 seconds, Fetched: 1 row(s)

删除数据库:

复制代码
语法1:drop database databasename;         	  # 这个只能删除空库
语法2:drop database databasename cascade;    # 如果不是空库,则可以加cascade强制删除

2、关于表的操作

1)关于字符类型的

Hive的数据类型分为基本数据类型和复杂数据类型,下面是基本数据类型:

只需要简单的记忆几个即可:

INT ,STRING

因为varchar可以存储的字段长度有限,String可以存储高达2G的字符串长度,而且是可变长度的。

create table stu(name varchar(20));

create table stu(name string);

2)创建表

复制代码
语法1: 
    create table t_user(id int,name string);  

语法2:使用库.表的形式
    create table yhdb.t_user(id int,name string);

语法3:指定分隔规则形式
create table yhdb.t_user2(
 id int,
 name string,
 age int,
 height double
)
comment "这是一个学生表"
row format delimited 
fields terminated by '\t'
lines terminated by '\n'
stored as textfile;

查看你当前在哪个数据库下面:

复制代码
hive> select current_database();
OK
yhdb02

切换数据库:use yhdb;

查看所有表:
show tables;

查看表结构:

复制代码
desc tableName
desc extended tableName;
describe extended tableName;



hive> desc t_user2;
OK
id                      int                                         
name                    string                                      
age                     int                                         
height                  double                                      
Time taken: 0.185 seconds, Fetched: 4 row(s)

3) 修改表

复制代码
- 修改表名
alter table oldTableName rename to newTableName;
alter table stu rename to new_stu;

- 修改列名:change column    和修改字段类型是同一个语法
    alter table tableName change column oldName newName colType;
    alter table tableName change column colName colName colType;

    alter table new_stu change name name varchar(200);
    alter table new_stu change name uname varchar(200);
    

- 修改列的位置:  注意,2.x版本后,必须是相同类型进行移动位置。
    alter table tableName change column colName colName colType after colName1;   

    alter table new_stu change column uname uname varchar(200)  after city;

    
    alter table tableName change column colName colName colType first;

- 增加字段:add columns
    alter table tableName add columns (sex int,...);
 alter table new_stu add columns(city varchar(20));   

- 删除字段:replace columns  #注意,2.x版本后,注意类型的问题,替换操作,其实涉及到位置的移动问题。
    alter table tableName replace columns(
    id int,
    name int,
    size int,
    pic string
    );

    alter table new_stu replace columns(id int,uname string);
    注意:实际上是保留小括号内的字段。

4)删除表

复制代码
drop table 表的名字;

3、加载数据

1)加载本地数据:

创建一个文件夹,将来把所有的数据,都放在这个文件下:

mkdir /home/hivedata

创建一个文件

添加如下数据:

1,宝总

2,李李

3,小汪

4,爷叔

先有数据,根据数据的格式,和字段数量以及类型,创建一个表:

复制代码
create table t_user(
id int,
name string
)
row format delimited
fields terminated by ','
lines terminated by '\n'
stored as textfile;

加载本地数据:

复制代码
load data local inpath "/home/hivedata/user.txt" into table t_user;

查看数据是否加载成功:
select * from t_user limit 10;

你能够看到里面的数据,并且没有乱码,原因是stored as textfile。

2)从HDFS加载到Hive中:

复制代码
hdfs dfs -put /home/hivedata/user.txt /home

将hdfs的数据导入到t_user 表中:

复制代码
load data inpath '/home/user.txt' into table t_user;

就比之前少了一个 local 关键字。

查看hdfs上的user.txt 发现不见了,去哪里了,被移动走了!

查看数据,发现有两份,想覆盖怎么办?

复制代码
load data local inpath '/home/hivedata/user.txt' overwrite into table t_user;

3)将数据直接放入表对应的文件夹下

既然hive中的数据是在hdfs上的,我们也可以手动的上传数据,能上传至/home,为何不能上传至:/user/hive/warehouse/yhdb.db/t_user

复制代码
[root@bigdata01 hivedata]# cp user.txt user2.txt 
[root@bigdata01 hivedata]# hdfs dfs -put /home/hivedata/user2.txt /user/hive/warehouse/yhdb.db/t_user

hive中的数据,不要load 也可以被正常使用。

4)从其他表中加载数据

复制代码
语法格式:


insert into table tableName2 select [.....] from tableName1;

扩展内容:向多张表中插入数据的语法
    from tableName1
    insert into tableName2 select * where 条件
    insert into tableName3 select * where 条件

5) 克隆表数据

复制代码
- create table if not exists tableName2 as select [....] from tableName1;
- create table if not exists tableName2 like tableName1 location 'tableName1的存储目录的路径'     # 新表不会产生自己的表目录,因为用的是别的表的路径
​
扩展内容:只复制表结构
create table if not exists tableName2 like tableName1;

实战:
create table t_user6 as select * from t_user2;
create table t_user7 like t_user2 location '/user/hive/warehouse/yhdb.db/t_user2';
相关推荐
说私域6 小时前
基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心
大数据·人工智能·小程序·开源
TDD_06286 小时前
【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
linux·运维·经验分享·centos
x66ccff6 小时前
vLLM 启动 GGUF 模型踩坑记:从报错到 100% GPU 占用的原因解析
linux
V_HY147627 小时前
AI碰一碰发视频获客工具,系统开发逻辑详细解析
大数据·人工智能·新媒体运营·流量运营
遇码7 小时前
单机快速部署开源、免费的分布式任务调度系统——DolphinScheduler
大数据·运维·分布式·开源·定时任务·dolphin·scheduler
William.csj7 小时前
Linux——开发板显示器显示不出来,vscode远程登录不进去,内存满了的解决办法
linux·vscode
KeithTsui8 小时前
GCC RISCV 后端 -- 控制流(Control Flow)的一些理解
linux·c语言·开发语言·c++·算法
森叶8 小时前
linux如何与windows进行共享文件夹开发,不用来回用git进行拉来拉去,这个对于swoole开发者来说特别重要
linux·git·swoole
一个天蝎座 白勺 程序猿8 小时前
大数据(4.2)Hive核心操作实战指南:表创建、数据加载与分区/分桶设计深度解析
大数据·hive·hadoop
liulilittle8 小时前
Linux 高级路由策略控制配置:两个不同路由子网间通信
linux·网络·智能路由器