Hive是基于Hadoop之上的类SQL语句,运用SQL来实现对数据进行操作。本文是基于 Azure云。
查看操作命令
查看 database
show databases
-- namespace中展示所有的数据库(database)名称
其结果展示为:
查看 table
show tables
-- database中展示当前database名称,这里的默认的database为default
-- tableName中展示所有的表(table)名称
-- isTemporary表示表是否为临时表,true为临时表,false为非临时表
其结果展示为:
切换database
use experimentdb
show tables
其结果展示为:
查看表所在的所有分区
show partitions testtable
-- 显示表名为testtable的表的所有分区
其结果展示为:
这里需要注意,testtable 必须是已经分区好的表,且其数据已经定义按照哪种方式进行分割:
-
未分区表会报如下错误
-
无数据和数据为分割会返回如下结果
显示所有函数
show functions
-- function中显示所有函数
其返回结果为:
创建表结构及实例展示
创建表
创建外部表:
- 外部表:删表数据不会丢失
- 内部表:删表数据会丢失
CREATE EXTERNAL TABLE IF NOT EXISTS table_name
-- 有EXTERNAL为外部表,无EXTERNAL为内部表
-- IF NOT EXISTS 判断是否存在表名为 table_name 的表,存在则不生成
(
column1 data_type COMMENT "column1_COMMENTs",
column2 data_type COMMENT "column2_COMMENTs",
column3 data_type COMMENT "column3_COMMENTs"
)
COMMENT "table_COMMENTs"
PARTITIONED BY (column_partition data_type COMMENT "column_COMMENTs") --根据哪个column进行分区
CLUSTERED BY (column_cluster) --根据哪个column进行聚类
SORTED BY (column_store ASC/DESC) INTO numb BUCKETS --根据哪个column进行从存储和分几个块(bucket),排序方式有 ASC/DESC两种;用于分桶表;分桶可理解为将一个文件再分成几个小文件
ROW FORMAT -- Row Format :每行之间怎么样进行分割,需根据下面的file格式进行制定
STORED AS file_format -- 该表存储为什么样的数据格式
LOCATION "location_path" --该表保存在哪个路径下
实例展示
创建表
创建一个用于储存 line,employees,apple字段且按照loadDate进行分区的表:
- 文件格式为Parquet,因此无需定义ROW FORMAT
- 存储位置为:/tmp/databricks-df-yaoyang-example.parquet
CREATE EXTERNAL TABLE IF NOT EXISTS test_daniel
(
line STRING COMMENT "department_info",
employees STRING COMMENT "employees_info",
apple INT COMMENT "apple_num"
)
COMMENT "department_apple"
PARTITIONED BY (loadDate STRING COMMENT "Load_date_time")
CLUSTERED BY (apple)
SORTED BY (employees ASC) INTO 2 BUCKETS
--ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'
STORED AS Parquet
LOCATION "/tmp/databricks-df-yaoyang-example.parquet"
其结果展示:表示外部表已经创建完成
向创建的表中添加字段信息
首先,需要有一份已经创建完的原始数据;然后基于该原始数据向创建的表中添加字段及信息
alter table test_daniel add partition(loadDate = "2021-01-15") location "dbfs:/tmp/databricks-df-yaoyang-example.parquet/loaddate=2021-01-15/"
--其解释为向外部表test_daniel中增加一个loadDate = "2021-01-15"的partition,其信息来自dbfs:/tmp/databricks-df-yaoyang-example.parquet/loaddate=2021-01-15/
其展示结果为:表示数据已经导入完成
查看导入完信息的外部表
select * from test_daniel
--外部表再原始数据中找不到的字段信息,将显示为null
其展示结果为: