Scheduled queries

Hive 数据定义语言

Overview

HiveQL DDL 语句在此处记录,包括:

  • 创建数据库/架构,表,视图,函数,索引

  • 删除数据库/架构,表,视图,索引

  • TRUNCATE TABLE

  • ALTER DATABASE/SCHEMA,表格,视图

  • MSCK 修复表(或 ALTER TABLE RECOVER 分区)

  • 显示数据库/架构,表,TBL 属性,视图,分区,函数,索引,列,创建表

  • DESCRIBE DATABASE/SCHEMA,表名,视图名,实体化视图名

除 SHOW PARTITIONS 外,PARTITION 语句通常是 TABLE 语句的选项。

关键字,非保留关键字和保留关键字

All Keywords
VersionNon-reserved KeywordsReserved Keywords
Hive 1.2.0ADD, ADMIN, AFTER, ANALYZE, ARCHIVE, ASC, BEFORE, BUCKET, BUCKETS, CASCADE, CHANGE, CLUSTER, CLUSTERED, CLUSTERSTATUS, COLLECTION, COLUMNS, COMMENT, COMPACT, COMPACTIONS, COMPUTE, CONCATENATE, CONTINUE, DATA, DATABASES, DATETIME, DAY, DBPROPERTIES, DEFERRED, DEFINED, DELIMITED, DEPENDENCY, DESC, DIRECTORIES, DIRECTORY, DISABLE, DISTRIBUTE, ELEM_TYPE, ENABLE, ESCAPED, EXCLUSIVE, EXPLAIN, EXPORT, FIELDS, FILE, FILEFORMAT, FIRST, FORMAT, FORMATTED, FUNCTIONS, HOLD_DDLTIME, HOUR, IDXPROPERTIES, IGNORE, INDEX, INDEXES, INPATH, INPUTDRIVER, INPUTFORMAT, ITEMS, JAR, KEYS, KEY_TYPE, LIMIT, LINES, LOAD, LOCATION, LOCK, LOCKS, LOGICAL, LONG, MAPJOIN, MATERIALIZED, METADATA, MINUS, MINUTE, MONTH, MSCK, NOSCAN, NO_DROP, OFFLINE, OPTION, OUTPUTDRIVER, OUTPUTFORMAT, OVERWRITE, OWNER, PARTITIONED, PARTITIONS, PLUS, PRETTY, PRINCIPALS, PROTECTION, PURGE, READ, READONLY, REBUILD, RECORDREADER, RECORDWRITER, REGEXP, RELOAD, RENAME, REPAIR, REPLACE, REPLICATION, RESTRICT, REWRITE, RLIKE, ROLE, ROLES, SCHEMA, SCHEMAS, SECOND, SEMI, SERDE, SERDEPROPERTIES, SERVER, SETS, SHARED, SHOW, SHOW_DATABASE, SKEWED, SORT, SORTED, SSL, STATISTICS, STORED, STREAMTABLE, STRING, STRUCT, TABLES, TBLPROPERTIES, TEMPORARY, TERMINATED, TINYINT, TOUCH, TRANSACTIONS, UNARCHIVE, UNDO, UNIONTYPE, UNLOCK, UNSET, UNSIGNED, URI, USE, UTC, UTCTIMESTAMP, VALUE_TYPE, VIEW, WHILE, YEARALL, ALTER, AND, ARRAY, AS, AUTHORIZATION, BETWEEN, BIGINT, BINARY, BOOLEAN, BOTH, BY, CASE, CAST, CHAR, COLUMN, CONF, CREATE, CROSS, CUBE, CURRENT, CURRENT_DATE, CURRENT_TIMESTAMP, CURSOR, DATABASE, DATE, DECIMAL, DELETE, DESCRIBE, DISTINCT, DOUBLE, DROP, ELSE, END, EXCHANGE, EXISTS, EXTENDED, EXTERNAL, FALSE, FETCH, FLOAT, FOLLOWING, FOR, FROM, FULL, FUNCTION, GRANT, GROUP, GROUPING, HAVING, IF, IMPORT, IN, INNER, INSERT, INT, INTERSECT, INTERVAL, INTO, IS, JOIN, LATERAL, LEFT, LESS, LIKE, LOCAL, MACRO, MAP, MORE, NONE, NOT, NULL, OF, ON, OR, ORDER, OUT, OUTER, OVER, PARTIALSCAN, PARTITION, PERCENT, PRECEDING, PRESERVE, PROCEDURE, RANGE, READS, REDUCE, REVOKE, RIGHT, ROLLUP, ROW, ROWS, SELECT, SET, SMALLINT, TABLE, TABLESAMPLE, THEN, TIMESTAMP, TO, TRANSFORM, TRIGGER, TRUE, TRUNCATE, UNBOUNDED, UNION, UNIQUEJOIN, UPDATE, USER, USING, UTC_TMESTAMP, VALUES, VARCHAR, WHEN, WHERE, WINDOW, WITH
Hive 2.0.0已移除: REGEXP, RLIKE

添加: AUTOCOMMIT, ISOLATION, LEVEL, OFFSET, SNAPSHOT, TRANSACTION,WORK,WRITE
添加: COMMIT, ONLY, REGEXP, RLIKE, ROLLBACK, START
配置单元 2.1.0已添加: ABORT, KEY, LAST, NORELY, NOVALIDATE, NULLS, RELY, VALIDATE已添加: CACHE, CONSTRAINT, FOREIGN, PRIMARY, REFERENCES
配置单元 2.2.0已添加: DETAIL, DOW, EXPRESSION, OPERATOR, QUARTER, SUMMARY, VECTORIZATION, WEEK, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS已添加: DAYOFWEEK, EXTRACT, FLOOR, INTEGER, PRECISION, VIEWS
配置单元 3.0.0添加: TIMESTAMPTZ, ZONE添加: TIME, NUMERIC, SYNC

Version information

REGEXP 和 RLIKE 是 Hive 2.0.0 之前的非保留关键字,并且是从 Hive 2.0.0(HIVE-11703)开始的保留关键字。

如果您按照列名称中支持带引号的标识符(0.13.0 版和更高版本,请参阅HIVE-6013)中所述引用保留的关键字,则可以将它们用作标识符。大多数关键字都通过HIVE-6617保留,以减少语法上的歧义(1.2.0 版及更高版本)。如果用户仍然希望使用这些保留的关键字作为标识符,则有两种方法:(1)使用带引号的标识符,(2)设置hive.support.sql11.reserved.keywords = false。 (版本 2.1.0 和更早版本)

Create/Drop/Alter/Use Database

Create Database

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

SCHEMA 和 DATABASE 的用法是可互换的–它们意味着同一件事。在 Hive 0.6(HIVE-675)中添加了 CREATE DATABASE。在 Hive 0.7(HIVE-1836)中添加了 WITH DBPROPERTIES 子句。

MANAGEDLOCATION 已添加到 Hive 4.0.0(HIVE-22995)中的数据库。现在,LOCATION 是指外部表的默认目录,而 MANAGEDLOCATION 是指托管表的默认目录。它建议将 MANAGEDLOCATION 放在 metastore.warehouse.dir 中,以便所有托管表都具有公共根,该根位于公共 Management 策略所在的位置。它可以与 metastore.warehouse.tenant.colocation 一起使用,以使其指向仓库根目录之外的目录,以具有基于租户的公共根目录,可以在其中设置配额和其他策略。

Drop Database

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

SCHEMA 和 DATABASE 的用法是可互换的–它们意味着同一件事。在 Hive 0.6(HIVE-675)中添加了 DROP DATABASE。默认行为是 RESTRICT,如果数据库不为空,则 DROP DATABASE 将失败。要将表也拖放到数据库中,请使用 DROP DATABASE ... CASCADE。 Hive 0.8(HIVE-2090)中添加了对 RESTRICT 和 CASCADE 的支持。

Alter Database

ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...);   -- (Note: SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role;   -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)

ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path; -- (Note: Hive 2.2.1, 2.4.0 and later)

ALTER (DATABASE|SCHEMA) database_name SET MANAGEDLOCATION hdfs_path; -- (Note: Hive 4.0.0 and later)

SCHEMA 和 DATABASE 的用法是可互换的–它们意味着同一件事。在 Hive 0.14(HIVE-6601)中添加了 ALTER SCHEMA。

ALTER DATABASE ... SET LOCATION 语句不会将数据库当前目录的内容移动到新指定的位置。它不会更改与指定数据库下任何表/分区关联的位置。它仅更改默认的父目录,在该目录中将为此数据库添加新表。此行为类似于更改表目录不会将现有分区移动到其他位置。

ALTER DATABASE ... SET MANAGEDLOCATION 语句不会将数据库的托管表目录的内容移动到新指定的位置。它不会更改与指定数据库下任何表/分区关联的位置。它仅更改默认的父目录,在该目录中将为此数据库添加新表。此行为类似于更改表目录不会将现有分区移动到其他位置。

关于数据库的其他元数据无法更改。

Use Database

USE database_name;
USE DEFAULT;

USE 为所有后续的 HiveQL 语句设置当前数据库。要恢复为默认数据库,请使用关键字“ default”代替数据库名称。要检查当前正在使用哪个数据库:SELECT current_database()(从Hive 0.13.0开始)。

在 Hive 0.6(HIVE-675)中添加了USE database_name

Create/Drop/Truncate Table

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)

