首页 > 数据库 >hive02_SQL操作

hive02_SQL操作

时间:2024-07-26 19:17:39浏览次数:6  
标签:comment TERMINATED 内表 xxx hive SQL 操作 hive02 addr

Hive DDL 操作

操作前需要保证 hive 成功启动:

# 启动 HiveServer2
hive --service hiveserver2 &
# 启动 MetaStore
hive --service metastore &

# 进入 hive 命令行界面
beeline -u jdbc:hive2://node03:10000 -n root

数据库操作

操作类似于 MySQL 数据库操作。

表基本操作

hive 中表数据涉及两部分,一部分是存储在 HDFS 上的真实数据;一部分是存储在 MetaStore 中的元数据(包含表结构、权限、属性等信息)。
hive 包括内表和外表,其中内表主要使用的表形式,外表一般作为数据导入时的临时表使用。内表对 HDFS 上的数据有所有权,而外表对 HDFS 上存储的数据没有所有权,仅有读权限。

为什么需要外表?

  • 一般结构化数据到达 Hadoop 平台时,可能存在编码、换行符、脏数据的问题,不能直接导入到 Hive 中存储为内表。于是再数据接入之前先创建外表,指定表的元数据信息(create table t1(col1 type, col2 type ..)),因为有读的权限,可以从外表中查询数据,以确保元数据信息是否正确,编码是否合理。
  • 确保数据合理性前提下,再创建内表,将外表数据查询出来,导入到内表中。

外表创建语法:

CREATE EXTERNAL TABLE <table_name> 
    (<col_name> <data_type> [, <col_name> <data_type> ...])
    ROW FORMAT DELIMITED
    FIELDS TERMINATED BY 'xxx'
    COLLECTION ITEMS TERMINATED BY 'xxx'
    MAP KEYS TERMINATED BY 'xxx'
    LINES TERMINATED BY 'xxx'
    LOCATION '<file_path>';
  • ROW FORMAT DELIMITED:标志开始设置分隔符;
  • FIELDS TERMINATED BY 'xxx':数据的字段通过 'xxx' 分割开;
  • COLLECTION ITEMS TERMINATED BY 'xxx':复杂类型数据通过 'xxx' 分割;
  • MAP KEYS TERMINATED BY 'xxx':复杂元素 MAP 通过 xxx 分割;
  • LINES TERMINATED BY 'xxx':定义行分隔符;
  • LOCATION '<file_path>':指定数据在 HDFS 上的存储路径;

数据创建及导入示例:
源数据:

1,tom,18,music-game-driver,std_addr
2,jolin,21,music-movie,std_addr:beijing-work_addr:shanghai-addr:tokyo
3,tony,33,book-game-food,std_addr:beijing-work_addr:xian
4,lilei,12,scl_addr:xizhimen-home_addr:null
5,hanmeimei,12,scl_addr:xizhimen
6,baby,3,food,addr:tianjing

hadoop 上传源数据文件到 HDFS:

hadoop fs -mkdir -p /tmp/hive_data/psn
hadoop fs -put psn.txt /tmp/hive_data/psn/

创建 hive 外表:

use default;
CREATE EXTERNAL TABLE ext_psn(
    id INT comment 'ID',
    name STRING comment '姓名',
    age INT comment '年龄',
    likes ARRAY<STRING> comment '爱好',
    address MAP<STRING,STRING> comment '地址'
)comment '人员信息表'
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ',' 
COLLECTION ITEMS TERMINATED BY '-'
MAP KEYS TERMINATED BY ':' 
LINES TERMINATED BY '\n'
LOCATION '/tmp/hive_data/psn/';

img
创建 hive 内表:

CREATE TABLE inner_psn(
    id INT comment 'ID',
    name STRING comment '姓名',
    age INT comment '年龄',
    likes ARRAY<STRING> comment '爱好',
    address MAP<STRING<STRING> comment '地址'
) comment '人员信息表';
  • 内表的数据默认存放到 /user/hive/warehouse/${db_name}.db/${table_name} 目录下,若使用 default 数据库,默认存放到 /user/hive/warehouse/${table_name}
  • 内表创建时也可以指定 LOCATION 数据存放的位置,用于数据的读取;不同的是外表 LOCATION 是必须定义的选项,内表 LOCATION 用于更改数据文件的默认存放位置。

