Hive中SQL基本操作

简介: Hive中SQL基本操作

文章目录

1. Hive 中DDL

结构化语言查询对于所有数据库语法都大同小异的。

1) 数据库操作

# 查询数据库

show databases;

# 切换数据库

USE database_name;

USE DEFAULT;

# 创建数据库

CREATE [REMOTE] (DATABASE|SCHEMA) [IF NOT EXISTS] database_name

 [COMMENT database_comment]

 [LOCATION hdfs_path]

 [MANAGEDLOCATION hdfs_path]

 [WITH DBPROPERTIES (property_name=property_value, ...)];

create DATABASE test;

# 删除数据库

DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];

drop database test;

实操

82cd77caff324e0cb725eaaea8fc706d.png

6b21a5d71c3b4d8d8afbdec223935ec1.png

2) 创建表 Create table

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name    -- (Note: TEMPORARY available in Hive 0.14.0 and later)

 [(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]

 [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]

 [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]

    ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)

    [STORED AS DIRECTORIES]

 [

  [ROW FORMAT row_format]  

  [STORED AS file_format]

    | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]  -- (Note: Available in Hive 0.6.0 and later)

 ]

 [LOCATION hdfs_path]

 [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)

 [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

 

CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name

 LIKE existing_table_or_view_name

 [LOCATION hdfs_path];

# 数据类型  

data_type

 : primitive_type

 | array_type

 | map_type

 | struct_type

 | union_type  -- (Note: Available in Hive 0.7.0 and later)

# 基本数据类型

primitive_type

 : TINYINT

 | SMALLINT

 | INT

 | BIGINT

 | BOOLEAN

 | FLOAT

 | DOUBLE

 | DOUBLE PRECISION -- (Note: Available in Hive 2.2.0 and later)

 | STRING

 | BINARY      -- (Note: Available in Hive 0.8.0 and later)

 | TIMESTAMP   -- (Note: Available in Hive 0.8.0 and later)

 | DECIMAL     -- (Note: Available in Hive 0.11.0 and later)

 | DECIMAL(precision, scale)  -- (Note: Available in Hive 0.13.0 and later)

 | DATE        -- (Note: Available in Hive 0.12.0 and later)

 | VARCHAR     -- (Note: Available in Hive 0.12.0 and later)

 | CHAR        -- (Note: Available in Hive 0.13.0 and later)

## List集合  

array_type

 : ARRAY < data_type >

# map集合

map_type

 : MAP < primitive_type, data_type >

# 结构

struct_type

 : STRUCT < col_name : data_type [COMMENT col_comment], ...>

 

union_type

  : UNIONTYPE < data_type, data_type, ... >  -- (Note: Available in Hive 0.7.0 and later)

# 行格式,分隔符

row_format

 : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]

       [MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]

       [NULL DEFINED AS char]   -- (Note: Available in Hive 0.13 and later)

 | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]

# 文件格式

file_format:

 : SEQUENCEFILE

 | TEXTFILE    -- (Default, depending on hive.default.fileformat configuration)

 | RCFILE      -- (Note: Available in Hive 0.6.0 and later)

 | ORC         -- (Note: Available in Hive 0.11.0 and later)

 | PARQUET     -- (Note: Available in Hive 0.13.0 and later)

 | AVRO        -- (Note: Available in Hive 0.14.0 and later)

 | JSONFILE    -- (Note: Available in Hive 4.0.0 and later)

 | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname

# 列约束

column_constraint_specification:

 : [ PRIMARY KEY|UNIQUE|NOT NULL|DEFAULT [default_value]|CHECK  [check_expression] ENABLE|DISABLE NOVALIDATE RELY/NORELY ]

 

default_value:

 : [ LITERAL|CURRENT_USER()|CURRENT_DATE()|CURRENT_TIMESTAMP()|NULL ]  

 