array_type
  : ARRAY < data_type >

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 创建具有给定名称的表。如果已经存在相同名称的表或视图,则会引发错误。您可以使用 IF NOT EXISTS 跳过该错误。

  • 表名和列名不区分大小写,但 SerDe 和属性名区分大小写。

  • 在 Hive 0.12 和更早版本中,表和列名称中仅允许使用字母数字和下划线字符。

    • 在 Hive 0.13 和更高版本中,列名可以包含任何Unicode字符(请参见HIVE-6013),但是,点( . )和冒号( )会在查询时产生错误,因此在 Hive 1.2 中是不允许的。 0(请参见HIVE-10120)。反引号(``'')中指定的任何列名均按字面意义对待。在反引号字符串中,使用双反引号(````)表示反引号字符。反引号还可以将保留关键字用于表和列标识符。

    • 要恢复到 0.13.0 之前的行为并将列名限制为字母数字和下划线字符,请将配置属性hive.support.quoted.identifiers设置为none。在此配置中,带反引号的名称被解释为正则表达式。有关详细信息,请参见列名称中支持带引号的标识符

  • 表和列 Comments 是字符串 Literals(单引号)。

  • 没有EXTERNAL clause创建的表称为* managed table *,因为 HiveManagement 其数据。要确定表是托管表还是外部表,请在DESCRIBE EXTENDED table_name的输出中查找 tableType。

  • TBLPROPERTIES 子句允许您使用自己的元数据键/值对标记表定义。还存在一些 sched 义的表属性,例如由 Hive 自动添加和 Management 的 last_modified_user 和 last_modified_time。其他 sched 义的表属性包括:

  • TBLPROPERTIES(“ comment” =“ * table_comment *”)

    • TBLPROPERTIES(“ hbase.table.name” =“ * table_name *”)–参见HBase Integration

    • 版本 0.13.0(HIVE-6406)中的 TBLPROPERTIES(“ immutable” =“ true”)或(“ immutable” =“ false”)–参见从查询将数据插入到 Hive 表中

    • TBLPROPERTIES(“ orc.compress” =“ ZLIB”)或(“ orc.compress” =“ SNAPPY”)或(“ orc.compress” =“ NONE”)和其他 ORC 属性–参见ORC Files

    • TBLPROPERTIES(“ transactional” =“ true”)或(“ transactional” =“ false”)在版本 0.14.0 中,默认值为“ false” –参见Hive Transactions

    • TBLPROPERTIES(“ NO_AUTO_COMPACTION” =“ true”)或(“ NO_AUTO_COMPACTION” =“ false”),默认值为“ false” –参见Hive Transactions

    • TBLPROPERTIES(“ compactor.mapreduce.map.memory.mb” =“ * mapper_memory” *)–参见Hive Transactions

    • TBLPROPERTIES(“ compactorthreshold.hive.compactor.delta.num.threshold” =“ * threshold_num *”)–参见Hive Transactions

    • TBLPROPERTIES(“ compactorthreshold.hive.compactor.delta.pct.threshold” =“ * threshold_pct *”)–参见Hive Transactions

    • 版本 1.2.0(HIVE-9118)中的 TBLPROPERTIES(“ auto.purge” =“ true”)或(“ auto.purge” =“ false”)–请参见语言手册 DDL#Drop 表语言手册 DDL#Drop 分区语言手册 DDL#截断表Insert Overwrite

    • 版本 0.6.0(HIVE-1329)中的 TBLPROPERTIES(“ EXTERNAL” =“ TRUE”)–将“ FALSE”的托管表更改为外部表,反之亦然。

  • 从 Hive 2.4.0(HIVE-16324)开始,属性'EXTERNAL'的值被解析为布尔值(不区分大小写的 true 或 false),而不是区分大小写的字符串比较。

    • 在外部表上设置 4.0.0(HIVE-19981)版本中的 TBLPROPERTIES(“ external.table.purge” =“ true”)也会删除该数据。
  • 要为表指定数据库,请在 CREATE TABLE 语句之前(在Hive 0.6及更高版本中)发出USE database_name语句,或用数据库名称(在Hive 0.7及更高版本中为“ database_name.table.name”)限定表名。
    关键字“ default”可用于默认数据库。

有关表 Comments,表属性和 SerDe 属性的更多信息,请参见下面的Alter Table

有关原始和复杂数据类型的详细信息,请参见Type SystemHive 数据类型

托管表和外部表

默认情况下,Hive 创建托管表,其中文件,元数据和统计信息由内部 Hive 进程 Management。有关托管表和外部表之间差异的详细信息,请参见托管表与外部表

Storage Formats

Hive 支持内置和自定义开发的文件格式。有关压缩表存储的详细信息,请参见CompressedStorage
以下是 Hive 内置的一些格式:

Storage FormatDescription
存储为文本文件存储为纯文本文件。 TEXTFILE 是默认文件格式,除非配置参数hive.default.fileformat的设置不同。


使用 DELIMITED 子句读取定界文件。
通过使用'ESCAPED BY'子句(例如 ESCAPED BY'')启用分隔符转义
如果要使用可以包含这些定界符的数据,则需要转义。
也可以使用'NULL DEFINED AS'子句指定自定义 NULL 格式(默认为' N')。
|存储为 SEQUENCEFILE |存储为压缩的序列文件。 |
|按 ORC 格式存储|存储为ORC 文件格式。支持 ACIDTransaction 和基于成本的优化器(CBO)。存储列级元数据。 |
| SPARED AS PARQUET |存储为Hive 0.13.0 及更高版本Parquet列存储格式的 Parquet 格式;
配置单元 0.10、0.11 或 0.12中使用 ROW FORMAT SERDE ... STORED AS INPUTFORMAT ... OUTPUTFORMAT 语法...
|以 AVRO 形式存储|以Hive 0.14.0 及更高版本格式存储为 Avro 格式(请参见Avro SerDe)。
|以 RCFILE 格式存储|以记录柱状文件格式存储。
|以 JSONFILE 形式存储|在 Hive 4.0.0 及更高版本中存储为 Json 文件格式。
| STORED BY |以 nonlocal 表格式存储。创建或链接到 nonlocal 表,例如由HBaseDruidAccumulo支持的表。
有关此选项的更多信息,请参见StorageHandlers
| file_format 中的| INPUTFORMAT 和 OUTPUTFORMAT |,以将相应的 InputFormat 和 OutputFormat 类的名称指定为字符串 Literals。
例如,“ org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat”。
对于 LZO 压缩,使用的值为
'INPUTFORMAT "com.hadoop.mapred.DeprecatedLzoTextInputFormat"
OUTPUTFORMAT "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"'
(see LZO Compression).|

行格式和 SerDe

您可以使用自定义 SerDe 或使用本机 SerDe 创建表。如果未指定 ROW FORMAT 或指定 ROW FORMAT DELIMITED,则使用本机 SerDe。
使用 SERDE 子句使用自定义 SerDe 创建表。有关 SerDes 的更多信息,请参见:

您必须为使用本机 SerDe 的表指定列列表。有关允许的列类型,请参阅《用户指南》的Types部分。
可以指定使用自定义 SerDe 的表的列列表,但是 Hive 将查询 SerDe 以确定此表的实际列列表。

有关 SerDes 的一般信息,请参阅《开发人员指南》中的Hive SerDe。另请参阅SerDe,以获取有关 Importing 和输出处理的详细信息。

要更改表的 SerDe 或 SERDEPROPERTIES,请按照语言手册 DDL#添加 SerDe 属性所述使用 ALTER TABLE 语句。

Row FormatDescription
RegEx