复制外表创建内表
如果外表创建之后均没有问题,创建内表时可以直接复制外表内容。

  • 只复制元数据表,不复制数据:CREATE TABLE <table_name> LIKE <existing_table_or_view_name>
  • 通过查询创建内表都复制:CREATE TABLE <table_name> AS SELECT <select_statement>;

切换外表为内表
ALTER TABLE <table_name> SET tblproperties('EXTERNAL' = 'FALSE')

清空表数据
TRUNCATE TABLE <table_name>

标签:comment,TERMINATED,内表,xxx,hive,SQL,操作,hive02,addr
From: https://www.cnblogs.com/istitches/p/18326072

相关文章

  • MySQL数据结构和索引
    一、MySQL数据结构InnoDB引擎MySQL默认引擎是InnoDB引擎,这个引擎的主要特点是支持事务和行锁,数据结构2.1二叉树(二叉查找树)二叉树是一种特殊的树,二叉树中每个节点的度都不能大于2,就是说每个节点最多只能有左右两个子节点当我们像二叉查找树储存数据的时候,是安装从大到小(或......
  • 顺序表的实现和操作
    目录一.前言二.顺序表的优缺点三.顺序表的定义和初始化四.顺序表的相关操作一.前言    首先介绍下线性表的定义,线性表是具有相同特性的数据元素的一个有限序列。而我们的顺序表就是线性表的一种,是线性表的顺序存储结构。所谓顺序存储就是把逻辑上相邻的数据......
  • 单链表的实现和操作
    目录一.前言二.单链表的定义和结构三.单链表的操作一.前言    线性表的链式表示又称为非顺序映像或链式映像。简而言之,链表可以理解为由指针链连接的n个结点组成的。其中每一个结点包括数据域和指针域。值得注意的是,与顺序表不同,链表中的逻辑次序与物理次序不......
  • MySQL第一阶段:多表查询、事务
            继续我的MySQL之旅,继续上篇的DDL、DML、DQL、以及一些约束,该到了多表查询和事务的学习总结,以及相关的案例实现,为未来的复习以及深入的理解做好知识储备。目录多表查询连接查询内连接外连接子查询事务 事务简介事务操作事务四大特征多表查询多......
  • es6中对数组的常用操作方法-普通数组
    参考https://www.jianshu.com/p/856f4200d3c0最近,经常操作数组,可是数组中的一些常用操作方法很迷糊,看了上面一篇文章之后,茅塞顿开。于是自己按照上面文章的用法,自己全部从头到尾写了一遍,分为普通的数组以及对象数组的操作。//定义数组constarr=[1,2,3,4,5]......
  • es6中对数组的常用操作方法-对象数组
    //定义对象数组constarrayObject=[{name:'name1',title:'title1'},{name:'name2',title:'title2'},{name:'name3',title:'title3'}];//数组对象......
  • Dbeaver离线配置postgresql驱动
    下载驱动包https://jdbc.postgresql.org/download/下载后的驱动jar包如下所示,不同版本后缀不同,不必纠结(特殊情况除外)Dbeaver离线配置PostgreSQL驱动数据库>驱动管理器>PostgreSQL把库中的目录全部删除掉后,添加文件:把刚下载的驱动文件路径配置进去测试PostgreSQL连......
  • MySQL索引、事务(数据库管理与高可用)
    一、索引的概念索引:排序的列表,对数据进行快速的查询;针对不同的产品需求,或者不同的数据库结构,会创建不同的索引;1:普通索引(默认索引)2:唯一索引(可以多个)3:主键索引(只能一个)4:组合索引(最左查询)5:全文索引oracle:B树索引将表一份为二进行查询;701--3536--701--1718--35先把......
  • 用户管理与高级SQL语句(数据库管理与高可用)
    1.表(Table)数据库中的表与我们日常生活中使用的表格类似,它也是由行(Row)和列(Column)组成的。列由同类的信息组成,每列又称为一个字段,每列的标题称为字段名。行包括了若干列信息项。一行数据称为一个或一条记录,它表达有一定意义的信息组合。一个数据库表由一条或多条记录组成,没有......
  • 【MySQL进阶之路 | 高级篇】表级锁之S锁,X锁,意向锁
    1.从数据操作的粒度划分:表级锁,页级锁,行锁为了尽可能提高数据库的并发度,每次锁定的数据范围越小越好,理论上每次只锁定当前操作的数据的方案会得到最大的并发度,但是管理锁是很耗资源的事情(涉及获取、检查、释放锁等动作)。因此数据库系统需要在高并发响应和系统性能两方面进行......