返回介绍

Hive DDL 命令

发布于 2024-06-23 16:10:22 字数 33473 浏览 0 评论 0 收藏 0

DDL 即数据定义语言,比如创建或者删除数据库命令,创建或删除表命令等。下面来详细看一下 Hive DDL 相关命令,并给出示例。

库操作

创建库

语法:

  1. CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name
  2.   [COMMENT database_comment]      //关于数据块的描述
  3.   [LOCATION hdfs_path]          //指定数据库在HDFS上的存储位置
  4.   [WITH DBPROPERTIES (property_name=property_value, ...)];    //指定数据块属性

默认地址:/user/hive/warehouse/db_name.db/table_name/partition_name/…

示例:
创建普通数据库

  1. hive> create database t1;
  2. OK
  3. Time taken: 0.057 seconds
  4. hive> show databases;
  5. OK
  6. t1
  7. default
  8. Time taken: 0.018 seconds, Fetched: 21 row(s)
  9. hive>

创建库的时候检查存在与否

  1. hive> create database if not exists tmp;
  2. OK
  3. Time taken: 0.014 seconds
  4. hive>

创建库的时候带注释

  1. hive> create database if not exists t2 comment 'learning hive';
  2. OK
  3. Time taken: 0.039 seconds
  4. hive>

利用 desc 查看数据库信息

  1. hive > desc database t2;
  2. OK
  3. t2 learning hive hdfs://myhive/user/hive/warehouse/t2.db root USER
  4. Time taken: 0.025 seconds, Fetched: 1 row(s)

创建带属性的库

  1. hive> create database if not exists t3 with dbproperties('creator'='hadoop','date'='2019-06-25');
  2. OK
  3. Time taken: 0.047 seconds
  4. hive>

查看库

语法:
show databases;

示例:
查看有哪些数据库

  1. hive> show databases;
  2. OK
  3. t1
  4. t2
  5. t3
  6. default
  7. Time taken: 0.015 seconds, Fetched: 4 row(s)
  8. hive>

查看数据库的详细属性信息
语法:

  1. desc database [extended] dbname;

示例:

  1. hive> desc database extended t3;
  2. OK
  3. t3 hdfs://myhive/user/hive/warehouse/t3.db root USER {date=2019-06-25, creator=hadoop}
  4. Time taken: 0.017 seconds, Fetched: 1 row(s)
  5. hive>

查看正在使用哪个库

  1. hive> select current_database();
  2. OK
  3. default
  4. Time taken: 0.722 seconds, Fetched: 1 row(s)
  5. hive>

删除库

语法:

  1. drop database dbname;
  2. drop database if exists dbname;

默认情况下,hive 不允许删除包含表的数据库,有两种解决办法:
1、 手动删除库下所有表,然后删除库。
2、 使用 cascade 关键字

  1. drop database if exists dbname cascade;

切换库

语法:

  1. use database_name

示例:

  1. hive> select current_database();
  2. OK
  3. default
  4. Time taken: 0.092 seconds, Fetched: 1 row(s)
  5. hive> use t3;
  6. OK
  7. Time taken: 0.019 seconds
  8. hive> select current_database();
  9. OK
  10. t3
  11. Time taken: 0.089 seconds, Fetched: 1 row(s)
  12. hive>

表操作