行格式序列
'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES
(
“ input.regex” =“<regex>”
)
STORED AS TEXTFILE;
存储为纯文本文件,由正则表达式翻译。
以下示例以默认的 Apache Weblog 格式定义了一个表。
CREATE TABLE apachelog (
````+197+

+201+``
````+259+
+264++265++266++267++268++269++270++271++272+``+273+`
此 SerDe 适用于大多数 CSV 数据,但不处理嵌入式换行符。要使用 SerDe,请指定完全限定的类名称 org.apache.hadoop.hive.serde2.OpenCSVSerde。
文档基于原始文档https://github.com/ogrodnek/csv-serde
Limitations
此 SerDe 将所有列都视为 String 类型。即使使用此 SerDe 创建具有非字符串列类型的表,DESCRIBE TABLE 输出也将显示字符串列类型。
从 SerDe 中检索类型信息。
要将列转换为表中的所需类型,可以在将 CAST 转换为所需类型的表上创建视图。
CSV SerDe 基于https://github.com/ogrodnek/csv-serde,并已添加到HIVE-7777的 Hive 发行版中。
CSVSerde 已针对 Hive 0.14 及更高版本进行了构建和测试,并使用与 Hive 发行版 Binding 在一起的Open-CSV 2.3.
有关 SerDes 的一般信息,请参阅《开发人员指南》中的Hive SerDe。有关 Importing 和输出处理的详细信息,另请参见SerDe

Partitioned Tables

可以使用 PARTITIONED BY 子句创建分区表。一个表可以具有一个或多个分区列,并为分区列中的每个不同值组合创建一个单独的数据目录。此外,可以使用 CLUSTERED BY 列对表或分区进行存储,并且可以通过 SORT BY 列在该存储区中对数据进行排序。这样可以提高某些查询的性能。

如果在创建分区表时收到以下错误消息:“ FAILED:语义分析错误:分区列中重复的列”,则表示您试图将分区列包含在表本身的数据中。您可能确实定义了该列。但是,您创建的分区将创建一个可查询的伪列,因此您必须将表列重命名为其他名称(用户不应在其上查询!)。

例如,假设您原始的未分区表具有三列:id,date 和 name。

Example:

id     int,
date   date,
name   varchar

现在您要按日期分区。您的 Hive 定义可以使用“ dtDontQuery”作为列名,以便可以将“ date”用于分区(和查询)。

Example:

create table table_name (
  id                int,
  dtDontQuery       string,
  name              string
)
partitioned by (date string)

现在,您的用户仍将在“ where date = '...'”上查询,但第二列 dtDontQuery 将保留原始值。

这是创建分区表的示例语句:

Example:

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 STORED AS SEQUENCEFILE;

上面的语句使用 viewTime,userid,page_url,referrer_url 和 ip 列(包括 Comments)创建 page_view 表。该表也已分区,数据存储在序列文件中。假定文件中的数据格式由 ctrl-A 分隔字段,由换行分隔行。

Example:

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
STORED AS SEQUENCEFILE;

上面的语句使您可以创建与上一个表相同的表。

在前面的示例中,数据存储在\ <hive.metastore.warehouse.dir>/page_view 中。在 Hive 配置文件 hive-site.xml 中为键hive.metastore.warehouse.dir指定一个值。

External Tables

EXTERNAL 关键字使您可以创建表并提供 LOCATION,以便 Hive 对此表不使用默认位置。如果您已经生成了数据,这将很方便。删除 EXTERNAL 表时,从文件系统中删除表中的数据。从 Hive 4.0.0(HIVE-19981-获取问题详细信息... STATUS)开始,设置表属性 external.table.purge = true,也会删除数据。

EXTERNAL 表指向其存储的任何 HDFS 位置,而不是存储在配置属性hive.metastore.warehouse.dir指定的文件夹中。

Example:

CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User',
     country STRING COMMENT 'country of origination')
 COMMENT 'This is the staging page view table'
 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
 STORED AS TEXTFILE
 LOCATION '<hdfs_location>';

您可以使用上面的语句创建一个 page_view 表,该表指向任何要存储的 HDFS 位置。但是您仍然必须确保按照上面的 CREATE 语句中指定的方式对数据进行定界。

有关创建外部表的另一个示例,请参见教程中的Loading Data

选择创建表格(CTAS)

还可以通过一个 create-table-as-select(CTAS)语句中的查询结果来创建和填充表。 CTAS 创建的表是原子表,这意味着直到填充所有查询结果后,其他用户才能看到该表。因此,其他用户将看不到带有查询完整结果的表,或者根本看不到该表。

CTAS 由两部分组成,SELECT 部分可以是 HiveQL 支持的任何SELECT statement。 CTAS 的 CREATE 部分从 SELECT 部分获取结果模式,并使用其他表属性(例如 SerDe 和存储格式)创建目标表。

从 Hive 3.2.0 开始,CTAS 语句可以为目标表(HIVE-20241)定义分区规范。

CTAS 具有以下限制:

  • 目标表不能是外部表。

  • 目标表不能是列表存储表。

Example:

CREATE TABLE new_key_value_store
   ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
   STORED AS RCFile
   AS
SELECT (key % 1024) new_key, concat(key, value) key_value_pair
FROM key_value_store
SORT BY new_key, key_value_pair;

上面的 CTAS 语句使用从 SELECT 语句的结果派生的架构(new_key DOUBLE,key_value_pair STRING)创建目标表 new_key_value_store。如果 SELECT 语句未指定列别名,则列名称将自动分配给_col0,_col1 和_col2 等。此外,新目标表是使用特定的 SerDe 和存储格式创建的,独立于源表中的源表。 SELECT 语句。

Hive 0.13.0开始,SELECT 语句可以包含一个或多个通用表表达式(CTE),如SELECT syntax所示。有关示例,请参见公用表表达式

能够从一个表到另一个表中选择数据是 Hive 最强大的功能之一。 Hive 在执行查询时处理数据从源格式到目标格式的转换。

创建表类似

LIKE 形式的 CREATE TABLE 允许您精确地复制现有的表定义(而不复制其数据)。与 CTAS 相比,以下语句创建了一个新的 empty_key_value_store 表,该表的定义与表名以外的所有详细信息都与现有 key_value_store 完全匹配。新表不包含任何行。

CREATE TABLE empty_key_value_store
LIKE key_value_store [TBLPROPERTIES (property_name=property_value, ...)];

在 Hive 0.8.0 之前,CREATE TABLE LIKE view_name 将复制该视图。在 Hive 0.8.0 和更高版本中,CREATE TABLE LIKE view_name 通过使用 view_name 模式(字段和分区列)使用 SerDe 和文件格式的默认值来创建表。

排序表的存储桶

Example:

CREATE TABLE page_view(viewTime INT, userid BIGINT,
     page_url STRING, referrer_url STRING,
     ip STRING COMMENT 'IP Address of the User')
 COMMENT 'This is the page view table'
 PARTITIONED BY(dt STRING, country STRING)
 CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY '\001'
   COLLECTION ITEMS TERMINATED BY '\002'
   MAP KEYS TERMINATED BY '\003'
 STORED AS SEQUENCEFILE;

在上面的示例中,page_view 表存储了 userid(由其分类),并且在每个存储区中,数据按 viewTime 的升序进行排序。这样的组织允许用户对聚集列(在本例中为 userid)进行高效采样。排序属性使内部运算符可以在评估查询时利用众所周知的数据结构,从而提高效率。如果任何列是列表或 Map,则可以使用 MAP KEYS 和 COLLECTION ITEMS 关键字。

CLUSTERED BY 和 SORTED BY 创建命令不会影响如何将数据插入表中,而只会影响数据的读取方式。这意味着用户必须注意正确地插入数据,方法是将减速器的数量指定为等于存储桶的数量,并在查询中使用 CLUSTER BY 和 SORT BY 命令。

还有一个创建并填充存储桶表的示例。

Skewed Tables

Version information

从 Hive 0.10.0 开始(HIVE-3072HIVE-3649)。有关在 Hive 0.10.0 和 0.11.0 中实现列表存储的其他 JIRA 票证,请参见HIVE-3026

Design documents

阅读偏斜连接优化List Bucketing设计文档以获取更多信息。

此功能可用于提高一个或多个列具有skewed值的表的性能。通过指定经常出现的值(偏斜),Hive 会自动将它们分割成单独的文件(或list bucketing的目录),并在查询过程中考虑到这一事实,以便它可以跳过或包括整个文件(或目录)如果是list bucketing)。

可以在表创建过程中在每个表级别上指定。

下面的示例显示具有三个偏斜值的一列,还可以选择带有指定列表存储的 STORED AS DIRECTORIES 子句。

Example:

CREATE TABLE list_bucket_single (key STRING, value STRING)
  SKEWED BY (key) ON (1,5,6) [STORED AS DIRECTORIES];

这是一个具有两个倾斜列的表的示例。

Example:

CREATE TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING)
  SKEWED BY (col1, col2) ON (('s1',1), ('s3',3), ('s13',13), ('s78',78)) [STORED AS DIRECTORIES];

有关相应的 ALTER TABLE 语句,请参见下面的倾斜或存储为目录的 LanguageManual DDL#Alter 表

Temporary Tables

Version information

从 Hive 0.14.0(HIVE-7090)起。

已创建为临时表的表仅对当前会话可见。数据将存储在用户的临时目录中,并在会话结束时删除。

如果使用数据库中已经存在的永久表的数据库/表名创建临时表,则在该会话内,对该表的任何引用都将解析为该临时表,而不是永久表。如果不删除临时表或将其重命名为不冲突的名称,用户将无法访问该会话中的原始表。

临时表具有以下限制:

  • 不支持分区列。

  • 不支持创建索引。

Hive 1.1.0开始,可以使用hive.exec.temporary.table.storage配置参数将临时表的存储策略设置为memoryssddefault(请参见HDFS 存储类型和存储策略)。

Example:

CREATE TEMPORARY TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING);

Transactional Tables

Version information

从 Hive 4.0(HIVE-18453)开始。

支持使用 ACID 语义进行操作的表。有关事务表的更多详细信息,请参见this

Example:

CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;

Constraints

Version information

从 Hive 2.1.0(HIVE-13290)起。

Hive 包括对未验证的主键和外键约束的支持。存在约束时,某些 SQL 工具会生成更有效的查询。由于未验证这些约束,因此上游系统需要确保数据完整性,然后再将其加载到 Hive 中。

Example:

create table pk(id1 integer, id2 integer,
  primary key(id1, id2) disable novalidate);

create table fk(id1 integer, id2 integer,
  constraint c1 foreign key(id1, id2) references pk(id2, id1) disable novalidate);

Version information

从 Hive 3.0.0 开始(HIVE-16575HIVE-18726HIVE-18953)。

Hive 包括对 UNIQUE,NOT NULL,DEFAULT 和 CHECK 约束的支持。除了 UNIQUE 之外,所有三种类型的约束都被强制执行。

Example:

create table constraints1(id1 integer UNIQUE disable novalidate, id2 integer NOT NULL, 
  usr string DEFAULT current_user(), price double CHECK (price > 0 AND price <= 1000));

create table constraints2(id1 integer, id2 integer,
  constraint c1_unique UNIQUE(id1) disable novalidate);

create table constraints3(id1 integer, id2 integer,
  constraint c1_check CHECK(id1 + id2 > 0));

不支持对复杂数据类型(例如 map,struct,array)使用 DEFAULT。

Drop Table

DROP TABLE [IF EXISTS] table_name [PURGE];     -- (Note: PURGE available in Hive 0.14.0 and later)

DROP TABLE 删除该表的元数据和数据。如果已配置垃圾桶(并且未指定 PURGE),则数据实际上将移动到.Trash/Current 目录。元数据完全丢失。

删除 EXTERNAL 表时,该表中的数据将“不”从文件系统中删除。从 Hive 4.0.0(HIVE-19981-获取问题详细信息... STATUS)开始,设置表属性 external.table.purge = true,也会删除数据。

删除视图引用的表时,不会给出警告(视图被视为无效悬空,必须由用户删除或重新创建)。

否则,将从“ Metastore”中删除表信息,并像“ hadoop dfs -rm”一样删除原始数据。在许多情况下,这导致表数据被移动到用户主目录中的.Trash 文件夹中。因此,错误地删除表的用户可以通过以下方法恢复丢失的数据:重新创建具有相同模式的表,重新创建任何必要的分区,然后使用 Hadoop 手动将数据移回原位。该解决方案依赖于基础实施,因此会随着时间的推移或在安装过程中发生变化。强烈建议用户不要随意删除表。

Version information: PURGE

HIVE-7100在版本 0.14.0 中添加了 PURGE 选项。

如果指定了 PURGE,则表数据不会进入.Trash/Current 目录,因此如果 DROP 错误,则无法检索该表数据。还可以使用表属性 auto.purge 指定清除选项(请参见上面的TBLPROPERTIES)。

在 Hive 0.7.0 或更高版本中,如果表不存在,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

有关如何drop partitions的信息,请参见下面的“更改分区”部分。

Truncate Table

Version information

从 Hive 0.11.0(HIVE-446)起。

TRUNCATE [TABLE] table_name [PARTITION partition_spec];

partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

从表或分区中删除所有行。如果启用了文件系统“废纸”,则这些行将被废纸,否则将被删除(从 Hive 2.2.0 开始,带有HIVE-14626)。当前目标表应该是本机/托管表,否则将引发异常。用户可以指定 partial partition_spec 来一次截断多个分区,而省略 partition_spec 将截断表中的所有分区。

从 HIVE 2.3.0(HIVE-15880)开始,如果表属性“ auto.purge”(请参见上面的TBLPROPERTIES)设置为“ true”,则对它发出 TRUNCATE TABLE 命令时该表的数据不会移动到“已删除邮件”,并且不能如果 TRUNCATE 错误,则可以将其检索。这仅适用于托管表(请参见managed tables)。如果未为托管表设置“ auto.purge”属性或将其设置为 false,则可以关闭此行为。

从 Hive 4.0(HIVE-23183)开始,TABLE 令牌是可选的,以前的版本需要它。

Alter Table/Partition/Column

Alter table 语句使您可以更改现有表的结构。您可以添加列/分区,更改 SerDe,添加表和 SerDe 属性或重命名表本身。同样,alter table partition 语句允许您更改命名表中特定分区的属性。

Alter Table

Rename Table

ALTER TABLE table_name RENAME TO new_table_name;

此语句使您可以将表的名称更改为其他名称。

从 0.6 版开始,managed table上的重命名会移动其 HDFS 位置。重命名已从版本 2.2.0(HIVE-14909)开始更改,因此仅当创建的表没有LOCATION clause且在其数据库目录下时才移动托管表的 HDFS 位置。 0.6 之前的 Hive 版本只是在不移动 HDFS 位置的情况下重命名了元存储中的表。

更改表属性

ALTER TABLE table_name SET TBLPROPERTIES table_properties;

table_properties:
  : (property_name = property_value, property_name = property_value, ... )

您可以使用此语句将自己的元数据添加到表中。当前,last_modified_user 和 last_modified_time 属性由 Hive 自动添加和 Management。用户可以将自己的属性添加到此列表。您可以执行 DESCRIBE EXTENDED TABLE 以获取此信息。

有关更多信息,请参见上面的“创建表”中的TBLPROPERTIES clause

修改表 Comments

要更改表的 Comments,您必须更改TBLPROPERTIEScomment属性:

ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment);

添加 SerDe 属性

ALTER TABLE table_name [PARTITION partition_spec] SET SERDE serde_class_name [WITH SERDEPROPERTIES serde_properties];

ALTER TABLE table_name [PARTITION partition_spec] SET SERDEPROPERTIES serde_properties;

serde_properties:
  : (property_name = property_value, property_name = property_value, ... )

这些语句使您能够更改表的 SerDe 或将用户定义的元数据添加到表的 SerDe 对象。

当 Hive 初始化表以序列化和反序列化数据时,SerDe 属性将传递到表的 SerDe。因此,用户可以在此处存储其自定义 SerDe 所需的任何信息。有关更多信息,请参阅《开发人员指南》中的SerDe documentationHive SerDe,有关在 CREATE TABLE 语句中设置表的 SerDe 和 SERDEPROPERTIES 的详细信息,请参见上面的语言手册 DDL#行格式,存储格式和 SerDe

请注意,property_nameproperty_value都必须加引号。

Example:

ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = ',');

删除 SerDe 属性

Version information

从 Hive 4.0.0(HIVE-21952)开始支持“删除 SerDe 属性”。

ALTER TABLE table_name [PARTITION partition_spec] UNSET SERDEPROPERTIES (property_name, ... );

这些语句使您可以将用户定义的元数据删除到表的 SerDe 对象。

请注意,property_name必须加引号。

Example:

ALTER TABLE table_name UNSET SERDEPROPERTIES ('field.delim');

更改表存储属性

ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
  INTO num_buckets BUCKETS;

这些语句更改表的物理存储属性。

注意:这些命令只会修改 Hive 的元数据,并且不会重新组织或重新格式化现有数据。用户应确保实际数据布局符合元数据定义。

倾斜或存储为目录的变更表

Version information

从 Hive 0.10.0 开始(HIVE-3072HIVE-3649)。有关在 Hive 0.10.0 和 0.11.0 中实现列表存储的其他 JIRA 票证,请参见HIVE-3026

可以使用 ALTER TABLE 语句更改表的 SKEWED 和 STORED AS DIRECTORIES 选项。有关相应的 CREATE TABLE 语法,请参见上面的语言手册 DDL#倾斜表

倾斜的修改表
ALTER TABLE table_name SKEWED BY (col_name1, col_name2, ...)
  ON ([(col_name1_value, col_name2_value, ...) [, (col_name1_value, col_name2_value), ...]
  [STORED AS DIRECTORIES];

STORED AS DIRECTORIES 选项确定skewed表是否使用list bucketing功能,该功能为偏斜的值创建子目录。

Alter Table 不倾斜
ALTER TABLE table_name NOT SKEWED;

NOT SKEWED 选项可以使表不倾斜,并关闭列表存储功能(因为列表存储表始终是倾斜的)。这会影响在 ALTER 语句之后创建的分区,但对在 ALTER 语句之前创建的分区没有影响。

更改表未存储为目录
ALTER TABLE table_name NOT STORED AS DIRECTORIES;

尽管表仍然歪斜,但这会关闭列表存储功能。

更改表设置的偏斜位置
ALTER TABLE table_name SET SKEWED LOCATION (col_name1="location1" [, col_name2="location2", ...] );

这将更改列表存储的位置图。

更改表约束

Version information

从 Hive 版本2.1.0开始。

可以通过 ALTER TABLE 语句添加或删除表约束。

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (column, ...) DISABLE NOVALIDATE;
ALTER TABLE table_name ADD CONSTRAINT constraint_name FOREIGN KEY (column, ...) REFERENCES table_name(column, ...) DISABLE NOVALIDATE RELY;
ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (column, ...) DISABLE NOVALIDATE;
ALTER TABLE table_name CHANGE COLUMN column_name column_name data_type CONSTRAINT constraint_name NOT NULL ENABLE;
ALTER TABLE table_name CHANGE COLUMN column_name column_name data_type CONSTRAINT constraint_name DEFAULT default_value ENABLE;
ALTER TABLE table_name CHANGE COLUMN column_name column_name data_type CONSTRAINT constraint_name CHECK check_expression ENABLE;

ALTER TABLE table_name DROP CONSTRAINT constraint_name;

其他 Alter Table 语句

有关更改表的更多 DDL 语句,请参见下面的语言手册 DDL#更改表或分区

Alter Partition

可以通过使用 ALTER TABLE 语句中的 PARTITION 子句来添加,重命名,交换(移动),删除或(未存档)分区,如下所述。要使 metastore 知道直接添加到 HDFS 的分区,可以使用 metastore check 命令(MSCK),或者在 Amazon EMR 上可以使用 ALTER TABLE 的 RECOVER PARTITIONS 选项。有关更改分区的更多方法,请参见下面的语言手册 DDL#更改表或分区

Version 1.2+

从 Hive 1.2(HIVE-10307)开始,如果属性hive.typecheck.on.insert设置为 true(默认值),则会对分区规范中指定的分区值进行类型检查,转换和规范化以符合其列类型。值可以是数字 Literals。

Add Partitions

ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];

partition_spec:
  : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

您可以使用 ALTER TABLE ADD PARTITION 将分区添加到表中。分区值仅在为字符串时才应加引号。该位置必须是数据文件所在的目录。 (ADD PARTITION 会更改表元数据,但不会加载数据.如果分区位置中不存在数据,查询将不会返回任何结果.)如果表的 partition_spec 已经存在,则会引发错误。您可以使用 IF NOT EXISTS 跳过该错误。

Version 0.7

尽管在单个 ALTER TABLE 中具有多个 partition_spec 是正确的语法,但是如果在版本 0.7 中执行此操作,则分区方案将失败。也就是说,每个指定分区的查询将始终仅使用第一个分区。

具体来说,以下示例将在 Hive 0.7 中静默失败且没有错误,并且无论您指定哪个分区,所有查询都只会进入 dt ='2008-08-08'分区。

Example:

ALTER TABLE page_view ADD PARTITION (dt='2008-08-08', country='us') location '/path/to/us/part080808'
                          PARTITION (dt='2008-08-09', country='us') location '/path/to/us/part080809';

在 Hive 0.8 和更高版本中,您可以在单个 ALTER TABLE 语句中添加多个分区,如上例所示。

在 Hive 0.7 中,如果要添加许多分区,应使用以下格式:

ALTER TABLE table_name ADD PARTITION (partCol = 'value1') location 'loc1';
ALTER TABLE table_name ADD PARTITION (partCol = 'value2') location 'loc2';
...
ALTER TABLE table_name ADD PARTITION (partCol = 'valueN') location 'locN';
Dynamic Partitions

可以使用 Hive INSERT 语句(或 Pig STORE 语句)将分区动态添加到表中。有关详细信息和示例,请参阅以下文档:

Rename Partition

Version information

从 Hive 0.9 开始。

ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;

该语句使您可以更改分区列的值。用例之一是,您可以使用此语句来规范您的旧分区列值,使其符合其类型。在这种情况下,即使将属性hive.typecheck.on.insert设置为 true(默认值),也不会对旧* partition_spec 中的列值启用类型转换和规范化,这允许您在旧 partition_spec *中以字符串形式指定任何旧数据。

Exchange Partition

可以在表之间交换(移动)分区。

Version information

从 Hive 0.12(HIVE-4095)开始。 Hive 版本1 .2.2、1.3.0 和 2.0.0中支持多个分区。

-- Move partition from table_name_1 to table_name_2
ALTER TABLE table_name_2 EXCHANGE PARTITION (partition_spec) WITH TABLE table_name_1;
-- multiple partitions
ALTER TABLE table_name_2 EXCHANGE PARTITION (partition_spec, partition_spec2, ...) WITH TABLE table_name_1;

此语句使您可以将一个分区中的数据从一个表移动到另一个具有相同架构并且还没有该分区的表。
有关此功能的更多详细信息,请参见Exchange PartitionHIVE-4095

Discover Partitions

在 Hive Metastore 中自动发现并同步分区的元数据。

创建外部分区表后,将自动添加“ discover.partitions” =“ true”表属性。对于托管分区表,可以手动添加“ discover.partitions”表属性。当 Hive Metastore Service(HMS)在远程服务模式下启动时,后台线程(PartitionManagementTask)每 300 秒(通过 metastore.partition.management.task.frequency 配置可配置)定期进行调度,以查找带有“ discover.partitions”表的表属性设置为 true,并在同步模式下执行 msck 修复。如果该表是事务性表,则在执行 msck 修复之前,将获得该表的排他锁。使用此表属性,不再需要手动运行“ MSCK REPAIR TABLE table_name SYNC PARTITIONS”。

Version information

从 Hive 4.0.0(HIVE-20707)起。

Partition Retention

现在可以为具有保留间隔的分区表指定表属性“ partition.retention.period”。指定保留间隔后,在 HMS 中运行的后台线程(请参阅“发现分区”部分)将检查分区的使用期限(创建时间),并且如果分区的使用期限早于保留期限,则将其删除。在保留期后删除分区也将删除该分区中的数据。例如,如果使用表属性“ discover.partitions” =“ true”和“ partition.retention.period” =“ 7d”创建具有'date'分区的外部分区表,则仅保留最近 7 天创建的分区。

Version information

从 Hive 4.0.0(HIVE-20707)起。

恢复分区(MSCK 修复表)

Hive 在其元存储区中为每个表存储分区列表。但是,如果将新分区直接添加到 HDFS(例如使用hadoop fs -put命令)或从 HDFS 中删除,则除非用户在每个分区上运行ALTER TABLE table_name ADD/DROP PARTITION命令,否则元存储(因此,Hive)将不会意识到分区信息的这些更改。新添加或删除的分区。

但是,用户可以使用修复表选项运行 metastore check 命令:

MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];

它将有关分区的元数据更新到 Hive 元存储中,以获取尚不存在此类元数据的分区。 MSC 命令的默认选项是“添加分区”。使用此选项,它将把 HDFS 上存在但元存储中不存在的所有分区添加到元存储中。 DROP PARTITIONS 选项将从已经从 HDFS 中删除的 metastore 中删除分区信息。 SYNC PARTITIONS 选项等效于调用 ADD 和 DROP PARTITIONS。有关更多详细信息,请参见HIVE-874HIVE-17824。如果存在大量未跟踪的分区,则可以批量运行 MSCK REPAIR TABLE,以避免 OOME(内存不足错误)。通过为属性 hive.msck.repair.batch.size 提供配置的批处理大小,它可以在内部批处理中运行。该属性的默认值为零,这意味着它将立即执行所有分区。不带 REPAIR 选项的 MSCK 命令可用于查找有关元数据不匹配元存储的详细信息。

Amazon Elastic MapReduce(EMR)版本的 Hive 上的等效命令为:

ALTER TABLE table_name RECOVER PARTITIONS;

从 Hive 1.3 开始,如果在 HDFS 上找到分区值中包含禁止字符的目录,则 MSCK 将引发异常。在 Client 端上使用 hive.msck.path.validation 设置来更改此行为; “跳过”将仅跳过目录。无论如何,“ ignore”将尝试创建分区(旧行为)。这可能会或可能不会。

Drop Partitions

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]
  [IGNORE PROTECTION] [PURGE];            -- (Note: PURGE available in Hive 1.2.0 and later, IGNORE PROTECTION not available 2.0.0 and later)

您可以使用 ALTER TABLE DROP PARTITION 删除表的分区。这将删除该分区的数据和元数据。如果配置了垃圾桶,则实际上将数据移动到.Trash/Current 目录,除非指定了 PURGE,但是元数据完全丢失(请参见上面的语言手册 DDL#Drop 表)。

Version Information: PROTECTION

IGNORE PROTECTION 在 2.0.0 及更高版本中不再可用。使用 Hive 可用的几个安全选项之一来代替此功能(请参阅基于 SQL Standard 的 Hive 授权)。有关详情,请参见HIVE-11145

对于受NO_DROP CASCADE保护的表,可以使用谓词 IGNORE PROTECTION 删除指定的分区或一组分区(例如,在两个 Hadoop 群集之间拆分表时):

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec IGNORE PROTECTION;

上面的命令将删除该分区,而不管保护状态如何。

Version information: PURGE

HIVE-10934将 PURGE 选项添加到 1.2.1 版的 ALTER TABLE 中。

如果指定了 PURGE,则分区数据不会进入.Trash/Current 目录,因此在 DROP 错误的情况下无法检索该分区数据:

ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec PURGE;     -- (Note: Hive 1.2.0 and later)

还可以使用表属性 auto.purge 指定清除选项(请参见上面的TBLPROPERTIES)。

在 Hive 0.7.0 或更高版本中,如果不存在分区,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

ALTER TABLE page_view DROP PARTITION (dt='2008-08-08', country='us');

(Un)Archive Partition

ALTER TABLE table_name ARCHIVE PARTITION partition_spec;
ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;

归档是一项功能,可将分区的文件移动到 Hadoop 存档(HAR)中。请注意,只有文件数量会减少; HAR 不提供任何压缩。有关详情,请参见LanguageManual Archiving

更改表或分区

更改表/分区文件格式

ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;

该语句更改表(或分区)的文件格式。有关可用的 file_format 选项,请参见上面CREATE TABLE的部分。该操作仅更改表元数据。现有数据的任何转换都必须在 Hive 之外进行。

更改表/分区的位置

ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";

更改表/分区触摸

ALTER TABLE table_name TOUCH [PARTITION partition_spec];

TOUCH 读取元数据,然后将其写回。这具有导致执行前/执行后钩子触发的效果。一个示例用例是,如果您有一个钩子记录所有修改过的表/分区,以及一个外部脚本,该脚本可以直接更改 HDFS 上的文件。由于脚本修改了配置单元之外的文件,因此该钩子不会记录修改。外部脚本可以调用 TOUCH 触发钩子,并将所述表或分区标记为已修改。

另外,如果我们纳入可靠的上次修改时间,则稍后可能会很有用。然后触摸也会更新该时间。

请注意,TOUCH 不会创建表或分区(如果尚不存在)。 (请参阅语言手册 DDL#创建表。)

更改表/分区保护

Version information

从 Hive 0.7.0(HIVE-1413)起。在 HIVE 0.8.0(HIVE-2605)中添加了 NO_DROP 的 CASCADE 子句。

此功能已在 Hive 2.0.0 中删除。使用 Hive 可用的几个安全选项之一来代替此功能(请参阅基于 SQL Standard 的 Hive 授权)。有关详情,请参见HIVE-11145

ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE];

ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE OFFLINE;

可以在表或分区级别上设置数据保护。启用 NO_DROP 可以防止表成为dropped。启用 OFFLINE 可以防止查询表或分区中的数据,但是仍然可以访问元数据。

如果表中的任何分区都启用了 NO_DROP,则也不能删除该表。相反,如果表启用了 NO_DROP,则可以删除分区,但是如果使用 NO_DROP CASCADE,则不能删除分区,除非删除分区命令指定了 IGNORE PROTECTION。

Alter Table/Partition Compact

Version information

在 Hive 发行版0.13.0和更高版本中使用transactions时,ALTER TABLE 语句可以请求表或分区的compaction。从 Hive 版本1 .3.0 和 2.1.0开始,到使用transactions时,ALTER TABLE ... COMPACT 语句可以包含TBLPROPERTIES子句,该子句用于更改压缩 MapReduce 作业属性或覆盖任何其他 Hive 表属性。可以找到更多详细信息here

ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
  COMPACT 'compaction_type'[AND WAIT]
  [WITH OVERWRITE TBLPROPERTIES ("property"="value" [, ...])];

通常,使用Hive transactions时不需要请求压缩,因为系统会检测到对它们的需要并启动压缩。但是,如果关闭了表的压缩,或者您想在系统无法选择的时间压缩表,则 ALTER TABLE 可以启动压缩。默认情况下,该语句将排队进行压缩和返回的请求。要查看压缩的进度,请使用SHOW COMPACTIONS。从 Hive 2.2.0开始,可以指定“ AND WAIT”以包含操作块,直到压缩完成为止。

compaction_type 可以是 MAJOR 或 MINOR。有关更多信息,请参见Hive Transactions中的“基本设计”部分。

Alter Table/Partition 串联

Version information

在 Hive 发行版0.8.0中,RCFile 添加了对使用串联命令对小型 RCFile 进行快速块级合并的支持。在 Hive 发行版0.14.0中,添加的 ORC 文件支持使用串联命令对小型 ORC 文件进行快速条带级别合并。

ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;

如果表或分区包含许多小的 RCFiles 或 ORC 文件,则上述命令会将它们合并为更大的文件。对于 RCFile,合并发生在块级别,而对于 ORC 文件,合并发生在条带级别,从而避免了对数据进行解压缩和解码的开销。

更改表/分区更新列

Version information

在 Hive 发行版3.0.0中,添加了此命令,以使用户将 Serde 存储的架构信息同步到 metastore。

ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;

具有自行描述表模式的 Serdes 的表在现实中可能与存储在 Hive Metastore 中的模式不同。例如,当用户使用架构 URL 或架构 Literals 创建 Avro 存储的表时,该架构将被插入 HMS,然后无论在 URL 或 Serde 中 Literals 如何更改,都不会在 HMS 中对其进行更改。特别是在与其他 Apache 组件集成时,这可能会导致问题。

更新列功能为用户提供了一种方法,使在 SERDE 中进行的任何模式更改都可以同步到 HMS。它适用于表和分区级别,并且显然仅适用于 HMS 未跟踪其架构的表(请参阅 metastore.serdes.using.metastore.for.schema)。在这些后面的 Serde 类型上使用命令将导致错误。

Alter Column

列名规则

列名不区分大小写。

Version information

在 Hive 版本 0.12.0 和更早版本中,列名称只能包含字母数字和下划线字符。

在 Hive 版本 0.13.0 和更高版本中,默认情况下可以在反引号(````````'')表示一个反引号字符。可以通过将hive.support.quoted.identifiers设置为none来使用 0.13.0 之前的行为,在这种情况下,反引号会将其解释为正则表达式。有关详细信息,请参见列名称中支持带引号的标识符

反引号可以使列名和表名使用保留关键字。

更改列名称/类型/位置/Comments

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

此命令将允许用户更改列的名称,data type,Comments 或位置,或它们的任意组合。 PARTITION 子句在Hive 0.14.0及更高版本中可用;有关用法,请参见升级 Pre-Hive 0.13.0 小数列。还提供了 Hive 0.13 的补丁(请参见HIVE-7971)。

CASCADE | RESTRICT 子句在Hive 1.1.0中可用。使用 CASCADE 命令更改表更改列可更改表元数据的列,并将相同的更改级联到所有分区元数据。 RESTRICT 是默认设置,仅将列更改限制为表元数据。

Warning

ALTER TABLE CHANGE COLUMN CASCADE 子句将覆盖表分区的列元数据,而不管表或分区的protection mode如何。谨慎使用。

Note

column change 命令将仅修改 Hive 的元数据,而不会修改数据。用户应确保表/分区的实际数据布局符合元数据定义。

Example:

CREATE TABLE test_change (a int, b int, c int);

// First change column a's name to a1.
ALTER TABLE test_change CHANGE a a1 INT;

// Next change column a1's name to a2, its data type to string, and put it after column b.
ALTER TABLE test_change CHANGE a1 a2 STRING AFTER b;
// The new table's structure is:  b int, a2 string, c int.

// Then change column c's name to c1, and put it as the first column.
ALTER TABLE test_change CHANGE c c1 INT FIRST;
// The new table's structure is:  c1 int, b int, a2 string.

// Add a comment to column a1
ALTER TABLE test_change CHANGE a1 a1 INT COMMENT 'this is column a1';

Add/Replace Columns

ALTER TABLE table_name
  [PARTITION partition_spec]                 -- (Note: Hive 0.14.0 and later)
  ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
  [CASCADE|RESTRICT]                         -- (Note: Hive 1.1.0 and later)

使用 ADD COLUMNS,您可以将新列添加到现有列的末尾但在分区列之前。 Avro 支持的表,Hive 0.14及更高版本也支持此功能。

替换列将删除所有现有列,并添加新的列集。这仅适用于具有本机 SerDe(DynamicSerDe,MetadataTypedColumnsetSerDe,LazySimpleSerDe 和 ColumnarSerDe)的表。有关更多信息,请参考Hive SerDe。替换列也可以用于删除列。例如,“ ALTER TABLE test_change REPLACE COLUMNS (a int, b int);”将从 test_change 的架构中删除列“ c”。

PARTITION 子句在Hive 0.14.0及更高版本中可用;有关用法,请参见升级 Pre-Hive 0.13.0 小数列

CASCADE | RESTRICT 子句在Hive 1.1.0中可用。使用 CASCADE 命令使用 ALTER TABLE ADD | REPLACE COLUMNS 更改表的元数据的列,并将相同的更改级联到所有分区元数据。 RESTRICT 是默认设置,仅将列更改限制为表元数据。

Warning

ALTER TABLE ADD 或 REPLACE COLUMNS CASCADE 将覆盖表分区的列元数据,而不管表或分区的protection mode。谨慎使用。

Note

column change 命令将仅修改 Hive 的元数据,而不会修改数据。用户应确保表/分区的实际数据布局符合元数据定义。

部分分区规范

从 Hive 0.14(HIVE-8411)开始,用户可以为某些上述的 alter column 语句提供部分分区规范,类似于动态分区。因此,不必为每个需要更改的分区发出一个 alter column 语句:

ALTER TABLE foo PARTITION (ds='2008-04-08', hr=11) CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);
ALTER TABLE foo PARTITION (ds='2008-04-08', hr=12) CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);
...

...您可以使用带有部分分区规范的单个 ALTER 语句一次更改许多现有分区:

// hive.exec.dynamic.partition needs to be set to true to enable dynamic partitioning with ALTER PARTITION
SET hive.exec.dynamic.partition = true;
 
// This will alter all existing partitions in the table with ds='2008-04-08' -- be sure you know what you are doing!
ALTER TABLE foo PARTITION (ds='2008-04-08', hr) CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);

// This will alter all existing partitions in the table -- be sure you know what you are doing!
ALTER TABLE foo PARTITION (ds, hr) CHANGE COLUMN dec_column_name dec_column_name DECIMAL(38,18);

与动态分区类似,必须将hive.exec.dynamic.partition设置为 true 才能在 ALTER PARTITION 期间使用部分分区规范。以下操作支持此功能:

  • Change column

  • Add column

  • Replace column

  • File Format

  • Serde Properties

Create/Drop/Alter View

Version information

视图支持仅在 Hive 0.6 和更高版本中可用。

Create View

CREATE VIEW [IF NOT EXISTS] [db_name.]view_name [(column_name [COMMENT column_comment], ...) ]
  [COMMENT view_comment]
  [TBLPROPERTIES (property_name = property_value, ...)]
  AS SELECT ...;

CREATE VIEW 创建具有给定名称的视图。如果已经存在相同名称的表或视图,则会引发错误。您可以使用 IF NOT EXISTS 跳过该错误。

如果没有提供列名,则视图的列名将自动从定义的 SELECT 表达式派生。 (如果 SELECT 包含未别名的标量表达式,例如 x y,则将以_C0,_C1 等形式生成结果视图列名称.)重命名列时,还可以选择提供列 Comments。 (Comments 不会自动从基础列继承.)

如果视图的定义 SELECT 表达式无效,则 CREATE VIEW 语句将失败。

请注意,视图是一个纯逻辑对象,没有关联的存储。当查询引用视图时,将评估视图的定义,以生成一组行以供查询进一步处理。 (这是一个概念性描述;实际上,作为查询优化的一部分,Hive 可以将视图的定义与查询结合起来,例如,将查询中的过滤器下推到视图中.)

创建视图时,将冻结视图的架构;对基础表的后续更改(例如添加列)将不会反映在视图的架构中。如果以不兼容的方式删除或更改基础表,则随后查询无效视图的尝试将失败。

视图是只读的,不能用作 LOAD/INSERT/ALTER 的目标。有关更改元数据的信息,请参见ALTER VIEW

一个视图可能包含 ORDER BY 和 LIMIT 子句。如果引用查询还包含这些子句,则在查看子句之后(以及查询中的任何其他操作之后)对查询级子句进行求值。例如,如果视图指定 LIMIT 5,并且引用查询执行为(从 v LIMIT 10 中选择*),那么最多将返回 5 行。

Hive 0.13.0开始,视图的 select 语句可以包含一个或多个通用表表达式(CTE),如SELECT syntax所示。有关 CREATE VIEW 语句中 CTE 的示例,请参见公用表表达式

Example:

CREATE VIEW onion_referrers(url COMMENT 'URL of Referring page')
  COMMENT 'Referrers to The Onion website'
  AS
  SELECT DISTINCT referrer_url
  FROM page_view
  WHERE page_url='http://www.theonion.com';

使用显示创建表显示创建视图的 CREATE VIEW 语句。从 Hive 2.2.0 开始,SHOW VIEWS将显示数据库中的视图列表。

Version Information

最初,视图的文件格式被硬编码为 SequenceFile。 Hive 2.1.0(HIVE-13736)生成的视图使用hive.default.fileformathive.default.fileformat.managed属性遵循与表和索引相同的默认值。

Drop View

DROP VIEW [IF EXISTS] [db_name.]view_name;

DROP VIEW 删除指定视图的元数据。 (在视图上使用 DROP TABLE 是非法的.)

删除由其他视图引用的视图时,不会发出警告(从属视图悬空为无效,必须由用户删除或重新创建)。

在 Hive 0.7.0 或更高版本中,如果视图不存在,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

Example:

DROP VIEW onion_referrers;

更改视图属性

ALTER VIEW [db_name.]view_name SET TBLPROPERTIES table_properties;

table_properties:
  : (property_name = property_value, property_name = property_value, ...)

与 ALTER TABLE 一样,您可以使用此语句将自己的元数据添加到视图中。

将视图更改为选择

Version information

Hive 0.11开始。

ALTER VIEW [db_name.]view_name AS select_statement;

将视图另存为选择会更改视图的定义,该视图必须存在。语法与 CREATE VIEW 相似,其效果与 CREATE 或 REPLACE VIEW 相同。

注意:该视图必须已经存在,并且如果该视图具有分区,则无法将其替换为“选择时更改视图”。

创建/删除/更改实例化视图

Version information

物化视图支持仅在 Hive 3.0 和更高版本中可用。

本节介绍了 Hive 的物化视图语法。可以在here中找到有关 Hive 中的物化视图支持和使用的更多信息。

创建实例化视图

CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db_name.]materialized_view_name
  [DISABLE REWRITE]
  [COMMENT materialized_view_comment]
  [PARTITIONED ON (col_name, ...)]
  [CLUSTERED ON (col_name, ...) | DISTRIBUTED ON (col_name, ...) SORTED ON (col_name, ...)]
  [
    [ROW FORMAT row_format]
    [STORED AS file_format]
      | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (property_name=property_value, ...)]
AS SELECT ...;

CREATE MATERIALIZED VIEW 创建具有给定名称的视图。如果已经存在具有相同名称的表,视图或实例化视图,则会引发错误。您可以使用 IF NOT EXISTS 跳过该错误。

实例化视图的列名称将自动从定义的 SELECT 表达式中派生。

如果视图的定义 SELECT 表达式无效,则 CREATE MATERIALIZED VIEW 语句将失败。

默认情况下,实例化视图已启用,以供查询优化器在创建视图时自动重写。

Version information

从 Hive 3.2.0(HIVE-14493)开始支持 PARTITIONED ON。

Version information

从 Hive 4.0.0(HIVE-18842)开始支持 CLUSTERED/DISTRIBUTED/SORTED ON。

删除实例化视图

DROP MATERIALIZED VIEW [db_name.]materialized_view_name;

DROP MATERIALIZED VIEW 删除此实例化视图的元数据和数据。

更改实例化视图

创建实例化视图后,优化器将能够利用其定义语义来使用实例化视图自动重写传入的查询,从而加快查询的执行速度。

用户可以有选择地启用/禁用实例化视图以进行重写。回想一下,默认情况下,实例化视图已启用,可在创建时进行重写。若要更改该行为,可以使用以下语句:

ALTER MATERIALIZED VIEW [db_name.]materialized_view_name ENABLE|DISABLE REWRITE;

Create/Drop/Alter Index

Version information

从 Hive 0.7 开始。

从 3.0 开始删除索引!见索引设计文件

本节简要介绍了 Hive 索引,在这里对其进行了更全面的介绍:

在 Hive 0.12.0 和更早版本中,对于 CREATE INDEX 和 DROP INDEX 语句,索引名称区分大小写。但是,ALTER INDEX 需要使用小写字母创建的索引名称(请参见HIVE-2752)。通过使所有 HiveQL 语句的索引名称不区分大小写,此错误已在Hive 0.13.0中修复。对于 0.13.0 之前的版本,最佳实践是对所有索引名称使用小写字母。

Create Index

CREATE INDEX index_name
  ON TABLE base_table_name (col_name, ...)
  AS index_type
  [WITH DEFERRED REBUILD]
  [IDXPROPERTIES (property_name=property_value, ...)]
  [IN TABLE index_table_name]
  [
     [ ROW FORMAT ...] STORED AS ...
     | STORED BY ...
  ]
  [LOCATION hdfs_path]
  [TBLPROPERTIES (...)]
  [COMMENT "index comment"];

CREATE INDEX 使用给定的列列表作为键在表上创建索引。请参阅Indexes设计文档中的 CREATE INDEX。

Drop Index

DROP INDEX [IF EXISTS] index_name ON table_name;

DROP INDEX 删除索引以及删除索引表。

在 Hive 0.7.0 或更高版本中,如果不存在索引,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

Alter Index

ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;

ALTER INDEX ... REBUILD 生成使用 WITH WITH DEFERRED REBUILD 子句创建的索引,或重建以前生成的索引。如果指定了 PARTITION,则仅重建该分区。

Create/Drop Macro

Version information

截至Hive 0.12.0.

Bug fixes:

  • Hive1.3.0 和 2.0.0之前,当处理同一行时多次使用 HiveQL 宏时,即使参数不同,Hive 也会为所有调用返回相同的结果。 (请参阅HIVE-11432。)

  • Hive1.3.0 和 2.0.0之前,当处理同一行时使用了多个宏时,ORDER BY 子句可能会给出错误的结果。 (请参阅HIVE-12277。)

  • Hive 2.1.0之前,如果在处理同一行时使用了多个宏,则后一个宏的结果将被第一个宏的结果覆盖。 (请参阅HIVE-13372。)

Hive 0.12.0 在 HiveQL 中引入了宏,在此之前,只能在 Java 中创建宏。

创建临时宏

CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;

CREATE TEMPORARY MACRO 使用给定的可选列列表作为表达式的 Importing 来创建宏。在当前会话的持续时间内存在宏。

Examples:

CREATE TEMPORARY MACRO fixed_number() 42;
CREATE TEMPORARY MACRO string_len_plus_two(x string) length(x) + 2;
CREATE TEMPORARY MACRO simple_add (x int, y int) x + y;

删除临时宏

DROP TEMPORARY MACRO [IF EXISTS] macro_name;

如果该函数不存在,则 DROP TEMPORARY MACRO 会返回错误,除非指定了 IF EXISTS。

Create/Drop/Reload Function

Temporary Functions

创建临时功能

CREATE TEMPORARY FUNCTION function_name AS class_name;

该语句使您可以创建由 class_name 实现的函数。只要会话持续,就可以在 Hive 查询中使用此功能。您可以使用 Hive 的 Classpath 中的任何类。您可以通过执行“ ADD JAR”语句将 jar 添加到 Classpath。请参阅 CLI 部分Hive 交互式 Shell 命令(包括Hive Resources),以获取有关如何从 HiveClasspath 添加/删除文件的更多信息。使用此功能,您可以注册用户定义功能(UDF)。

另请参阅Hive Plugins,以获取有关创建自定义 UDF 的一般信息。

暂挂功能

您可以按以下步骤注销 UDF:

DROP TEMPORARY FUNCTION [IF EXISTS] function_name;

在 Hive 0.7.0 或更高版本中,如果该函数不存在,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

Permanent Functions

在 Hive 0.13 或更高版本中,可以将函数注册到元存储,因此可以在查询中引用它们,而不必在每个会话中都创建临时函数。

Create Function

Version information

从 Hive 0.13.0(HIVE-6047)起。

CREATE FUNCTION [db_name.]function_name AS class_name
  [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];

该语句使您可以创建由 class_name 实现的函数。可以使用 USING 子句指定需要添加到环境中的 jar,文件或 Files;当 Hive 会话首次引用该功能时,这些资源将被添加到环境中,就像发出了ADD JAR/FILE一样。如果 Hive 不在本地模式下,则资源位置必须是 nonlocalURI,例如 HDFS 位置。

该功能将被添加到指定的数据库,或在创建功能时添加到当前数据库。可以通过完全限定函数名称(db_name.function_name)来引用该函数,或者如果该函数位于当前数据库中,则可以不带限定地对其进行引用。

Drop Function

Version information

从 Hive 0.13.0(HIVE-6047)起。

DROP FUNCTION [IF EXISTS] function_name;

如果该函数不存在,则 DROP 返回错误,除非指定了 IF EXISTS 或配置变量hive.exec.drop.ignorenonexistent设置为 true。

Reload Function

Version information

从 Hive 1.2.0(HIVE-2573)开始。

RELOAD (FUNCTIONS|FUNCTION);

HIVE-2573开始,如果在一个 Hive CLI 会话中创建永久功能是在创建功能之前启动的,则这些功能可能不会反映在 HiveServer2 或其他 Hive CLI 会话中。在 HiveServer2 或 HiveCLI 会话中发出 RELOAD FUNCTIONS 将允许它拾取对永久功能的任何更改,而这些更改可能是由其他 HiveCLI 会话完成的。由于向后兼容的原因,RELOAD FUNCTION;也被接受。

创建/删除/授予/撤消角色和权限

Hive 不推荐使用的授权模式/旧版模式具有有关以下 DDL 语句的信息:

对于 Hive 0.13.0 和更高版本中的基于 SQL 标准的授权,请参阅以下 DDL 语句:

Show

这些语句提供了一种查询 Hive 元存储库以获取该 Hive 系统可访问的现有数据和元数据的方法。

Show Databases

SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];

SHOW DATABASES 或 SHOW SCHEMAS 列出了元存储中定义的所有数据库。 SCHEMAS 和 DATABASES 的用法是可互换的–它们意味着同一件事。

可选的 LIKE 子句允许使用正则表达式过滤数据库列表。对于任何字符,正则表达式中的通配符只能是“ *”或“ |”供选择。示例为'employees','emp *','emp * | * ees',所有这些都将匹配名为'employees'的数据库。

Version information: SHOW DATABASES

从 4.0.0 开始,我们仅接受 SQL 类型,例如表达式,其中任何字符都包含'%',而单个字符包含'_'。示例为'employees','emp%','emplo_ees',所有这些都将匹配名为'employees'的数据库。

显示表/视图/材料化视图/分区/索引

Show Tables

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

SHOW TABLES列出了当前数据库(或使用IN子句明确命名的数据库)中的所有基本表和视图,其名称与可选的正则表达式匹配。对于任何字符,正则表达式中的通配符只能是“ *”或“ |”供选择。示例为“ page_view”,“ page_v *”,“ * view | page *”,所有这些都将与“ page_view”表匹配。匹配表按字母 Sequences 列出。如果在 metastore 中没有找到匹配的表,这不是错误。如果未给出正则表达式,则会列出所选数据库中的所有表。

Show Views

Version information

通过HIVE-14558在 Hive 2.2.0 中引入。

SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];

SHOW VIEWS列出当前数据库中的所有视图(或使用INFROM子句明确命名的视图),其名称与可选的正则表达式匹配。对于任何字符,正则表达式中的通配符只能是“ *”或“ |”供选择。示例为“ page_view”,“ page_v *”,“ * view | page *”,所有这些都将与“ page_view”视图匹配。匹配视图按字母 Sequences 列出。如果在 metastore 中找不到匹配的视图,这不是错误。如果未给出正则表达式,则会列出所选数据库中的所有视图。

Examples

SHOW VIEWS;                                -- show all views in the current database
SHOW VIEWS 'test_*';                       -- show all views that start with "test_"
SHOW VIEWS '*view2';                       -- show all views that end in "view2"
SHOW VIEWS LIKE 'test_view1|test_view2';   -- show views named either "test_view1" or "test_view2"
SHOW VIEWS FROM test1;                     -- show views from database test1
SHOW VIEWS IN test1;                       -- show views from database test1 (FROM and IN are same) 
SHOW VIEWS IN test1 "test_*";              -- show views from database test2 that start with "test_"

显示实例化视图

SHOW MATERIALIZED VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];

SHOW MATERIALIZED VIEWS列出当前数据库中的所有视图(或使用INFROM子句明确命名的视图),其名称与可选的正则表达式匹配。它还显示有关实例化视图的其他信息,例如,是否启用重写以及实例化视图的刷新模式。对于任何字符,正则表达式中的通配符只能是“ *”或“ |”供选择。如果未给出正则表达式,则会列出所选数据库中的所有实例化视图。

Show Partitions

SHOW PARTITIONS table_name;

SHOW PARTITIONS 列出了给定基表的所有现有分区。分区按字母 Sequences 列出。

Version information

从 Hive 0.6 开始,SHOW PARTITIONS 可以过滤分区列表,如下所示。

还可以指定分区规范的各个部分以过滤结果列表。

Examples:

SHOW PARTITIONS table_name PARTITION(ds='2010-03-03');            -- (Note: Hive 0.6 and later)
SHOW PARTITIONS table_name PARTITION(hr='12');                    -- (Note: Hive 0.6 and later)
SHOW PARTITIONS table_name PARTITION(ds='2010-03-03', hr='12');   -- (Note: Hive 0.6 and later)

Version information

从 Hive 0.13.0 开始,SHOW PARTITIONS 可以指定数据库(HIVE-5912)。

SHOW PARTITIONS [db_name.]table_name [PARTITION(partition_spec)];   -- (Note: Hive 0.13.0 and later)

Example:

SHOW PARTITIONS databaseFoo.tableBar PARTITION(ds='2010-03-03', hr='12');   -- (Note: Hive 0.13.0 and later)

Version information

从 Hive 4.0.0 开始,SHOW PARTITIONS 可以选择使用 WHERE/ORDER BY/LIMIT 子句来过滤/排序/限制结果列表(HIVE-22458)。这些子句的工作方式与 SELECT 语句中的工作方式类似。

SHOW PARTITIONS [db_name.]table_name [PARTITION(partition_spec)] [WHERE where_condition] [ORDER BY col_list] [LIMIT rows];   -- (Note: Hive 4.0.0 and later)

Example:

SHOW PARTITIONS databaseFoo.tableBar LIMIT 10;                                                               -- (Note: Hive 4.0.0 and later)
SHOW PARTITIONS databaseFoo.tableBar PARTITION(ds='2010-03-03') LIMIT 10;                                    -- (Note: Hive 4.0.0 and later)
SHOW PARTITIONS databaseFoo.tableBar PARTITION(ds='2010-03-03') ORDER BY hr DESC LIMIT 10;                   -- (Note: Hive 4.0.0 and later)
SHOW PARTITIONS databaseFoo.tableBar PARTITION(ds='2010-03-03') WHERE hr >= 10 ORDER BY hr DESC LIMIT 10;    -- (Note: Hive 4.0.0 and later)
SHOW PARTITIONS databaseFoo.tableBar WHERE hr >= 10 AND ds='2010-03-03' ORDER BY hr DESC LIMIT 10;           -- (Note: Hive 4.0.0 and later)

注意:请使用* hr> = 10 而不是 hr-10> = 0 *来过滤结果,因为 Metastore 不会将后者谓词下推到基础存储中。

显示表/分区扩展

SHOW TABLE EXTENDED [IN|FROM database_name] LIKE 'identifier_with_wildcards' [PARTITION(partition_spec)];

SHOW TABLE EXTENDED 将列出与给定正则表达式匹配的所有表的信息。如果存在分区规范,则用户不能将正则表达式用作表名。该命令的输出包括基本表信息和文件系统信息,例如 totalNumberFiles,totalFileSize,maxFileSize,minFileSize,lastAccessTime 和 lastUpdateTime。如果存在分区,它将输出给定分区的文件系统信息,而不是表的文件系统信息。

Example

hive> show table extended like part_table;
OK
tableName:part_table
owner:thejas
location:file:/tmp/warehouse/part_table
inputformat:org.apache.hadoop.mapred.TextInputFormat
outputformat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
columns:struct columns { i32 i}
partitioned:true
partitionColumns:struct partition_columns { string d}
totalNumberFiles:1
totalFileSize:2
maxFileSize:2
minFileSize:2
lastAccessTime:0
lastUpdateTime:1459382233000

显示表格属性

Version information

从 Hive 0.10.0 开始。

SHOW TBLPROPERTIES tblname;
SHOW TBLPROPERTIES tblname("foo");

第一种形式列出了该表的所有表属性,每行一个,由制表符分隔。该命令的第二种形式仅显示所要求属性的值。

有关更多信息,请参见上面的“创建表”中的TBLPROPERTIES clause

显示创建表

Version information

Hive 0.10开始。

SHOW CREATE TABLE ([db_name.]table_name|view_name);

SHOW CREATE TABLE 显示创建给定表的 CREATE TABLE 语句,或创建给定视图的 CREATE VIEW 语句。

Show Indexes

Version information

从 Hive 0.7 开始。

从 3.0 开始删除索引!见索引设计文件

SHOW [FORMATTED] (INDEX|INDEXES) ON table_with_index [(FROM|IN) db_name];

SHOW INDEXES 显示特定列上的所有索引,以及有关它们的信息:索引名称,表名称,用作键的列名称,索引表名称,索引类型和 Comments。如果使用了 FORMATTED 关键字,那么将为每列打印列标题。

Show Columns

Version information

Hive 0.10开始。

SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];

SHOW COLUMNS 显示表中的所有列,包括分区列。

Version information

SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name] [ LIKE'pattern_with_wildcards'];

HIVE-18373在 Hive 3.0 中添加。

SHOW COLUMNS列出表中所有名称与可选正则表达式匹配的列。对于任何字符,正则表达式中的通配符只能是“ *”或“ |”供选择。示例为“ cola”,“ col *”,“ * a | col *”,所有这些都与“ cola”列匹配。匹配列按字母 Sequences 列出。如果在表中找不到匹配的列,这不是错误。如果未提供正则表达式,则会列出所选表中的所有列。

Examples

-- SHOW COLUMNS
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE foo(col1 INT, col2 INT, col3 INT, cola INT, colb INT, colc INT, a INT, b INT, c INT);
 
-- SHOW COLUMNS basic syntax
SHOW COLUMNS FROM foo;                            -- show all column in foo
SHOW COLUMNS FROM foo "*";                        -- show all column in foo
SHOW COLUMNS IN foo "col*";                       -- show columns in foo starting with "col"                 OUTPUT col1,col2,col3,cola,colb,colc
SHOW COLUMNS FROM foo '*c';                       -- show columns in foo ending with "c"                     OUTPUT c,colc
SHOW COLUMNS FROM foo LIKE "col1|cola";           -- show columns in foo either col1 or cola                 OUTPUT col1,cola
SHOW COLUMNS FROM foo FROM test_db LIKE 'col*';   -- show columns in foo starting with "col"                 OUTPUT col1,col2,col3,cola,colb,colc
SHOW COLUMNS IN foo IN test_db LIKE 'col*';       -- show columns in foo starting with "col" (FROM/IN same)  OUTPUT col1,col2,col3,cola,colb,colc

-- Non existing column pattern resulting in no match
SHOW COLUMNS IN foo "nomatch*";
SHOW COLUMNS IN foo "col+";                       -- + wildcard not supported
SHOW COLUMNS IN foo "nomatch";

Show Functions

SHOW FUNCTIONS [LIKE "<pattern>"];

SHOW FUNCTIONS 列出所有用户定义和内置的函数,如果使用 LIKE 指定,则由正则表达式过滤。

显示授予的角色和特权

Hive 不推荐使用的授权模式/旧版模式包含有关以下 SHOW 语句的信息:

在 Hive 0.13.0 和更高版本中,基于 SQL 标准的授权具有以下 SHOW 语句:

Show Locks

SHOW LOCKS <table_name>;
SHOW LOCKS <table_name> EXTENDED;
SHOW LOCKS <table_name> PARTITION (<partition_spec>);
SHOW LOCKS <table_name> PARTITION (<partition_spec>) EXTENDED;
SHOW LOCKS (DATABASE|SCHEMA) database_name;     -- (Note: Hive 0.13.0 and later; SCHEMA added in Hive 0.14.0)

SHOW LOCKS 显示表或分区上的锁。有关锁的信息,请参见Hive 并发模型

Hive 0.13 对于 DATABASE(请参见HIVE-2093)和 Hive 0.14 对于 SCHEMA(请参见HIVE-6601)都支持 SHOW LOCK(DATABASE | SCHEMA)。 SCHEMA 和 DATABASE 是可互换的–它们含义相同。

使用Hive transactions时,SHOW LOCKS 返回此信息(请参阅HIVE-6460):

  • database name

  • table name

  • 分区名称(如果表已分区)

  • 锁所处的状态,可以是:

  • “已获得” –请求者持有锁

    • “正在 await” –请求者正在 await 锁

    • “中止” –锁已超时,但尚未清除

  • 如果此锁处于“正在 await”状态,则锁定此锁的 ID

  • 锁的类型,可以是:

  • “独占” –没有人可以同时持有该锁(主要是通过 DDL 操作(例如放置表)获得的)

    • “ shared_read” –任意数量的其他 shared_read 锁可以同时锁定同一资源(通过读取获得;令人困惑的是,插入操作还获得了 shared_read 锁)

    • “ shared_write” –任意数量的 shared_read 锁可以同时锁定同一资源,但不允许其他任何 shared_write 锁(通过更新和删除获得)

  • 与该锁关联的 Transaction 的 ID(如果有)

  • 上次此锁的持有者发送心跳表明它仍然存在

  • 获取锁的时间(如果已获取)

  • 请求锁定的 Hive 用户

  • 用户正在运行的主机

  • 代理信息–一个字符串,可帮助识别发出锁定请求的实体。对于 SQLClient 端,这是查询 ID,对于流式 Client 端,例如,它可能是风暴螺栓 ID。

Show Conf

Version information

Hive 0.14.0开始。

SHOW CONF <configuration_name>;

SHOW CONF 返回指定的configuration property的描述。

  • default value

  • required type

  • description

请注意,SHOW CONF 不会显示配置属性的“当前值”。对于当前属性设置,请在 CLI 或 HiveQL 脚本(请参见Commands)或 Beeline(请参见直线 Hive 命令)中使用“设置”命令。

Show Transactions

Version information

Hive 0.13.0起(请参阅Hive Transactions)。

SHOW TRANSACTIONS;

SHOW TRANSACTIONS 供 Management 员在使用Hive transactions时使用。它返回系统中所有当前打开和中止的事务的列表,包括以下信息:

  • transaction ID

  • transaction state

  • 开始 Transaction 的用户

  • 开始 Transaction 的机器

  • Transaction 开始的时间戳(自Hive 2.2.0)

  • 最后一次心跳的时间戳(自Hive 2.2.0)

Show Compactions

Version information

Hive 0.13.0起(请参阅Hive Transactions)。

SHOW COMPACTIONS;

SHOW COMPACTIONS返回当前正在使用Hive transactionscompacted或计划进行压缩的所有表和分区的列表,包括以下信息:

  • “ CompactionId”-唯一的内部 ID(自Hive 3.0起)

  • “数据库”-Hive 数据库名称

  • “表格”-表格名称

  • “分区”-分区名称(如果表已分区)

  • “类型”-无论是大压实还是小压实

  • “状态”-压缩所处的状态,可以是:

  • “启动” –在队列中 await 压缩

    • “工作” –被压缩

    • “准备清理” –压缩已经完成,旧文件计划清理

    • “失败” –作业失败。 Metastore 日志将具有更多详细信息。

    • “成功” –好的

    • “尝试” –启动器尝试安排压缩,但失败。 Metastore 日志将具有更多信息。

  • “ Worker”-执行压缩的工作线程的线程 ID(仅在工作状态下)

  • “开始时间”-压实开始的时间(仅在处于工作状态或准备清洁时)

  • “ Duration(ms)”-压缩时间(自Hive 2.2以来)

  • “ HadoopJobId”-提交的 Hadoop 作业的 ID(从Hive 2.2开始)

压缩会自动启动,但也可以使用ALTER TABLE COMPACT 语句手动启动。

Describe

Describe Database

Version information

从 Hive 0.7 开始。

DESCRIBE DATABASE [EXTENDED] db_name;
DESCRIBE SCHEMA [EXTENDED] db_name;     -- (Note: Hive 1.1.0 and later)

DESCRIBE DATABASE 显示数据库的名称,其 Comments(如果已设置 Comments)及其在文件系统上的根位置。 SCHEMA 和 DATABASE 的用法是可互换的–它们意味着同一件事。在 Hive 1.1.0(HIVE-8803)中添加了 DESCRIBE SCHEMA。

EXTENDED 也显示database properties

描述表格/视图/材料化视图/列

describe table/view /物化视图/ column 语法有两种格式,具体取决于是否指定了数据库。

如果未指定数据库,则在点后提供可选的列信息:

DESCRIBE [EXTENDED|FORMATTED]  
  table_name[.col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )* ];
                                        -- (Note: Hive 1.x.x and 0.x.x only. See "Hive 2.0+: New Syntax" below)

如果指定了数据库,则在空格后提供可选的列信息:

DESCRIBE [EXTENDED|FORMATTED]  
  [db_name.]table_name[ col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )* ];
                                        -- (Note: Hive 1.x.x and 0.x.x only. See "Hive 2.0+: New Syntax" below)

DESCRIBE 显示列的列表,包括给定表的分区列。如果指定了 EXTENDED 关键字,则它将以 Thrift 序列化形式显示表的所有元数据。通常,这仅对调试有用,而对一般用途不起作用。如果指定了 FORMATTED 关键字,则它将以表格格式显示元数据。

注意:仅当加载数据时收集了统计信息(请参见新创建的表),并且使用 Hive CLI 代替 ThriftClient 端或 Beeline 时,DESCRIBE EXTENDED 才会显示行数。 HIVE-6285将解决此问题。尽管 ANALYZE TABLE 在数据加载后收集统计信息(请参见Existing Tables),但它当前不提供有关行数的信息。

如果表具有复杂的列,则可以通过指定 table_name.complex_col_name(对于结构元素的 field_name,对于数组元素的'$ elem $',对于 Map 键的'$ key $',以及“ $ value $”代表 Map 价值)。您可以递归指定此参数以浏览复杂的列类型。

对于视图,可以使用 DESCRIBE EXTENDED 或 FORMATTED 来检索视图的定义。提供了两个相关的属性:用户指定的原始视图定义,以及 Hive 在内部使用的扩展定义。

对于实例化视图,DESCRIBE EXTENDED 或 FORMATTED 提供有关是否启用重写以及是否将给定的实例化视图视为针对其所使用的源表中的数据进行自动重写的最新信息。

Version information — partition & non-partition columns

在 Hive 0.10.0 和更早版本中,在显示 DESCRIBE TABLE 的列时,分区列和非分区列之间没有区别。从 Hive 0.12.0 开始,它们分别显示。

在 Hive 0.13.0 和更高版本中,如果需要,可以使用配置参数hive.display.partition.cols.separately使用旧的行为(HIVE-6689)。有关示例,请参见HIVE-6689 修补程序中的测试用例。

Bug fixed in Hive 0.10.0 — database qualifiers

表名称的数据库限定符在 Hive 0.7.0 中引入,但在 DESCRIBE 中被破坏,直到 Hive 0.10.0(HIVE-1977)中的错误修复为止。

Bug fixed in Hive 0.13.0 — quoted identifiers

在 Hive 0.13.0 之前,DESCRIBE 不接受表标识符周围的反引号(+1163+`”([HIVE\-6013](https://issues.apache.org/jira/browse/HIVE-6013))时,将逐字处理反引号内指定的所有标识符。唯一的 exception 是双反引号()表示单个反引号字符。

显示列统计信息

Version information

从 Hive 0.14.0 开始;参见HIVE-7050HIVE-7051。 (ANALYZE TABLE 的 FOR COLUMNS 选项自Hive 0.10.0起可用。)

ANALYZE TABLE * table_name * COLUMNS 的 COMPUTE STATISTICS 将计算指定表中所有列的统计信息(如果表已分区,则计算所有分区的统计信息)。要查看收集的列统计信息,可以使用以下语句:

DESCRIBE FORMATTED [db_name.]table_name column_name;                              -- (Note: Hive 0.14.0 and later)
DESCRIBE FORMATTED [db_name.]table_name column_name PARTITION (partition_spec);   -- (Note: Hive 0.14.0 to 1.x.x)
                                                                                  -- (see "Hive 2.0+: New Syntax" below)

有关 ANALYZE TABLE 命令的更多信息,请参见Hive 中的统计信息:现有表

Describe Partition

describe 分区语法有两种格式,具体取决于是否指定了数据库。

如果未指定数据库,则在点后提供可选的列信息:

DESCRIBE [EXTENDED|FORMATTED] table_name[.column_name] PARTITION partition_spec;
                                        -- (Note: Hive 1.x.x and 0.x.x only. See "Hive 2.0+: New Syntax" below)

如果指定了数据库,则在空格后提供可选的列信息:

DESCRIBE [EXTENDED|FORMATTED] [db_name.]table_name [column_name] PARTITION partition_spec;
                                        -- (Note: Hive 1.x.x and 0.x.x only. See "Hive 2.0+: New Syntax" below)

该语句列出了给定分区的元数据。输出类似于 DESCRIBE table_name 的输出。当前,在准备计划时不使用与特定分区关联的列信息。从 Hive 1.2(HIVE-10307)开始,当hive.typecheck.on.insert设置为 true(默认值)时,* partition_spec *中指定的分区列值将进行类型验证,转换并归一化为其列类型。这些值可以是数字 Literals。

Example:

hive> show partitions part_table;
OK
d=abc

hive> DESCRIBE extended part_table partition (d='abc');
OK
i                       int                                         
d                       string                                      
                 
# Partition Information          
# col_name              data_type               comment             
                 
d                       string                                      
                 
Detailed Partition Information  Partition(values:[abc], dbName:default, tableName:part_table, createTime:1459382234, lastAccessTime:0, sd:StorageDescriptor(cols:[FieldSchema(name:i, type:int, comment:null), FieldSchema(name:d, type:string, comment:null)], location:file:/tmp/warehouse/part_table/d=abc, 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:{serialization.format=1}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), parameters:{numFiles=1, COLUMN_STATS_ACCURATE=true, transient_lastDdlTime=1459382234, numRows=1, totalSize=2, rawDataSize=1})   
Time taken: 0.325 seconds, Fetched: 9 row(s)

hive> DESCRIBE formatted part_table partition (d='abc');
OK
# col_name              data_type               comment             
                 
i                       int                                         
                 
# Partition Information          
# col_name              data_type               comment             
                 
d                       string                                      
                 
# Detailed Partition Information                 
Partition Value:        [abc]                    
Database:               default                  
Table:                  part_table               
CreateTime:             Wed Mar 30 16:57:14 PDT 2016     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Location:               file:/tmp/warehouse/part_table/d=abc     
Partition Parameters:            
        COLUMN_STATS_ACCURATE   true                
        numFiles                1                   
        numRows                 1                   
        rawDataSize             1                   
        totalSize               2                   
        transient_lastDdlTime   1459382234          
                 
# Storage Information            
SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe       
InputFormat:            org.apache.hadoop.mapred.TextInputFormat         
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat       
Compressed:             No                       
Num Buckets:            -1                       
Bucket Columns:         []                       
Sort Columns:           []                       
Storage Desc Params:             
        serialization.format    1                   
Time taken: 0.334 seconds, Fetched: 35 row(s)

Hive 2.0:语法更改

Hive 2.0+: New syntax

在 Hive 2.0 及更高版本中,describe table 命令的语法更改向后不兼容。有关详情,请参见HIVE-12184

DESCRIBE [EXTENDED | FORMATTED]
    [db_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem$'] | [.'$key$'] | [.'$value$'] )* ];

警告:新语法可能会破坏当前脚本。

  • 它不再接受 DOT 分隔的 table_name 和 column_name。它们必须以空格分隔。 DB 和 TABLENAME 是 DOT 分隔的。 column_name 仍然可以包含复杂数据类型的 DOT。

  • 可选的 partition_spec 必须出现在 table_name 之后,但在可选的 column_name 之前。在以前的语法中,column_name 出现在 table_name 和 partition_spec 之间。

Examples:

DESCRIBE FORMATTED default.src_table PARTITION (part_col = 100) columnA;
DESCRIBE default.src_thrift lintString.$elem$.myint;

Abort

Abort Transactions

Version information

ABORT TRANSACTIONS transactionID [ transactionID ...];

ABORT TRANSACTIONS 从 Hive 元存储库中清除指定的事务 ID,以便用户无需直接与该元存储库进行交互即可删除悬空或失败的事务。在 Hive 1.3.0 和 2.1.0(HIVE-12634)中添加了 ABORT TRANSACTIONS。

Example:

ABORT TRANSACTIONS 0000007 0000008 0000010 0000015;

该命令可以与SHOW TRANSACTIONS一起使用。后者可以帮助找出要清除的候选事务 ID。

可以在Scheduled Queries页上找到文档。

HCatalog 和 WebHCat DDL

有关 HCatalog 和 WebHCat 中 DDL 的信息,请参阅: