3、Hive数据仓库——建表语句

article/2025/10/1 4:50:51

文章目录

  • Hive基本操作
    • Hive查看SQL解析计划
    • Hive建表
      • 建表1:全部使用默认建表方式
    • Hive 内部表 (Managed tables)
      • 指定location (这种方式也比较常用)
        • formatted 查看该表的结构化数据,但并不列出表中的数据
        • 将本地数据上传到HDfS上
    • Hive 外部表 (External tables)
      • 指定location (这种方式也比较常用)
        • 将本地数据上传到HDfS上
    • Hive 内部表(Managed tables)与 外部表(External tables)的区别
      • 建表3:指定存储格式
      • 建表4:create table xxxx as select_statement(SQL语句) (这种方式比较常用)
      • 建表5:create table xxxx like table_name 只想建表,不需要加载数据

Hive基本操作

Hive查看SQL解析计划

  我们都知道,hive在执行的时候会把所对应的SQL语句都会转换成MapReduce代码执行,但是具体的MR执行信息我们怎样才能看出来呢?这里就用到了explain关键字,他可详细的表示出在执行对应语句所对应的MR代码。语法格式如下;extended关键字可以更加详细的列举出代码的执行过程。

EXPLAIN [EXTENDED|DEPENDENCY|AUTHORIZATION] query

  explain会把查询语句转化成stage组成的序列,主要由三方面组成:

  1. 查询的抽象语法树
  2. plane中各个stage的依赖情况
  3. 每个阶段的具体描述:描述具体来说就是显示出对应的操作算子和与之操作的对应的数据,例如查询select算子,filter算子,fetch算子等等。

  下面来看一个具体的例子:

explain select * from students limit 10;
explain extended select * from students limit 10;
// extended 可选,可以打印更多细节
explain  select  a.id,a.name,a.clazz,t1.sum_score
from(select  id,sum(score) as sum_scorefrom score group by id
)t1 right join (select  id,name,'文科一班' as clazzfrom studentswhere clazz = '文科一班'
) a
on t1.id = a.id
order by t1.sum_score desc
limit 10;

Hive建表

  格式:

CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name// 定义字段名,字段类型[(col_name data_type [COMMENT col_comment], ...)]// 给表加上注解[COMMENT table_comment]// 分区[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]// 分桶[CLUSTERED BY (col_name, col_name, ...) // 设置排序字段 升序、降序[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS][// 指定设置行、列分隔符 [ROW FORMAT row_format] // 指定Hive储存格式:textFile、rcFile、SequenceFile 默认为:textFile[STORED AS file_format]| STORED BY 'storage.handler.class.name' [ WITH SERDEPROPERTIES (...) ]  (Note:  only available starting with 0.6.0)]// 指定储存位置[LOCATION hdfs_path]// 跟外部表配合使用,比如:映射HBase表,然后可以使用HQL对hbase数据进行查询,当然速度比较慢[TBLPROPERTIES (property_name=property_value, ...)]  (Note:  only available starting with 0.6.0)[AS select_statement]  (Note: this feature is only available starting with 0.5.0.)

建表1:全部使用默认建表方式

// 必选,指定列分隔符
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
create table students1
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

Hive 内部表 (Managed tables)

指定location (这种方式也比较常用)

LOCATION '/input2'

  指定Hive表的数据的存储位置,一般在数据已经上传到HDFS,想要直接使用,会指定Location,通常Locaion会跟外部表一起使用,内部表一般使用默认的location

create table students_internal
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input2';

formatted 查看该表的结构化数据,但并不列出表中的数据

desc formatted students_internal;

将本地数据上传到HDfS上

dfs -put /usr/local/soft/data/students.txt /input2/;
select * from students_internal limit 10;

有数据了

Hive 外部表 (External tables)

指定location (这种方式也比较常用)

create external table students_external
(id bigint,name string,age int,gender string,clazz string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/input3';

将本地数据上传到HDfS上

dfs -put /usr/local/soft/data/students.txt /input3/;
select * from students_external limit 10;

有数据了

Hive 内部表(Managed tables)与 外部表(External tables)的区别

//查看所有表
show tables;//删除内部表students_internal
drop table students_internal;
show tables;//删除外部表students_external
drop table students_external;
show tables;

  当我们删除内部表的时候,将hdfs://master:9000/input2移动到回收站,目录、表、数据一起被删除。

  当我们删除外部表的时候目录、表、数据并没有被删除。

可以看出,删除内部表的时候,表中的数据(HDFS上的文件)会被同表的元数据一起删除

删除外部表的时候,只会删除表的元数据,不会删除表中的数据(HDFS上的文件)

一般在公司中,使用外部表多一点,因为数据可以需要被多个程序使用,避免误删,通常外部表会结合location一起使用

外部表还可以将其他数据源中的数据 映射到 hive中,比如说:hbase,ElasticSearch…

设计外部表的初衷就是让表的元数据与数据解耦


建表3:指定存储格式

stored as rcfile;

  指定储存格式为rcfile,inputFormat:RCFileInputFormat,outputFormat:RCFileOutputFormat,如果不指定,默认为textfile,注意:除textfile以外,其他的存储格式的数据都不能直接加载,需要使用从表加载的方式。

create table students2
(id bigint,name string,age int,gender string,clazz string
)
row format delimited fields terminated by ','
stored as rcfile;

建表4:create table xxxx as select_statement(SQL语句) (这种方式比较常用)

//给students1表上传数据
dfs -put /usr/local/soft/data/students.txt /user/hive/warehouse/stu_student.db/students1/;
create table students4 as select * from students1;
select * from students4 limit 10;

建表5:create table xxxx like table_name 只想建表,不需要加载数据

create table students5 like students1;
select * from students5 limit 10;

到底啦!关注靓仔学习更多的大数据知识。( •̀ ω •́ )✧


http://chatgpt.dhexx.cn/article/X9va9fhy.shtml

相关文章

HIVE的三种建表方式

目录 一、直接建表二、as (直接使用查询结果插入到一张新表)三、like(复制表结构) 一、直接建表 中括号里面的均为可选项 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name[(col_name data_type [COMMENT col_comment], ...…

Hive学习3:Hive三种建表语句详解

注:hive其他语法在hive官网有说明,建议初学者,去官网学习一手的资料, 官网:https://cwiki.apache.org/confluence/display/Hive/Home#Home-UserDocumentation Create Table 官网说明 Hive建表方式共有三种&#xff…

Hive_ Hive 建表语句详解

参考文章: https://blog.csdn.net/qq_36743482/article/details/78383964 最近博主在编写一个每天定时创建Hive 分区的脚本,其中需要创建Hive表, 开始的时候我以为创建Hive 表的语句顺序是比较宽松的,经过测试发现不然&#xf…

Hive建表语句详解--CREATE TABLE

创建表的三种方法 Hive创建表的方式(默认路径/user/hive/warehouse,也可以location指定,主要针对external表) 1、使用create命令创建一个新表,带分区 CREATE TABLE mydb.dept( dept_no int, addr string, tel string) par…

【Hive】Hive 创建表

学习笔记—Hive创建表 1. Hive语句的特点 HQL 语言大小写不敏感,但内容分大小写(where ,if/ case when,如:数据表内容某人名叫Tom,则条件后不能写tom,HDFS 路径名(NameNode)分大小写…

hive建表语句

目录 一、建表语句1、创建内部表2、创建外部表3、建表高阶语句 CTAS 和 WITH4、向临时表中插入原表中的数据5、创建分区表 一、建表语句 1、创建内部表 建表: CREATE TABLE phone_info(id int,name String,storage String,price double) ROW FORMAT DELIMITED //…

c语言void* arg,void * arg什么意思

许多初学者对C/C++语言中的void及void指针类型不甚理解,因此在使用上出现了一些错误。本文将对void关键字的深刻含义进行解说,并详述void及void指针类型的使用方法与技巧。 2.void的含义 void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据…

什么是arguments

什么是arguments 形参:函数定义的参数实参:函数调用时实际传递的参数。参数匹配是从左向右进行匹配。如果实参个数少于形参,后面的参数对应赋值undefined。实参的个数如果多于形参的个数,可以通过arguments访问。【案例】模拟封装…

python函数参数*arg和**args的用法

import numpy as np """ 做饭函数,表示午饭有什么,foods表示一个元组 """ def make_meals(*foods):for item in foods:print(今天午饭有,item)def dictionary(**dic):for key,value in dic.items():print(英文名(key) , key , &…

什么是:arguments

在调用函数时,浏览器每次都会传递进两个隐含的参数: 1.函数的上下文对象this 2.封装实参的对象arguments 什么是:arguments 1.arguments是一个类数组对象,它也可以通过索引来操作数据,也可以获取长度 在调用函数时,我们所传递的实…

python中的arg,*args,args,**kwargs,kwargs的关系和区别

arg就是指一个参数 def func(arg):print(arg)func(2) *args 是用来将参数打包成元组给函数调用的,args即是传给函数的参数所构成的元组 def func(arg, *args):print(arg, *args)func(1, 2, 3, 4, 5, 6, 7)**kwargs是用来将关键字参数打包成字典给函数调用的&#…

Python *arg与**kwarg区别

*arg 与 **kwargs介绍 args 是 arguments 的缩写,表示位置参数;kwargs 是 keyword arguments 的缩写,表示关键字参数。这其实就是 Python 中可变参数的两种形式,并且*args 必须放在 **kwargs的前面,因为位置参数在关键…

argc,argv是什么

来源:微信公众号「编程学习基地」 文章目录 argc,argv是什么如何解析程序参数“选项”是什么?"选项字符串"是什么解析参数 argc,argv是什么 如果你是一个 Linux 开发者,那么你一定需要给应用程序传递参数。…

数学符号arg的含义

argument of the maximum/minimum arg max f(x): 当f(x)取最大值时,x的取值 arg min f(x):当f(x)取最小值时,x的取值 表示使目标函数取最小值时的变量值 From Wikipedia In mathematics, arg max (or argmax) stands for the argument of…

arg和*argv[]是什么?

我们知道main函数的标准原型应该是int main(int argc, char *argv[]);。argc是命令行参数的个数,argv是一个指向指针的指针。那为什么要写成char *argv[]而不写成char argv呢?这样写给表示argv不是指向单个指针,而是指向一个指针数组的首元素…

数学符号arg含义

argument of the maximum/minimum arg max f(x): 当f(x)取最大值时,x的取值 arg min f(x):当f(x)取最小值时,x的取值 表示使目标函数取最小值时的变量值 From Wikipedia In mathematics, arg max (or argmax) stands for the argument of…

MLT解读

简介 在很多方法都在检测上做文章的时候,能看到MLT这样一篇在Public赛道做研究并取得相当好的效果的文章是很难得的,就像论文的标题一样,它直面了MOT目前针对二维图像的一个痛点,那就是遮挡问题尤其是密集人群场景下的遮挡问题。…

什么是TLB ?

TLB:Translation Lookaside Buffer. 根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。里面存放的是一些页表文件(虚拟地址到物理地址的转换表)。当处理 器要在主内存寻址时,不是直接在内存…

G i t

Git 1、Git 概述1.1、版本控制工具 2、Git 常用命令★★★★2.1、设置用户签名★★★★2.2、初始化本地库★★★★2.3、查看本地库状态$ git status2.4、添加暂存区$ git add 文件名2.5、提交本地库2.6、修改文件$ vim 文件名2.7、历史版本 3、Git 分支操作3.1、分支的操作&am…

Megatron-LM GPT2

内容 使用原始 Megatron-LM 训练 GPT-2 训练数据设置运行未修改的 Megatron-LM GPT2 模型启用 DeepSpeed 参数解析初始化和训练 初始化使用训练 API 前向传播反向传播更新模型参数损失缩放检查点保存和加载DeepSpeed 激活检查点(可选)训练脚本使用 GPT-…