当前位置: 首页 > article >正文

【Hive】HQL

目录

DDL

1.数据库

1.1 创建数据库

1.2 查询数据库

1.3 修改数据库

1.4 删除数据库

1.5 切换当前数据库

2. 表

 2.1 创建

2.2 查看表

2.3 修改表

2.4删除

2.5 清空

2. DML

2.1 Load

2.2 Insert

2.3 Export&Import


DDL

1.数据库

1.1 创建数据库

CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
    [COMMENT database_comment]
    [LOCATION hdfs_path]
    [WITH DBPROPERTIES (property_name=property_value, ...)];

DATABASE|SCHEMA:用于限定创建数据库或数据库模式
IF NOT EXISTS:目标对象不存在时才执行创建操作(可选)
COMMENT:起注释说明作用
LOCATION:指定路径,默认路径${hive.metastore.warehouse.dir}/database_name.db
WITH DBPROPERTIES:为数据库提供描述信息,如创建database的用户或时间

1.2 查询数据库

1.2.1 显示所有数据库

SHOW DATABASES [LIKE '通配表达式'];
*任意个任意字符  |或的关系

1.2.2 查看数据库信息

DESCRIBE DATABASE [EXTENDED] db_name;
EXTENDED 为查看更多信息 WITH DBPROPERTIES

1.3 修改数据库

用户可以使用alter database命令修改数据库某些信息,其中能够修改的信息包括dbproperties、location、owner user。需要注意的是:修改数据库location,不会改变当前已有表的路径信息,而只是改变后续创建的新表的默认的父目录。

--修改dbproperties
ALTER DATABASE database_name SET DBPROPERTIES (property_name=property_value, ...);

--修改location
ALTER DATABASE database_name SET LOCATION hdfs_path;

--修改owner user
ALTER DATABASE database_name SET OWNER USER user_name;

1.4 删除数据库

DROP DATABASE [IF EXISTS] database_name [RESTRICT|CASCADE];
RESTRICT:严格模式,若数据库不为空,则会删除失败,默认为该模式。
CASCADE:级联模式,若数据库不为空,则会将库中的表一并删除。

1.5 切换当前数据库

USE database_name;

2. 表

 2.1 创建

2.1.1 普通创建

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] 
[db_name.]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] 
[STORED AS file_format]
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
  • TEMPORARY 临时表,该表只在当前会话可见,会话结束,表会被删除。
  • EXTERNAL   外部表,与之相对应的是内部表(管理表)。管理表意味着Hive会完全接管该表,包括元数据和HDFS中的数据。而外部表则意味着Hive只接管元数据,而不完全接管HDFS中的数据。
  • data_type  基本数据类型和复杂数据类型
  • PARTITIONED BY  创建分区表
  • CLUSTERED BY ... SORTED BY...INTO ... BUCKETS  创建分桶表
  • ROW FORMAT  指定SERDE,SERDE是Serializer and Deserializer的简写。1. Hive使用SERDE序列化和反序列化每行数据。2. SERDE关键字可用于指定其他内置的SERDE或者用户自定义的SERDE。例如JSON SERDE,可用于处理JSON字符串。
ROW FORAMT DELIMITED 
[FIELDS TERMINATED BY char] 
[COLLECTION ITEMS TERMINATED BY char] 
[MAP KEYS TERMINATED BY char] 
[LINES TERMINATED BY char] 
[NULL DEFINED AS char]
  • fields terminated by :列分隔符
  • collection items terminated by : map、struct和array中每个元素之间的分隔符
  • map keys terminated by :map中的key与value的分隔符
  • lines terminated by :行分隔符

  • STORED AS 指定文件格式,常用的文件格式有,textfile(默认值),sequence file,orc file、parquet file等等。
  • LOCATION  指定表所对应的HDFS路径,若不指定路径,其默认值为

    ${hive.metastore.warehouse.dir}/db_name.db/table_name

  • TBLPROPERTIES 用于配置表的一些KV键值对参数

基本数据类型

Hive

说明

定义

tinyint

1byte有符号整数

smallint

2byte有符号整数

int

4byte有符号整数

bigint

8byte有符号整数

boolean

布尔类型,true或者false

float

单精度浮点数

double

双精度浮点数

decimal

十进制精准数字类型

decimal(16,2)

varchar

字符序列,需指定最大长度,最大长度的范围是[1,65535]

varchar(32)

string

字符串,无需指定最大长度

timestamp

时间类型

binary

二进制数据

复杂数据类型

类型

说明

定义

取值

array

数组是一组相同类型的值的集合

array<string>

arr[0]

map

map是一组相同类型的键-值对集合

map<string, int>

map['key']

struct

结构体由多个属性组成,每个属性都有自己的属性名和数据类型

struct<id:int, name:string>

struct.id

类型转换

1. 隐式转换

LanguageManual Types - Apache Hive - Apache Software Foundation

a. 任何整数类型都可以隐式地转换为一个范围更广的类型,如tinyint可以转换成int,int可以转换成bigint。

b. 所有整数类型、float和string类型都可以隐式地转换成double。

c. tinyint、smallint、int都可以转换为float。

d. boolean类型不可以转换为任何其它的类型。

2. 显示转换

cast(expr as <type>)
cast('1' as int) + 2

2.1.2 Create Table As Select(CTAS)建表