语法:

  1. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
  2.   [(col_name data_type [COMMENT col_comment], ...)]
  3.   [COMMENT table_comment]
  4.   [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
  5.   [CLUSTERED BY (col_name, col_name, ...)
  6.     [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
  7.   [ROW FORMAT row_format]
  8.   [STORED AS file_format]
  9.   [LOCATION hdfs_path]

各个关键词含义如下:

CREATE TABLE
创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。

EXTERNAL
关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION)

LIKE
允许用户复制现有的表结构,但是不复制数据

COMMENT
可以为表与字段增加描述

PARTITIONED BY
指定分区

ROW FORMAT
  DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
    MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
    | SERDE serde_name [WITH SERDEPROPERTIES
    (property_name=property_value, property_name=property_value, …)]
用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive 通过 SerDe 确定表的具体的列的数据。

STORED AS
  SEQUENCEFILE //序列化文件
  | TEXTFILE //普通的文本文件格式
  | RCFILE  //行列存储相结合的文件
| parquet
  | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname //自定义文件格式

如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE

LOCATION
指定表在HDFS的存储路径

示例:
创建默认的内部表

  1. hive> create table student(id int, name string, sex string, age int,department string) row format delimited fields terminated by ",";
  2. OK
  3. Time taken: 0.218 seconds
  4. hive>

外部表

  1. hive> create external table student_ext
  2. > (id int, name string, sex string, age int,department string) row format delimited fields terminated by "," location "/hive/student";
  3. OK
  4. Time taken: 0.161 seconds
  5. hive>

分区表

  1. hive> create external table student_ptn(id int, name string, sex string, age int,department string)
  2. > partitioned by (city string)
  3. > row format delimited fields terminated by ","
  4. > location "/hive/student_ptn";
  5. OK
  6. Time taken: 0.161 seconds
  7. hive>

添加分区

  1. hive> alter table student_ptn add partition(city="beijing");
  2. OK
  3. Time taken: 0.222 seconds
  4. hive> alter table student_ptn add partition(city="shenzhen");
  5. OK
  6. Time taken: 0.169 seconds

分桶表

  1. hive> create external table student_bck(id int, name string, sex string, age int,department string)
  2. > clustered by (id) sorted by (id asc, name desc) into 4 buckets
  3. > row format delimited fields terminated by ","
  4. > location "/hive/student_bck";
  5. OK
  6. Time taken: 0.174 seconds
  7. hive>

使用 create table as select 创建表

  1. hive > load data local inpath "/home/hadoop/student.txt" into table student;
  2. Time taken 0.715 seconds
  3. hive > select * from student;
  4. +-------------+---------------+--------------+--------------+---------------------+
  5. | student.id | student.name | student.sex | student.age | student.department |
  6. +-------------+---------------+--------------+--------------+---------------------+
  7. | 95002 | 刘晨 | 女 | 19 | IS |
  8. | 95017 | 王风娟 | 女 | 18 | IS |
  9. | 95018 | 王一 | 女 | 19 | IS |
  10. | 95013 | 冯伟 | 男 | 21 | CS |
  11. | 95014 | 王小丽 | 女 | 19 | CS |
  12. | 95019 | 邢小丽 | 女 | 19 | IS |
  13. | 95020 | 赵钱 | 男 | 21 | IS |
  14. | 95003 | 王敏 | 女 | 22 | MA |
  15. | 95004 | 张立 | 男 | 19 | IS |
  16. | 95012 | 孙花 | 女 | 20 | CS |
  17. | 95010 | 孔小涛 | 男 | 19 | CS |
  18. | 95005 | 刘刚 | 男 | 18 | MA |
  19. | 95006 | 孙庆 | 男 | 23 | CS |
  20. | 95007 | 易思玲 | 女 | 19 | MA |
  21. | 95008 | 李娜 | 女 | 18 | CS |
  22. | 95021 | 周二 | 男 | 17 | MA |
  23. | 95022 | 郑明 | 男 | 20 | MA |
  24. | 95001 | 李勇 | 男 | 20 | CS |
  25. | 95011 | 包小柏 | 男 | 18 | MA |
  26. | 95009 | 梦圆圆 | 女 | 18 | MA |
  27. | 95015 | 王君 | 男 | 18 | MA |
  28. +-------------+---------------+--------------+--------------+---------------------+
  29. 21 rows selected (0.342 seconds)
  30. hive > create table student_ctas as select * from student where id < 95012;
  31. Time taken 34.514 seconds
  32. hive > select * from student_ctas;
  33. +------------------+--------------------+-------------------+-------------------+--------------------------+
  34. | student_ctas.id | student_ctas.name | student_ctas.sex | student_ctas.age | student_ctas.department |
  35. +------------------+--------------------+-------------------+-------------------+--------------------------+
  36. | 95002 | 刘晨 | 女 | 19 | IS |
  37. | 95003 | 王敏 | 女 | 22 | MA |
  38. | 95004 | 张立 | 男 | 19 | IS |
  39. | 95010 | 孔小涛 | 男 | 19 | CS |
  40. | 95005 | 刘刚 | 男 | 18 | MA |
  41. | 95006 | 孙庆 | 男 | 23 | CS |
  42. | 95007 | 易思玲 | 女 | 19 | MA |
  43. | 95008 | 李娜 | 女 | 18 | CS |
  44. | 95001 | 李勇 | 男 | 20 | CS |
  45. | 95011 | 包小柏 | 男 | 18 | MA |
  46. | 95009 | 梦圆圆 | 女 | 18 | MA |
  47. +------------------+--------------------+-------------------+-------------------+--------------------------+
  48. 11 rows selected (0.445 seconds)

查看表

查看当期使用的数据库有哪些表

  1. hive > show tables;
  2. OK
  3. ss
  4. student
  5. student_bck
  6. student_ext
  7. student_ptn
  8. Time taken: 0.019 seconds, Fetched: 5 row(s)
  9. hive>

查看非当前使用的数据库中有哪些表

  1. hive> show tables in default;
  2. OK
  3. customers
  4. Time taken: 0.02 seconds, Fetched: 1 row(s)
  5. hive>

查看数据库中以xxx开头的表

  1. hive> show tables like 'student*';
  2. OK
  3. student
  4. student_bck
  5. student_ext
  6. student_ptn
  7. Time taken: 0.018 seconds, Fetched: 4 row(s)
  8. hive>

查看表信息

  1. hive> desc student_bck;
  2. OK
  3. id int
  4. name string
  5. sex string
  6. age int
  7. department string
  8. Time taken: 0.079 seconds, Fetched: 5 row(s)
  9. hive>

查看表详细信息(格式不友好)

  1. hive> desc extended student;
  2. OK
  3. id int
  4. name string
  5. sex string
  6. age int
  7. department string
  8. Detailed Table Information Table(tableName:student, dbName:t3, owner:root, createTime:1561444295, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:id, type:int, comment:null), FieldSchema(name:name, type:string, comment:null), FieldSchema(name:sex, type:string, comment:null), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:department, type:string, comment:null)], location:hdfs://cctvdbaapp00:8020/user/hive/warehouse/t3.db/student, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe, parameters:{field.delim=,, serialization.format=,}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1561444295}, viewOriginalText:null, viewExpandedText:null, tableType:MANAGED_TABLE)
  9. Time taken: 0.076 seconds, Fetched: 7 row(s)

