热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HIVE常用命令(DDL)

好记性不如烂笔头,何况记性不好本文都来自hive文档,记下来方便查询。Database操作createdatabase文法CREATE(DATABASE|SCHEMA)[IFNOT

好记性不如烂笔头,何况记性不好
本文都来自hive文档, 记下来方便查询。

Database操作
  1. create database
    文法

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

  2. drop database
    文法

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

默认是RESTRICT,在数据库不空是,drop失败。CASCADE会删除掉db中的表。

  1. alter database
    文法

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);
ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;

  1. 查询当前db

SELECT current_database()
Table 操作

  1. 创建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 [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)
array_type
: ARRAY
map_type
: MAP
struct_type
: STRUCT
union_type
: UNIONTYPE -- (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)
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
constraint_specification:
: [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ]
[, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE

解释

  • 临时表
    使用CREATE TEMPRARY table ..., 临时表和当前session相关,session断开之后HIVE会删除临时表。临时表不支持分区和索引

  • 内表
    使用CREATE table ...模式创建内表,内表元数据、表数据都有HIVE管理。表数据存放在hive.metastore.warehouse.dir/table_name下,drop内表时,表数据和元数据都会被删除。

  • 外表
    使用CREATE EXTERNAL table ... 创建外表,创建时可是使用CREATE EXTERNAL table ... LOCATION hdfs_path指定外表数据存储的位置,当你已经有一份数据时,可以将数据挡在hdfs_path路径下,然后创建外表。drop外表时只会删除表的元数据,表数据不会删除。

  • 更新表元数据库
    当通过手动的方式(hdfs dfs -put)向hdfs某表路径下添加分区数据时,hive管理的元数据无法自动追踪分区信息,可以通过MSCK REPAIR TABLE table_name;检查并修复元数据库。

  • 表数据存储格式
    STORED AS INPUTFORMAT input_format_class OUTPUTFORMAT output_format_class,自定义input format和output format从hdfs读和写。

  • ROW FORMAT
    有两种方式:

    1. DELIMITED,指定符号分割行,行内各个field分割方式,如果存在column是map或者collection类型,分别通过MAP KEYS TERMIATED BY char分割key和value,或者通过COLLECTION ITEMS TERMINATED BY char分割列表元素。

    2. SERDE, 自定义序列化反序列化类,可以参考hive serde.

  • 分区表
    通过语句create table table_name(...) partitioned by (col_name1 col_type1, col_name2 col_type2 ) 按照指定列创建分区表,可以像partitioned by (col_name1 col_type1, col_name2 col_type2,.. )创建多个分区,一个分区对应一个子目录,比如col_name1可以table_name目录下的子路径,col_name2又是col_name1的下一级路径。

    被用来分区的列(col_name1,col_name2等)不能在出现在创建表的列里面。

  • 通过从select语句的查询结果创建表

    create table as select xxx from xxx,这是一个原子操作,意思就是在select语句产生全部结果之后,才会基于结果创建table,用户不会看见执行一部分的select结果。

    通过这中方式创建的表要求创建出来的表不可以是:分区表(PARTITIONED BY xxx)、分桶表(CLUSTERD BY xxx)、外表。

  • create table like
    通过CREATE table table_name like another_table这种方式可以创建一个新的表table_name,其表定义和another_table一样,但是新表是一个空表,不会复制another_table的数据,仅仅表结构一样。

  • 分桶表
    CREATE TABLE table_name(...) CLUSTERED BY (col_name col_type, ...) SORTED BY (col_name ...) INTO num_bucker BUCKETS
    创建分桶表,用来创建bucket的列名必须出现在创建表时的列里,这和partition不一样。同时分桶和分区可以同时出现,不冲突。

    往分桶表中插入数据时,HIVE不会自动的分桶和排序(分区表也不会),因此需要指定分桶,有两种方式:

    1. 打开分桶开关,强制分桶SET hive.enforce.bucketing=true;
      使用如下语句插入:
      insert into table table_name sort by col_name [desc|asc],…
      此时不需要使用CLUSTER BY,但是需要指定sort by,且和创建时SORTED BY一样。
    2. 设置SET mapred.reduce.tasks = ;,reducer个数和创建时桶个数一样。
      使用如下语句插入:
      insert into table table_name cluster by col_name,… sort by col_name [desc|asc],…
  1. ALTER table|partition
    • 设置table|partition 的serde class
      ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];
    • 增加分区
      ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location1'] partition_spec [LOCATION 'location2'] ...;
      增加分区只会修改元数据,不检查数据是否存在、不加载数据。所以指定的LOCATION即使不存在也不会出错。
  • 修改column
    ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name] [CASCADE|RESTRICT];

    1. col_old_name col_new_name column_type将旧的column改成新的。
    2. FIRST|AFTER column_name表示将列置于column_name之前和之后。
    3. CASCADE会修改表的元数据和partition的元数据。RESTRICT只会修改表的元数据。
  • ADD/REPLACE column
    ALTER TABLE table_name [PARTITION partition_spec] ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...) [CASCADE|RESTRICT]

    1. ADD 新增列,新增的列在分区列之前,其他非分区列之后。
    2. REPLACE,会删除现在所有列,然后加入新的列。
  1. 视图操作
  • 创建视图
    CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], ...) ] [COMMENT view_comment] [TBLPROPERTIES (property_name = property_value, ...)] AS SELECT ...;
    1. view_name 不能和已有的表或者视图重名。
    2. 不指定column_name 时会从SELECT中推断列名。
    3. 当视图所基于的底层表schema发生改变时,视图的schema不会改变。
    4. 视图是只读的,不可以使用INSERT/DELETE/ALTER.
  • 删除视图
    DROP VIEW [IF EXISTS]db_name.view_name
  • 修改视图
    ALTER VIEW [db_name.]view_name AS select_statement;
    其效果和CREATE VIEW一样,但是要求view_name必须存在。
  1. 索引操作
    • 创建索引

持续更新…


推荐阅读
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 题目《BZOJ2654: Tree》的时间限制为30秒,内存限制为512MB。该问题通过结合二分查找和Kruskal算法,提供了一种高效的优化解决方案。具体而言,利用二分查找缩小解的范围,再通过Kruskal算法构建最小生成树,从而在复杂度上实现了显著的优化。此方法不仅提高了算法的效率,还确保了在大规模数据集上的稳定性能。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 在关系型数据库中,数据约束是指在向数据表中插入数据时必须遵循的限制条件。在MySQL和MariaDB中,常见的数据约束包括主键约束、唯一键约束、外键约束以及非空约束等。这些约束确保了数据的完整性和一致性,是数据库管理中的重要组成部分。通过合理设置和使用这些约束,可以有效防止数据冗余和错误,提升数据库的可靠性和性能。 ... [详细]
  • 经过两天的努力,终于成功解决了半平面交模板题POJ3335的问题。原来是在`OnLeft`函数中漏掉了关键的等于号。通过这次训练,不仅加深了对半平面交算法的理解,还提升了调试和代码实现的能力。未来将继续深入研究计算几何的其他核心问题,进一步巩固和拓展相关知识。 ... [详细]
  • 微信小程序实现类似微博的无限回复功能,内置云开发数据库支持
    本文详细介绍了如何利用微信小程序实现类似于微博的无限回复功能,并充分利用了微信云开发的数据库支持。文中不仅提供了关键代码片段,还包含了完整的页面代码,方便开发者按需使用。此外,HTML页面中包含了一些示例图片,开发者可以根据个人喜好进行替换。文章还将展示详细的数据库结构设计,帮助读者更好地理解和实现这一功能。 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 在数据库开发中,`DROP`、`TRUNCATE` 和 `DELETE` 语句各有其特定的应用场景和行为特点。`DELETE` 语句通过逐行删除数据,并将每个删除操作记录为事务,适用于需要保留事务日志和触发器的场景。相比之下,`TRUNCATE` 语句则会快速清空整个表,不记录单个删除操作,因此执行速度更快,但无法恢复已删除的数据。而 `DROP` 语句不仅删除表中的所有数据,还会删除表结构本身,通常用于不再需要表结构的情况。了解这些区别有助于开发者在实际应用中选择合适的操作方式。 ... [详细]
  • 理解和应用HTTP请求中的转发与重定向机制
    在HTTP请求处理过程中,客户端发送请求(通常简称为req),服务器进行相应处理后返回响应(通常简称为res)。理解和应用客户端的转发与重定向机制是前端开发的重要内容。这两种机制在Web开发中具有关键作用,能够有效管理和优化用户请求的处理流程。转发机制允许服务器内部将请求传递给另一个资源,而重定向则指示客户端向新的URL发起新的请求,从而实现页面跳转或资源更新。掌握这些技术有助于提升应用的性能和用户体验。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
author-avatar
凯瑞德医药科技发展有限公司_997
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有