该语法允许用户利用select查询语句返回的结果,直接建表,表的结构和查询语句的结构保持一致,且保证包含select查询语句放回的内容。

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name 
[COMMENT table_comment] 
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]

2.1.3 Create Table Like语法

允许用户复刻一张已经存在的表结构,与上述的CTAS语法不同,该语法创建出来的表中不包含数据。

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name
[LIKE exist_table_name]
[ROW FORMAT row_format] 
[STORED AS file_format] 
[LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]

案例:

JSON

{
    "name": "dasongsong",
    "friends": [
        "bingbing",
        "lili"
    ],
    "students": {
        "xiaohaihai": 18,
        "xiaoyangyang": 16
    },
    "address": {
        "street": "hui long guan",
        "city": "beijing",
        "postal_code": 10010
    }
}

确保文件中每行数据都是一个完整的JSON字符串,JSON SERDE才能正确的处理。 

hive>
create table teacher
(
    name     string,
    friends  array<string>,
    students map<string,int>,
    address  struct<city:string,street:string,postal_code:int>
)
row format serde 'org.apache.hadoop.hive.serde2.JsonSerDe'
location '/user/hive/warehouse/teacher';

2.2 查看表

2.2.1 展示所有表

SHOW TABLES [IN database_name] LIKE ['identifier_with_wildcards'];

2.2.2 查看表信息

DESCRIBE [EXTENDED | FORMATTED] [db_name.]table_name;
    EXTENDED:展示详细信息
	FORMATTED:对详细信息进行格式化的展示
desc stu;

2.3 修改表

2.3.1 重命名表名

ALTER TABLE table_name RENAME TO new_table_name;

2.3.2 修改列信息

2.3.2.1 添加列

新增列只能在末尾

ALTER TABLE table_name ADD COLUMNS (col_name data_type [COMMENT col_comment], ...);

2.3.2.2 更新列

允许用户修改指定列的列名、数据类型、注释信息以及在表中的位置。

ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name];

2.3.2.3 替换列

允许用户用新的列集替换表中原有的全部列。。

ALTER TABLE table_name REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...);

2.4删除

DROP TABLE [IF EXISTS] table_name;

2.5 清空

TRUNCATE [TABLE] table_name;

2. DML

2.1 Load

将文件导入到Hive表中。

LOAD DATA [LOCAL] INPATH 'filepath' 
[OVERWRITE] INTO TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)];

(1)local:表示从本地加载数据到Hive表;否则从HDFS加载数据到Hive表。

(2)overwrite:表示覆盖表中已有数据,否则表示追加。

(3)partition:表示上传到指定分区,若目标是分区表,需指定分区。

2.2 Insert

2.2.1 将查询结果插入表中.

INSERT (INTO | OVERWRITE) TABLE tablename 
[PARTITION (partcol1=val1, partcol2=val2 ...)] 
select_statement;

(1)INTO:将结果追加到目标表

(2)OVERWRITE:用结果覆盖原有数据

2.2.2 将给定Values插入表中

INSERT (INTO | OVERWRITE) TABLE tablename 
[PARTITION (partcol1[=val1], partcol2[=val2] ...)]
VALUES values_row [, values_row ...]
insert into table  student1 values(1,'wangwu'),(2,'zhaoliu');

2.2.3 将查询结果写入目标路径

INSERT OVERWRITE [LOCAL] DIRECTORY directory
[ROW FORMAT row_format] 
[STORED AS file_format] select_statement;

2.3 Export&Import

Export导出语句可将表的数据和元数据信息一并到处的HDFS路径,Import可将Export导出的内容导入Hive,表的数据和元数据信息都会恢复。Export和Import可用于两个Hive实例之间的数据迁移。

--导出
EXPORT TABLE tablename TO 'export_target_path'

--导入
IMPORT [EXTERNAL] TABLE new_or_original_tablename FROM 'source_path' [LOCATION 'import_target_path']

来源:

尚硅谷

(32条消息) Hive表DDL操作(一)_hive表ddl操作(一)_峰芒毕露438的博客-CSDN博客


http://www.kler.cn/a/2221.html

相关文章:

  • C++中的std::tuple和std::pair
  • 蓝桥杯c++算法学习【2】之搜索与查找(九宫格、穿越雷区、迷宫与陷阱、扫地机器人:::非常典型的必刷例题!!!)
  • Python高级编程模式和设计模式
  • C++中string的新特性
  • 详解基于C#开发Windows API的SendMessage方法的鼠标键盘消息发送
  • 假期增设:福祉与负担并存,寻求生活经济平衡之道
  • 【2023新星计划 】博客创作指导 活动解读
  • ChatGPT应用场景与工具推荐
  • GPT-4是个编程高手,真服了!
  • MyBatis --- 缓存、逆向工程、分页插件
  • 【K8S系列】深入解析Pod对象(一)
  • MySQL-触发器
  • 继承和派生
  • vue后台管理系统
  • 网络安全工具大合集
  • C语言学习之路--结构体篇
  • [JS] JS小技巧
  • Python3,5行代码,生成自动排序动图,这操作不比Excel香?
  • Three.js——learn01
  • 什么是语法糖?Java中有哪些语法糖?
  • FPGA基于RIFFA实现PCIE采集HDMI传输,提供工程源码和QT上位机
  • C语言学习之路--指针篇
  • Linux文本三剑客(grep、sed、awk)
  • 雅克比矩阵学习笔记
  • 算法基础---基础算法
  • Learning C++ No.18【STL No.8】