查看表详细信息(格式友好)

  1. hive> desc formatted student;
  2. OK
  3. # col_name data_type comment
  4. id int
  5. name string
  6. sex string
  7. age int
  8. department string
  9. # Detailed Table Information
  10. Database: t3
  11. Owner: root
  12. CreateTime: Tue Jun 25 14:31:35 CST 2019
  13. LastAccessTime: UNKNOWN
  14. Protect Mode: None
  15. Retention: 0
  16. Location: hdfs://myhive/user/hive/warehouse/t3.db/student
  17. Table Type: MANAGED_TABLE
  18. Table Parameters:
  19. transient_lastDdlTime 1561444295
  20. # Storage Information
  21. SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
  22. InputFormat: org.apache.hadoop.mapred.TextInputFormat
  23. OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
  24. Compressed: No
  25. Num Buckets: -1
  26. Bucket Columns: []
  27. Sort Columns: []
  28. Storage Desc Params:
  29. field.delim ,
  30. serialization.format ,
  31. Time taken: 0.394 seconds, Fetched: 31 row(s)
  32. hive>

查看表分区信息

  1. hive> show partitions student_ptn;
  2. OK
  3. city=beijing
  4. city=shenzhen
  5. Time taken: 0.079 seconds, Fetched: 2 row(s)
  6. hive>

查看表的详细建表语句

  1. hive> show create table student_ptn;
  2. OK
  3. CREATE EXTERNAL TABLE `student_ptn`(
  4. `id` int,
  5. `name` string,
  6. `sex` string,
  7. `age` int,
  8. `department` string)
  9. PARTITIONED BY (
  10. `city` string)
  11. ROW FORMAT SERDE
  12. 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
  13. WITH SERDEPROPERTIES (
  14. 'field.delim'=',',
  15. 'serialization.format'=',')
  16. STORED AS INPUTFORMAT
  17. 'org.apache.hadoop.mapred.TextInputFormat'
  18. OUTPUTFORMAT
  19. 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
  20. LOCATION
  21. 'hdfs://cctvdbaapp00:8020/hive/student_ptn'
  22. TBLPROPERTIES (
  23. 'transient_lastDdlTime'='1561444415')
  24. Time taken: 0.121 seconds, Fetched: 21 row(s)
  25. hive>

修改表

修改表名

  1. hive> alter table student rename to new_student;

增加字段

  1. alter table new_student add columns (score int);

修改一个字段的定义

  1. alter table new_student change name new_name string;

删除字段

hive 不支持删除字段

替换所有字段

  1. alter table new_student replace columns (id int, name string, address string);

添加分区

新增一个分区

  1. alter table student_ptn add partition(city="chongqing");

新增多个分区

  1. alter table student_ptn add partition(city="chongqing2") partition(city="chongqing3") partition(city="chongqing4");

添加动态分区

select 的最后一个字段会被作为动态分区字段

  1. insert overwrite table student_ptn_age partition(age)
  2. select id,name,sex,department,age from student_ptn;

修改分区

一般来说,修改分区一般都是指修改分区的数据存储目录。
在添加分区的时候,直接指定当前分区的数据存储目录

  1. alter table student_ptn add if not exists partition(city='beijing')
  2. location '/student_ptn_beijing' partition(city='cc') location '/student_cc';

修改已经指定好的分区的数据存储目录

  1. alter table student_ptn partition (city='beijing') set location '/student_ptn_beijing';

此时原先的分区文件夹仍存在,但是在往分区添加数据时,只会添加到新的分区目录

删除分区

  1. alter table student_ptn drop partition (city='beijing');

删除表

  1. drop table new_student;

清空表

  1. truncate table student_ptn;

其他辅助命令

  1. show databases;show databases like 'my*' --查看数据库列表
  2. show tables;show tables in db_name --查看数据表
  3. show craete table table_name --查看数据表的建表语句
  4. show functions;-- 查看 hive 函数列表
  5. show partitions table_name;show partitions table_name partition (city='bj') --查看 hive 表分区
  6. desc table_name;desc extended table_name;desc formatted table_name; --查看表的详细信息(元数据信息)
  7. desc database db_name;desc database extended db_name --查看数据库的详细属性信息
  8. truncate table table_name --清空数据表

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文