constraint_specification:

 : [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE RELY/NORELY ]

   [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE RELY/NORELY ]

   [, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE  

   [, CONSTRAINT constraint_name UNIQUE (col_name, ...) DISABLE NOVALIDATE RELY/NORELY ]

   [, CONSTRAINT constraint_name CHECK [check_expression] ENABLE|DISABLE NOVALIDATE RELY/NORELY ]

实操

  • 创建表从本地加载文件

CREATE TABLE person(

id INT,

name STRING,

age INT,

likes ARRAY<STRING>,

address MAP<STRING,STRING>

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

COLLECTION ITEMS TERMINATED BY '-'

MAP KEYS TERMINATED BY ':'

LINES TERMINATED BY '\n';

ee6dd4d626c44858951bb6329def5b9e.png

  • 准备数据文件

1,elite0,10,basketball-music-dance,adderss:xx

2,elite1,20,basketball-music-dance,adderss:xx

3,elite2,10,basketball-music-dance,adderss:xx

4,elite3,20,basketball-music-dance,adderss:xx

5,elite4,10,basketball-music-dance,adderss:xx

6,elite5,20,basketball-music-dance,adderss:xx

  • 在linux下创建文件

mkdir -p /var/bigdata/hive/

cd /var/bigdata/hive/

vi data.txt

  • 从文件加载数据到表

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

#加载本地文件到表

load data local inpath '/var/bigdata/hive/data.txt' into table person;

# 查询加载的数据

select * from person;

c0e815de2d7d4fec9ba8509fe7e76a40.png

3)内部外部表区别

内部表 外部表

创建语法 CREATE TABLE [IF NOT EXISTS] table_name CREATE EXTERNAL TABLE [IF NOT EXISTS] table_name

区别 删除表时,元数据与数据都会被删除 删除外部表只删除metastore的元数据,不删除hdfs中的表数据

4) Create Table As Select (CTAS)

cfa656875c804f3a9e68565f94bc9265.png

4)分区表 partition

单分区建表语句:

create table day_table (id int, content string) partitioned by(col string);

# 需要注意分区表的列创建的时候字段就不需要加,加上创建会报列重复

CREATE TABLE person3(

id INT,

name STRING,

likes ARRAY<STRING>,

address MAP<STRING,STRING>

)partitioned by(age int)  

ROW FORMAT DELIMITED

FIELDS TERMINATED BY ','

COLLECTION ITEMS TERMINATED BY '-'

MAP KEYS TERMINATED BY ':'

LINES TERMINATED BY '\n';

加载文件数据的时候需要指定分区

554d5ea153b144df9d347a71d3563c36.png

删除分区

ALTER TABLE table_name DROP partition_spec, partition_spec,...

##删除分区

ALTER TABLE person3 DROP partition(age=20)

效果如下

ALTER TABLE person3 DROP partition(age=20);

Dropped the partition age=20

OK

Time taken: 0.831 seconds

hive> select * from person3;;

OK

1 elite0 ["10"] {"basketball":null,"music":null,"dance":null} 10

2 elite1 ["20"] {"basketball":null,"music":null,"dance":null} 10

3 elite2 ["10"] {"basketball":null,"music":null,"dance":null} 10

4 elite3 ["20"] {"basketball":null,"music":null,"dance":null} 10

5 elite4 ["10"] {"basketball":null,"music":null,"dance":null} 10

6 elite5 ["20"] {"basketball":null,"music":null,"dance":null} 10

双分区建表语句:

create table day_hour_table (id int, content string)

partitioned by (col1 string, col string);

其他的可以参考官网进行实战。

2 .Hive中 DML

1)从文件加载数据 Loading files into tables

语法:

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

 

LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)] [INPUTFORMAT 'inputformat' SERDE 'serde'] (3.0 or later)

上边已经操作过,不在操作。

2)插入 INSERT

  • into Hive tables from queries
  • into directories from queries
  • into Hive tables from SQL

3)更新 UPDATE

UPDATE tablename SET column = value [, column = value ...] [WHERE expression]

4)删除 DELETE

DELETE FROM tablename [WHERE expression]

5)合并 MERGE

MERGE INTO <target table> AS T USING <source expression/table> AS S

ON <boolean expression1>

WHEN MATCHED [AND <boolean expression2>] THEN UPDATE SET <set clause list>

WHEN MATCHED [AND <boolean expression3>] THEN DELETE

WHEN NOT MATCHED [AND <boolean expression4>] THEN INSERT VALUES<value list>

相关文章
|
3月前
|
SQL HIVE
【Hive SQL 每日一题】环比增长率、环比增长率、复合增长率
该文介绍了环比增长率、同比增长率和复合增长率的概念及计算公式,并提供了SQL代码示例来计算商品的月度增长率。环比增长率是相邻两期数据的增长率,同比增长率是与去年同期相比的增长率,复合增长率则是连续时间段内平均增长的速率。文章还包含了一组销售数据用于演示如何运用这些增长率进行计算。
|
6天前
|
SQL 存储 分布式计算
插入Hive表数据SQL
【8月更文挑战第10天】
|
10天前
|
SQL 物联网 数据处理
"颠覆传统,Hive SQL与Flink激情碰撞!解锁流批一体数据处理新纪元,让数据决策力瞬间爆表,你准备好了吗?"
【8月更文挑战第9天】数据时代,实时性和准确性至关重要。传统上,批处理与流处理各司其职,但Apache Flink打破了这一界限,尤其Flink与Hive SQL的结合,开创了流批一体的数据处理新时代。这不仅简化了数据处理流程,还极大提升了效率和灵活性。例如,通过Flink SQL,可以轻松实现流数据与批数据的融合分析,无需在两者间切换。这种融合不仅降低了技术门槛,还为企业提供了更强大的数据支持,无论是在金融、电商还是物联网领域,都将发挥巨大作用。
30 6
|
1月前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
36 2
|
1月前
|
SQL 关系型数据库 MySQL
实时计算 Flink版产品使用问题之如何使用Flink SQL连接带有Kerberos认证的Hive
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
2月前
|
关系型数据库 MySQL 数据库
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
深入OceanBase分布式数据库:MySQL 模式下的 SQL 基本操作
|
3月前
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
|
3月前
|
SQL BI HIVE
【Hive SQL 每日一题】统计用户留存率
用户留存率是衡量产品成功的关键指标,表示用户在特定时间内持续使用产品的比例。计算公式为留存用户数除以初始用户数。例如,游戏发行后第一天有10000玩家,第七天剩5000人,第一周留存率为50%。提供的SQL代码展示了如何根据用户活动数据统计每天的留存率。需求包括计算系统上线后的每日留存率,以及从第一天开始的累计N日留存率。通过窗口函数`LAG`和`COUNT(DISTINCT user_id)`,可以有效地分析用户留存趋势。
|
3月前
|
SQL HIVE 索引
【Hive SQL 每日一题】行列转换
该文介绍了如何使用SQL进行数据的行列转换。首先展示了行转列的例子,通过创建一个学生成绩表,利用`IF`和`SUM`函数按学生ID分组,将每个学生的各科成绩转换为独立列。然后,文章讲述了列转行的需求,利用`LATERAL VIEW`和`POSEXPLODE`将已转换的表格恢复为原始行格式,通过索引匹配过滤笛卡尔积避免错误结果。此外,还提到了使用`UNION ALL`的另一种列转行方法。
|
3月前
|
SQL HIVE
【Hive SQL 每日一题】统计用户连续下单的日期区间
该SQL代码用于统计用户连续下单的日期区间。首先按`user_id`和`order_date`分组并去除重复,然后使用`row_number()`标记行号,并通过`date_sub`与行号计算潜在的连续日期。接着按用户ID和计算后的日期分组,排除连续订单数少于2的情况,最后提取连续下单的起始和结束日期。输出结果展示了用户连续下单的日期范围。