目錄
- 一铃将、概述
- 二项鬼、關(guān)鍵詞,非保留關(guān)鍵字和保留關(guān)鍵字
- 三劲阎、創(chuàng)建/刪除/修改/使用數(shù)據(jù)庫
- 四、創(chuàng)建/刪除/截?cái)啾?/a>
- 五于毙、創(chuàng)建/刪除/更改視圖
- 六匿级、創(chuàng)建/刪除/ ALTER INDEX
- 七捌朴、創(chuàng)建/刪除宏
- 八砂蔽、創(chuàng)建/刪除/重新裝載函數(shù)
- 九、創(chuàng)建/刪除/授予/撤銷角色和權(quán)限
- 十稻爬、顯示
- 十一、 描述
- 十二、 終止事務(wù)
正文
Hive DDL(數(shù)據(jù)定義語言)
Confluence Administrator創(chuàng)建, Janaki Lahorani修改于 2018年9月19日
原文鏈接
翻譯:Google Google翻譯蜂嗽,金山軟件 金山詞霸
校對(duì):南大通用 范振勇 (2018.9.26)
一苗膝、概述
這里是HiveQL DDL語句的文檔,其中包括:
CREATE 數(shù)據(jù)庫/SCHEMA植旧,表辱揭,視圖,函數(shù)病附,索引
DROP 數(shù)據(jù)庫/SCHEMA问窃,表,視圖完沪,索引
TRUNCATE表
ALTER 數(shù)據(jù)庫/SCHEMA域庇,表,視圖
MSCK REPAIR TABLE(或ALTER TABLE RECOVER PARTITIONS)
SHOW 數(shù)據(jù)庫/SCHEMA覆积,表听皿,表屬性,視圖宽档,分區(qū)尉姨,函數(shù),索引 [ES]吗冤,列又厉,創(chuàng)建表語句
DESCRIBE 數(shù)據(jù)庫/SCHEMA,表 視圖
PARTITION語句通常是TABLE語句的選項(xiàng)椎瘟,除了SHOW分區(qū)覆致。
二、關(guān)鍵詞肺蔚,非保留關(guān)鍵字和保留關(guān)鍵字
表格 1 關(guān)鍵詞煌妈,非保留關(guān)鍵字和保留關(guān)鍵字
Hive版本 | 非保留關(guān)鍵字 | 保留關(guān)鍵字 |
---|---|---|
1.2.0 | ADD, 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, YEAR | ALL, 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 |
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 |
版本信息
REGEXP
和RLIKE
在Hive2.0.0
之前是非保留關(guān)鍵字,從Hive2.0.0
開始是保留關(guān)鍵字宣羊。
按照“支持帶引號(hào)的列名”声旺,可以將保留關(guān)鍵字使用引號(hào)包圍以便允許將其作為標(biāo)識(shí)符。為了減少在語法歧義段只,大部分的關(guān)鍵字是保留關(guān)鍵字(1.2.0
版本及更高版本)腮猖。
如果用戶仍想使用這些保留的關(guān)鍵字作為標(biāo)識(shí)符,有如下兩種方式:
1)赞枕、使用帶引號(hào)的標(biāo)識(shí)符澈缺;
2)、設(shè)置hive.support.sql11.reserved.keywords =false
炕婶。(版本2.1.0
及更早版本)
三姐赡、創(chuàng)建/刪除/修改/使用數(shù)據(jù)庫
3.1、 創(chuàng)建數(shù)據(jù)庫
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment]
[LOCATION hdfs_path]
[WITH DBPROPERTIES (property_name=property_value, ...)];
SCHEMA和DATABASE的用途是可以互換的,他們的含義相同柠掂。
CREATE DATABASE在Hive0.6加入的(HIVE-675)项滑。
WITH DBPROPERTIES子句是在Hive0.7加入的(HIVE-1836)。
3.2涯贞、 刪除數(shù)據(jù)庫<span id = "_label1" />
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
SCHEMA和DATABASE的用途是可以互換的,他們的含義相同枪狂。
在Hive0.6加入DROP DATABASE (HIVE-675)危喉。
默認(rèn)行為是RESTRICT,其中如果數(shù)據(jù)庫不是空的DROP DATABASE將失敗州疾。要?jiǎng)h除包含表的數(shù)據(jù)庫辜限,需要使用DROP DATABASE ... CASCADE。在Hive0.8開始支持RESTRICT和CASCADE严蓖。
3.3薄嫡、 修改數(shù)據(jù)庫
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
SCHEMA和DATABASE的用途是可以互換的,他們的含義相同。ALTER SCHEMA在Hive0.14加入(HIVE-6601)颗胡。
在ALTER DATABASE ... SET LOCATION語句并不將數(shù)據(jù)庫的當(dāng)前目錄中的內(nèi)容移到新指定的位置毫深。它不改變指定的數(shù)據(jù)庫下的所有表/分區(qū)相關(guān)聯(lián)的位置。它只是修改了即將添加到這個(gè)數(shù)據(jù)庫中的新表的默認(rèn)父目錄毒姨。此行為是類似于修改表目錄而不移動(dòng)現(xiàn)有的分區(qū)到另外的位置哑蔫。
數(shù)據(jù)庫中其他元數(shù)據(jù)是不可以修改的。
3.4手素、 使用數(shù)據(jù)庫
USE database_name; USE DEFAULT;
USE設(shè)置接下來所有HiveQL語句的當(dāng)前數(shù)據(jù)庫鸳址。要還原到默認(rèn)的數(shù)據(jù)庫,使用關(guān)鍵字“ default”泉懦,而不是數(shù)據(jù)庫名稱稿黍。
取得當(dāng)前正在使用的數(shù)據(jù)庫:SELECT current_database()(從Hive0.13.0)。
USE database_name在Hive0.6中加入(HIVE-675)崩哩。
四巡球、創(chuàng)建/刪除/清空表
4.1、 創(chuàng)建表
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(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, ...)]
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 (...)]] [LOCATION hdfs_path]
[TBLPROPERTIES (property_name=property_value, ...)]
[AS select_statement]; 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
primitive_type
: TINYINT
| SMALLINT
| INT
| BIGINT
| BOOLEAN | FLOAT
| DOUBLE
| DOUBLE PRECISION
| STRING | BINARY
| TIMESTAMP
| DECIMAL
| DECIMAL(precision, scale) | DATE | VARCHAR
| CHAR 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, ... > row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char]
| 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 | ORC | PARQUET | AVRO | JSONFILE -- (Note: Available in Hive 4.0.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 TABLE根據(jù)給定名稱創(chuàng)建表邓嘹。如果已經(jīng)存在一個(gè)具有相同名稱的表或視圖酣栈,則會(huì)引發(fā)錯(cuò)誤。您可以使用IF NOT EXISTS跳過錯(cuò)誤汹押。
- 表名和列名不區(qū)分大小寫矿筝,但SERDE和屬性名稱是區(qū)分大小寫的。
- 在Hive0.12和更早的版本中棚贾,表名和列名只允許由字母數(shù)字和下劃線組成窖维。
- 在Hive0.13之后,列名可以包含任何的Unicode字符(見HIVE-6013)妙痹,然而铸史,點(diǎn)和冒號(hào)( :)上查詢時(shí)會(huì)產(chǎn)生錯(cuò)誤,所以它們?cè)贖ive1.2.0是不允許的(見HIVE-10120)怯伊。用反引號(hào)內(nèi)指定的任何列名都按字面處理琳轿。在反引號(hào)字符串中,用雙反引號(hào)(``)來表示一個(gè)反引號(hào)字符。反引號(hào)也使得表和列標(biāo)識(shí)符可使用保留關(guān)鍵字崭篡。
- 要恢復(fù)到0.13.0之前的模式挪哄,即列名為字符和下劃線字符,需要設(shè)置配置屬性hive.support.quoted.identifiers為none媚送。在這種配置中中燥,反引號(hào)名成被解釋為正則表達(dá)式寇甸。有關(guān)詳細(xì)信息塘偎,請(qǐng)參閱在列名中支持帶引號(hào)的標(biāo)識(shí)符。
- 表和列注釋字符串(單引號(hào))拿霉。
- 創(chuàng)建時(shí)沒有External 子句的表被稱為托管表吟秩,因?yàn)镠ive管理其數(shù)據(jù)。要判斷一個(gè)表托管表還是外部表绽淘,執(zhí)行 DESCRIBE EXTENDED表名即可輸出表的類型涵防。
-
TBLPROPERTIES
子句允許你用鍵/值對(duì)定義自己的元數(shù)據(jù)。一些預(yù)定義的表屬性也是如此沪铭,如last_modified_user和last_modified_time就由Hive自動(dòng)添加和管理壮池。其他預(yù)定義的表屬性包括:- TBLPROPERTIES ("comment"="table_comment")
- TBLPROPERTIES ("hbase.table.name"="table_name") – 見集成HBASE.
- TBLPROPERTIES ("immutable"="true") 或("immutable"="false")– 見通過查詢查插入數(shù)據(jù)到Hive表.
- TBLPROPERTIES ("orc.compress"="ZLIB") 或("orc.compress"="SNAPPY") 或 ("orc.compress"="NONE") 和其他ORC屬性– 見ORC文件.
- TBLPROPERTIES ("transactional"="true")或 ("transactional"="false")– 見Hive事務(wù).
- TBLPROPERTIES ("NO_AUTO_COMPACTION"="true") 或 ("NO_AUTO_COMPACTION"="false"), 缺省是 "false" – 見Hive事務(wù).
- TBLPROPERTIES ("compactor.mapreduce.map.memory.mb"="mapper_memory") – 見Hive事務(wù).
- TBLPROPERTIES ("compactorthreshold.hive.compactor.delta.num.threshold"="threshold_num") –見Hive事務(wù).
- TBLPROPERTIES ("compactorthreshold.hive.compactor.delta.pct.threshold"="threshold_pct") – 見Hive事務(wù).
- TBLPROPERTIES ("auto.purge"="true") 或 ("auto.purge"="false") – 見刪除表、刪除分區(qū)杀怠、截?cái)啾砗透采w式插入數(shù)據(jù).
- TBLPROPERTIES ("EXTERNAL"="TRUE")–修改托管表為外部表椰憋,反之亦然為“FALSE”.
- 在Hive2.4.0中(HIVE-16324)屬性“EXTERNAL”的值被解析為布爾型(不區(qū)分大小寫的true或false),而不是比較時(shí)區(qū)分大小寫字符串赔退。
- 要指定表的數(shù)據(jù)庫橙依,或者在CREATE TABLE語句之前調(diào)用USE數(shù)據(jù)庫名稱,或者在CREATE TABLE語句之內(nèi)指明數(shù)據(jù)庫名稱(如database_name.table.name)硕旗。
關(guān)鍵字“ default”可用于默認(rèn)的數(shù)據(jù)庫窗骑。
請(qǐng)參閱下面的ALTER TABLE有關(guān)表注釋,表屬性漆枚,SERDE屬性的詳細(xì)信息创译。
請(qǐng)參見Hive類型系統(tǒng)和Hive數(shù)據(jù)類型中有關(guān)原生數(shù)據(jù)類型和復(fù)雜數(shù)據(jù)類型的詳細(xì)信息。
4.1.1墙基、 托管表和外部表
缺省情況下软族,Hive創(chuàng)建托管表,其中的文件碘橘,元數(shù)據(jù)和統(tǒng)計(jì)信息由Hive進(jìn)程內(nèi)部管理互订。一個(gè)托管表存儲(chǔ)在hive.metastore.warehouse.dir.path屬性指定的目錄下,默認(rèn)情況下痘拆,文件夾路徑類似/user/hive/warehouse/databasename.db/tablename/仰禽。默認(rèn)位置可以在創(chuàng)建表的過程中通過重寫location屬性修改。如果一個(gè)托管表或分區(qū)被刪除,與該表或分區(qū)相關(guān)聯(lián)的數(shù)據(jù)和元數(shù)據(jù)都被刪除吐葵。如果未指定PURGE選項(xiàng)规揪,則數(shù)據(jù)被移動(dòng)到垃圾文件夾,再保留事先定義的一段時(shí)間温峭。
當(dāng)Hive負(fù)責(zé)托管表的生命周期或生成臨時(shí)表時(shí)猛铅,就使用托管表。
外部表描述了外部文件的元數(shù)據(jù)/Schema凤藏。外部表文件可以由Hive之外的進(jìn)程訪問和處理奸忽。外部表可以訪問存儲(chǔ)在外的數(shù)據(jù)源,例如Azure存儲(chǔ)卷(ASV)或遠(yuǎn)程HDFS位置的數(shù)據(jù)揖庄。當(dāng)外部表的結(jié)構(gòu)或分區(qū)被改變時(shí)栗菜,可用MSCK REPAIR TABLE TABLE_NAME語句刷新元數(shù)據(jù)信息。
當(dāng)外部表的文件已經(jīng)存在或位于遠(yuǎn)程位置時(shí)蹄梢,即使刪除了該表疙筹,文件也會(huì)保留。
托管表或外部表可以使用DESCRIBE FORMATTED TABLE_NAME命令識(shí)別禁炒,該命令將根據(jù)表類型顯示MANAGED_TABLE或EXTERNAL_TABLE而咆。
統(tǒng)計(jì)數(shù)據(jù)可以用于內(nèi)部表、外部表和分區(qū)的查詢優(yōu)化幕袱。
4.1.2暴备、 存儲(chǔ)格式
Hive支持內(nèi)置和定制開發(fā)的文件格式。見CompressedStorage 關(guān)于壓縮表存儲(chǔ)的詳細(xì)說明凹蜂。
下面是一些內(nèi)置Hive格式:
存儲(chǔ)格式 | 描述 |
---|---|
STORED AS TEXTFILE | 保存為純文本文件馍驯。TEXTFILE 是默認(rèn)的文件格式,除非配置參數(shù)hive.default.fileformat 有其他的設(shè)置玛痊。</br>使用DELIMITED 子句來分隔文件汰瘫;</br>允許使用轉(zhuǎn)義為分隔符的ESCAPED BY 子句(如ESCAPED BY ''),</br>如果你的數(shù)據(jù)中包含分隔符擂煞,就需要用轉(zhuǎn)義符進(jìn)行轉(zhuǎn)義混弥。</br>可自定義NULL 格式对省,由 “NULL DEFINED AS”子句指定(默認(rèn)為'\N' )蝗拿。 |
STORED AS SEQUENCEFILE | 存儲(chǔ)為壓縮的序列文件 |
STORED AS ORC | 存儲(chǔ)為ORC文件格式。支持ACID事務(wù)和基于成本的優(yōu)化器(CBO)蒿涎。采用列存格式存儲(chǔ)數(shù)據(jù)哀托。 |
STORED AS PARQUET | 在Hive0.13.0 和更高版本中,STORED AS PARQUET 保存為PARQUET列存格式劳秋。</br>在Hive0.10 仓手,0.11 胖齐,0.12 中使用ROW FORMAT SERDE ...STORE AS INPUTFORMAT ... OUTPUTFORMAT 語法... 。 |
STORED AS AVRO | 存儲(chǔ)為Avro 的格式 |
STORED AS RCFILE | 存儲(chǔ)RCFILE 格式 |
STORED AS JSONFILE | 存儲(chǔ)為JSON 文件格式(Hive4.0.0 以后) |
STORED BY | 由非本地表的格式存儲(chǔ)嗽冒。要?jiǎng)?chuàng)建或鏈接到一個(gè)非本地表呀伙,例如通過支持一個(gè)表的HBase 或Druid 或Accumulo 。</br>見StorageHandlers 中有關(guān)此選項(xiàng)的更多信息添坊。 |
INPUTFORMAT and OUTPUTFORMAT | 在file_format子句中剿另,用一個(gè)字符串指定相應(yīng)的InputFormat 和OutputFormat 類名。例如贬蛙,'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat' 雨女。</br>對(duì)于LZO壓縮,要使用的值是</br>'INPUTFORMAT “com.hadoop.mapred.DeprecatedLzoTextInputFormat” </br>OUTPUTFORMAT “ org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat”' (見LZO壓縮)速客。 |
4.1.3戚篙、 行格式與SERDE
您可以在創(chuàng)建表時(shí)使用自定義SERDE
或內(nèi)置的SERDE
五鲫。如果未指定ROW FORMAT
或用ROW FORMAT DELIMITED
指定溺职,則采用內(nèi)置SERDE。
使用SERDE
子句創(chuàng)建自定義SERDE
的表位喂。有關(guān)SerDes
的更多信息浪耘,請(qǐng)參見:
Hive SerDe
SerDe
HCatalog
存儲(chǔ)格式
必須為使用本機(jī)Serde的表指定列表,有關(guān)允許的列類型塑崖,請(qǐng)參閱“用戶指南”中的“類型”部分七冲。
可以為使用自定義SerDe的表指定列表,但Hive將查詢Serde以確定該表的實(shí)際列表规婆。
有關(guān)SerDes的一般信息澜躺,請(qǐng)參閱開發(fā)人員指南中的HiveSerDe。有關(guān)輸入和輸出處理的詳細(xì)信息抒蚜,請(qǐng)參見Serde掘鄙。
要修改表的SERDE或SERDEPROPERTIES,參考下面ALTER TABLE語句中添加SERDE屬性的描述嗡髓。
行格式 | 描述 |
---|---|
正則表達(dá)式</br>ROW FORMAT SERDE</br>'org.apache.hadoop.hive.serde2.RegexSerDe'</br>WITH SERDEPROPERTIES</br>(</br>“input.regex”= “<正則表達(dá)式>”</br>)</br>STORED AS TEXTFILE; | 保存為純文本文件操漠,通過正則表達(dá)式轉(zhuǎn)換。</br>下面的示例定義了Apache缺省博客格式的表饿这。</br>CREATE TABLE apachelog ( </br> host STRING, </br> identity STRING, </br> user STRING, </br> time STRING, </br> request STRING, </br> status STRING, </br> size STRING, </br> referer STRING, </br> agent STRING) </br> ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' </br>WITH SERDEPROPERTIES ( </br> "input.regex" = "([^]\*) ([^]\*) ([^]\*) (-|\\[^\\]\*\\]) ([^ \"]\*|\"[^\"]\*\") (-|[0-9]\*) (-|[0-9]\*)(?: ([^ \"]\*|\".\*\") ([^ \"]\*|\".\*\"))?" </br>STORED AS TEXTFILE; </br>更多RegexSerDe 的信息參見HIVE-662和HIVE-1719浊伙。 |
JSON ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE | 存儲(chǔ)為JSON格式的純文本文件。</br> 提供JSON支持的JsonSerDe在Hive0.12及更高版本中支持长捧。</br> 在一些發(fā)布版中嚣鄙,需要添加Hivehcatalog-core.jar的引用。</br> ADD JAR /usr/lib/hive-hcatalog/lib/hive-hcatalog-core.jar; </br></br> CREATE TABLE my_table(a string, b bigint, ...) </br> ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' </br> STORED AS TEXTFILE; </br></br> 該JsonSerDe 是被從HCatalog移動(dòng)到Hive的串结,在它成為Hive contrib項(xiàng)目之前哑子。它由HIVE-4895添加Hive發(fā)布版诈唬。</br>在0.12.0版本之前,可以使用亞馬遜發(fā)布的SERDE 多望, s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar 确徙。</br></br> 從Hive3.0.0開始,JsonSerDe被添加到Hive SERDE中“org.apache.hadoop.hive.serde2.JsonSerDe” (HIVE-19211)烦却。</br> CREATE TABLE my_table(a string, b bigint, ...) </br> ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe' </br> STORED AS TEXTFILE; </br></br> 或者從Hive4.0.0開始支持STORED AS JSONFILE(HIVE-19899)宠叼,這樣你就可以如下創(chuàng)建表:</br>CREATE TABLE my_table(a string, b bigint, ...) STORED AS JSONFILE;
|
CSV/TSV ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS TEXTFILE | 存儲(chǔ)為CSV / TSV格式的純文本文件。</br></br>該CSVSerde是在Hive0.14和以后版本是可用的其爵。</br>下面的示例創(chuàng)建一個(gè)TSV(制表符分隔)文件冒冬。</br></br> CREATE TABLE my_table(a string, b string, ...) </br> ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' </br> WITH SERDEPROPERTIES ( </br> "separatorChar" = "\t", </br> "quoteChar" = "'", </br> "escapeChar" = "\\" </br>) </br> STORED AS TEXTFILE; </br> 對(duì)于SERDE默認(rèn)屬性是逗號(hào)分隔(CSV)文件</br></br> DEFAULT_ESCAPE_CHARACTER \ </br> DEFAULT_QUOTE_CHARACTER " </br> DEFAULT_SEPARATOR , </br> 這SERDE適用于大多數(shù)CSV數(shù)據(jù),但不處理嵌入換行符摩渺。要使用SERDE简烤,指定完整類名org.apache.hadoop.hive.serde2.OpenCSVSerde 。文檔是基于原始規(guī)范文件 https://github.com/ogrodnek/csv-serde摇幻。</br></br> 限制</br> 此Serde將所有列視為String類型横侦。即使使用該SerDe創(chuàng)建具有非字符串列類型的表,DESCRIBE TABLE的輸出也會(huì)顯示字符串列類型绰姻。類型信息將從Serde檢索枉侧。</br> 要將列轉(zhuǎn)換為表中所需的類型,可以在表上創(chuàng)建一個(gè)視圖來執(zhí)行CAST轉(zhuǎn)換為所需的類型狂芋。</br> CSV SerDe 基于 https://github.com/ogrodnek/csv-serde 榨馁,并添加到包含hive-7777中的Hive 發(fā)布中。CSVSerde 已經(jīng)在Hive 0.14 及更高版本上構(gòu)建和測試帜矾,并且使用了OpenCSV2.3翼虫,它與Hive捆綁在一起發(fā)布。</br></br>有關(guān)SerDes 的一般信息屡萤,請(qǐng)參閱開發(fā)指南中的Hive SerDe 珍剑。有關(guān)輸入和輸出處理的詳細(xì)信息,請(qǐng)參見Serde灭衷。 |
4.1.4次慢、分區(qū)表
分區(qū)表可以使用PARTITIONED BY
子句來創(chuàng)建。一個(gè)表可以有一個(gè)或多個(gè)分區(qū)列翔曲,分區(qū)列的每個(gè)不同值組合被創(chuàng)建一個(gè)單獨(dú)的數(shù)據(jù)目錄迫像。此外,可以使用CLUSTERED BY
列對(duì)表或分區(qū)進(jìn)行存儲(chǔ)瞳遍,并且可以通過SORT BY
列在該存儲(chǔ)桶中對(duì)數(shù)據(jù)進(jìn)行排序闻妓。這可以提高某些類型查詢的性能。
如果在創(chuàng)建分區(qū)表時(shí)掠械,您得到了這樣的錯(cuò)誤:“Failure:Error in SemanticAnalysis:列在分區(qū)列中重復(fù)出現(xiàn)”由缆,這意味著您試圖將已分區(qū)的列包含在表本身的數(shù)據(jù)中注祖。您可能確實(shí)已經(jīng)定義了列。但是均唉,您創(chuàng)建的分區(qū)時(shí)產(chǎn)生了一個(gè)偽列是晨,您可以對(duì)其進(jìn)行查詢,因此您必須將表的已有列重命名為其他內(nèi)容(用戶不應(yīng)該對(duì)其進(jìn)行查詢舔箭!)罩缴。
例如,假設(shè)您的原始未分區(qū)表有三列:ID
层扶,date
和name
箫章。
例:
id int,
date date,
name varchar
現(xiàn)在你想根據(jù)date
分區(qū)。您的Hive
定義可以使用“dtDontQuery”
作為列名镜会,這樣“date”
可用于分區(qū)(和查詢)檬寂。
例:
create table table_name (
id int,
dtDontQuery string,
name string
)
partitioned by (date string)
現(xiàn)在,您的用戶仍然在查詢“ where date = '...'”
但第二列dtDontQuery
將保持原來的值戳表。
下面是一個(gè)例子語句來創(chuàng)建分區(qū)表:
例:
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;
上面的語句創(chuàng)建了具有viewTime
桶至、userid
、page_url
扒袖、referrer_url
和ip
列(包括注釋)的page_view
表塞茅。還對(duì)表進(jìn)行分區(qū),并將數(shù)據(jù)存儲(chǔ)在序列文件中季率。文件中的數(shù)據(jù)格式被假定為由ctrl-A
分隔的字段和由換行符分隔的行。
例:
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;
上面的語句為您創(chuàng)建與前一個(gè)表相同的表描沟。
在前面的示例中飒泻,數(shù)據(jù)存儲(chǔ)在<hive.metastore.warehouse.dir>/page_view
中。在Hive配置文件hive-site.xml
中為hive.metastore.warehouse.dir指定一個(gè)值吏廉。
4.1.5泞遗、 外部表
EXTERNAL
關(guān)鍵字允許您創(chuàng)建一個(gè)表并提供一個(gè)位置,這樣Hive就不會(huì)對(duì)此表使用默認(rèn)位置席覆。如果您已經(jīng)生成了數(shù)據(jù)史辙,這是很有用的。刪除外部表時(shí)佩伤,表中的數(shù)據(jù)不會(huì)從文件系統(tǒng)中刪除聊倔。
外部表指向用于其存儲(chǔ)的任何HDFS位置,無需存儲(chǔ)在配置屬性hive.asionore.warehouse.dir
指定的文件夾中生巡。
例:
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>';
您可以使用上面的語句創(chuàng)建一個(gè)page_view
表耙蔑,該表指向用于存儲(chǔ)的任何HDFS位置。但是孤荣,您仍然必須確保數(shù)據(jù)按照上面CREATE語句中指定的分隔符甸陌。
有關(guān)創(chuàng)建外部表的另一個(gè)示例须揣,請(qǐng)參見本教程中的加載數(shù)據(jù)部分。
4.1.6钱豁、 CREATE TABLE AS SELECT(CTAS)
表也可以通過一個(gè)CREATE-TABLE-AS-SELECT(CTAS)
語句中的查詢結(jié)果來創(chuàng)建和填充耻卡。CTAS
創(chuàng)建的表是原子的,這意味著在填充所有查詢結(jié)果之前牲尺,其他用戶不會(huì)看到該表劲赠。因此,其他用戶要么會(huì)看到具有完整查詢結(jié)果的表秸谢,要么根本不會(huì)看到該表凛澎。
CTAS
中有兩個(gè)部分,SELECT
部分可以是HiveQL支持的任意SELECT
語句估蹄。CTAS
的CREATE
部分從SELECT
部分獲取結(jié)果模式塑煎,并使用其他的表屬性(如Serde
和存儲(chǔ)格式)創(chuàng)建目標(biāo)表。
CTAS
有以下限制:
- 目標(biāo)表不能是分區(qū)表臭蚁。
- 目標(biāo)表不能是外部表最铁。
- 目標(biāo)表不能是列表桶表。
例:
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語句的結(jié)果派生的模式(new_key Double垮兑,key_value_pair String)來創(chuàng)建目標(biāo)表new_key_value_store冷尉。如果SELECT語句沒有指定列別名,列名將自動(dòng)分配給_col0系枪、_col1和_col2等雀哨。此外,新目標(biāo)表使用與SELECT語句中源表無關(guān)的特定SerDe和存儲(chǔ)格式私爷,雾棺。
從Hive 0.13.0開始,SELECT語句可以包含一個(gè)或多個(gè)公共表達(dá)式(CTE)衬浑,如SELECT語法所示捌浩。有關(guān)示例,請(qǐng)參見公共表達(dá)式工秩。
能夠從一個(gè)表選擇數(shù)據(jù)到另一個(gè)表是Hive最強(qiáng)大的特性之一尸饺。在執(zhí)行查詢時(shí),Hive處理從源格式到目標(biāo)格式的數(shù)據(jù)轉(zhuǎn)換助币。
4.1.7浪听、 CREATE TABLE LIKE
CREATE TABLE的LIKE形式允許您準(zhǔn)確地復(fù)制現(xiàn)有的表定義(而不復(fù)制其數(shù)據(jù))。與CTAS不同奠支,下面的語句創(chuàng)建了一個(gè)新的empty_key_value_store表馋辈,其定義在表名以外的所有細(xì)節(jié)中都與現(xiàn)有的key_value_store完全匹配。新表不包含任何行倍谜。
CREATE TABLE empty_key_value_store LIKE key_value_store [TBLPROPERTIES (property_name=property_value, ...)];
Hive0.8.0之前迈螟,CREATE TABLE LIKE VIEW_NAME將使視圖的副本叉抡。在Hive0.8.0和以后的版本中,使用用于SERDE和文件格式的默認(rèn)CREATE TABLE LIKE VIEW_NAME通過采用VIEW_NAME(字段和分區(qū)列)的模式創(chuàng)建一個(gè)表答毫。
在Hive0.8.0之前褥民,CREATE TABLE LIKE view_name將生成視圖的副本。在Hive0.8.0和更高版本中洗搂,CREATE TABLE VIEW_NAME通過使用缺省設(shè)置的Serde和文件格式消返,根據(jù)view_name的Sechma(字段和分區(qū)列)來創(chuàng)建一個(gè)表。
4.1.8耘拇、 排序分桶表
例:
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表是按用戶ID進(jìn)行分桶的,并且在每個(gè)桶中惫叛,數(shù)據(jù)按照viewTime升序排序倡勇。這樣的組織允許用戶對(duì)集群列執(zhí)行有效的抽樣-在本例中是userid。排序?qū)傩栽试S內(nèi)部操作符在評(píng)估查詢時(shí)利用已知的數(shù)據(jù)結(jié)構(gòu)嘉涌,也可以提高效率妻熊。MAP KEYS和COLLECTION ITEMS 關(guān)鍵字可以使用任何列的列表或映射。
CLUSTERED BY 和SORTED BY不會(huì)影響數(shù)據(jù)插入表的方式-只影響數(shù)據(jù)的讀取方式仑最。這意味著用戶必須小心地正確插入數(shù)據(jù)扔役,方法是指定reducers的數(shù)量與存儲(chǔ)桶的數(shù)量相等,并在查詢中使用CLUSTER BY 和 SORT BY命令警医。
還有一個(gè)創(chuàng)建和填充桶表的例子亿胸。
4.1.9、 傾斜表
設(shè)計(jì)文檔
有關(guān)更多信息法严,請(qǐng)閱讀傾斜連接優(yōu)化和桶列表存儲(chǔ)設(shè)計(jì)文檔损敷。
此特性可用于在一個(gè)或多個(gè)列具有傾斜值的表中提高性能。通過指定經(jīng)常出現(xiàn)的值(嚴(yán)重傾斜)深啤,Hive將自動(dòng)將這些文件拆分為單獨(dú)的文件(或桶列表存儲(chǔ)的情況下的目錄),并在查詢過程中考慮到這一事實(shí)路星,以便在可能的情況下跳過或包含整個(gè)文件(或桶列表存儲(chǔ)的情況下的目錄)溯街。
在創(chuàng)建表時(shí),可以在每個(gè)表級(jí)別上指定這一點(diǎn)洋丐。
下面的示例顯示了一個(gè)列呈昔,它有三個(gè)傾斜的值,可以選擇使用STORED AS DIRECTORIES子句友绝,該子句指定了對(duì)列表進(jìn)行存儲(chǔ)堤尾。
例:
CREATE TABLE list_bucket_single (key STRING, value STRING)
SKEWED BY (key) ON (1,5,6) [STORED AS DIRECTORIES];
這里是一個(gè)表有兩個(gè)傾斜列的例子。
例:
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];
對(duì)于相應(yīng)的ALTER TABLE語句迁客,請(qǐng)參閱下面ALTER TABLE傾斜或存儲(chǔ)目錄的信息郭宝。
4.1.10辞槐、 臨時(shí)表
臨時(shí)表只對(duì)當(dāng)前會(huì)話可見。數(shù)據(jù)將被存儲(chǔ)在用戶的臨時(shí)目錄粘室,并在會(huì)話結(jié)束時(shí)刪除榄檬。
如果臨時(shí)表是用已經(jīng)存在于數(shù)據(jù)庫中永久表的數(shù)據(jù)庫/表名稱創(chuàng)建的,那么該會(huì)話內(nèi)該表的任何引用將解析到臨時(shí)表衔统,而不是永久表鹿榜。如果不刪除臨時(shí)表或?qū)⑵渲孛麨椴粵_突的名稱,用戶將無法訪問該會(huì)話中的原始表锦爵。
臨時(shí)表有以下限制:
不支持分區(qū)列舱殿。
不支持創(chuàng)建索引。
從Hive1.1.0開始险掀,通過hive.exec.temporary.table.storage配置參數(shù)沪袭,臨時(shí)表的存儲(chǔ)策略可以設(shè)置為memory,ssd或default(見 HDFS的存儲(chǔ)類型和存儲(chǔ)策略)迷郑。
例:
CREATE TEMPORARY TABLE list_bucket_multiple (col1 STRING, col2 int, col3 STRING);
4.1.11枝恋、 事務(wù)性表
版本信息
由Hive4.0實(shí)現(xiàn)(HIVE-18453)。
支持與ACID語義操作的表嗡害。請(qǐng)參閱此有關(guān)事務(wù)表的更多細(xì)節(jié)焚碌。
例:
CREATE TRANSACTIONAL TABLE transactional_table_test(key string, value string) PARTITIONED BY(ds string) STORED AS ORC;
4.1.12、 約束
版本信息
由Hive2.1.0實(shí)現(xiàn)(HIVE-13290)霸妹。
Hive包括對(duì)未經(jīng)驗(yàn)證的主鍵和外鍵約束的支持十电。一些SQL工具在存在約束時(shí)會(huì)生成更高效的查詢。由于這些約束沒有被驗(yàn)證叹螟,上游系統(tǒng)需要在加載到Hive之前確保數(shù)據(jù)完整性鹃骂。
例:
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);
4.2、 刪除表
DROP TABLE [IF EXISTS] table_name [PURGE];
DROP TABLE刪除此表的元數(shù)據(jù)和數(shù)據(jù)罢绽。如果配置了回收站(且未指定PURGE)畏线,數(shù)據(jù)實(shí)際上會(huì)移動(dòng)到.Trash/Current目錄。元數(shù)據(jù)則完全丟失了良价。
刪除外部表時(shí)寝殴,將不會(huì)從文件系統(tǒng)中刪除表中的數(shù)據(jù)。
當(dāng)刪除視圖引用的表時(shí)明垢,不會(huì)發(fā)出任何警告(視圖將無效蚣常,必須由用戶刪除或重新創(chuàng)建)。
另外痊银,該表信息被從metastore中刪除抵蚊,數(shù)據(jù)也將被刪除,就好象由“hadoopdfs -rm”刪除一樣。在許多情況下贞绳,這會(huì)導(dǎo)致表中的數(shù)據(jù)被移動(dòng)到用戶主目錄的的.Trash文件夾; 因此谷醉,錯(cuò)誤地刪除表的用戶可能能夠通過使用相同模式重新創(chuàng)建表、重新創(chuàng)建任何必要的分區(qū)熔酷,然后使用Hadoop命令手動(dòng)將數(shù)據(jù)移回原處來恢復(fù)丟失的數(shù)據(jù)孤紧。因?yàn)橐蕾囉诘讓訉?shí)現(xiàn),此恢復(fù)數(shù)據(jù)的解決方案可能會(huì)隨著時(shí)間的推移或?qū)嶋H部署情況而更改;強(qiáng)烈建議用戶不要心血來潮地刪除表拒秘。
版本信息:PURGE
PURGE選項(xiàng)在0.14.0版本加入(HIVE-7100)号显。
如果指定PURGE,表中的數(shù)據(jù)不會(huì)轉(zhuǎn)到.Trash /當(dāng)前目錄躺酒,因此在一個(gè)誤操作DROP的情況下無法進(jìn)行數(shù)據(jù)恢復(fù)押蚤。PURGE選項(xiàng)也可以用表屬性中指定auto.purge(見上文的TBLPROPERTIES)。
在Hive0.7.0或更高版本羹应,如果DROP不存在的表會(huì)返回一個(gè)錯(cuò)誤揽碘,除非指定IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent為真。
有關(guān)如何刪除分區(qū)园匹,請(qǐng)參閱下面的“更改分區(qū)”部分雳刺。
4.3、 截?cái)啾?/h2>
TRUNCATE TABLE table_name [PARTITION partition_spec];
partition_spec:
: (partition_column = partition_col_value, partition_column = partition_col_value, ...)
TRUNCATE TABLE table_name [PARTITION partition_spec];
partition_spec:
: (partition_column = partition_col_value, partition_column = partition_col_value, ...)
刪除表或分區(qū)(一個(gè)或多個(gè)分區(qū))的所有行裸违。如果啟用了文件系統(tǒng)的垃圾回收掖桦,數(shù)據(jù)將被回收,否則它們會(huì)被直接刪除(從Hive2.2.0的HIVE-14626)供汛。目前枪汪,目標(biāo)表應(yīng)該是本機(jī)的/托管表,否則將引發(fā)異常怔昨。對(duì)于分區(qū)表雀久,用戶可以指定partition_spec一次截?cái)喽鄠€(gè)分區(qū),或者省略partition_spec截?cái)啾碇械乃蟹謪^(qū)趁舀。
從HIVE 2.3.0開始(HIVE-15880)赖捌,如果表屬性“auto.purge”(見上面的TBLPROPERTIES)設(shè)置為“true”, 則當(dāng)對(duì)表發(fā)出truncate table命令時(shí)矮烹,該表的數(shù)據(jù)不移動(dòng)到回收站巡蘸,并且如果誤操作發(fā)出的truncate table命令也無法恢復(fù)數(shù)據(jù)。這僅適用于托管表(見托管表)擂送。如果托管表的“auto.purge”屬性未設(shè)置或設(shè)置為false,則可以關(guān)閉此行為模式唯欣。
4.4嘹吨、 改變表/分區(qū)/列
ALTER TABLE語句使您可以修改現(xiàn)有表的結(jié)構(gòu)。您可以添加列/分區(qū)境氢,改變SERDE蟀拷,添加表和SERDE屬性碰纬,或重命名表本身。同樣问芬,修改表分區(qū)語句允許您修改表中特定分區(qū)的屬性悦析。
4.4.1、 ALTER TABLE
4.4.1.1此衅、 重命名表
ALTER TABLE table_name RENAME TO new_table_name;
此語句允許您將表的名稱更改為不同的名稱强戴。
從0.6版開始,對(duì)托管表重命名會(huì)移動(dòng)其HDFS位置挡鞍。從2.2.0版(hive-14909)中重命名機(jī)制已經(jīng)更改骑歹,只有當(dāng)表創(chuàng)建時(shí)沒有Location子句并位于其數(shù)據(jù)庫目錄下,托管表的HDFS位置才會(huì)被移動(dòng)墨微。而在HIVE0.6版本之前只是重命名了metastore中的表道媚,而沒有移動(dòng)HDFS位置。
4.4.1.2翘县、 ALTER TABLE屬性
ALTER TABLE table_name SET TBLPROPERTIES table_properties;
table_properties:
: (property_name = property_value, property_name = property_value, ... )
您可以使用此語句將自己的元數(shù)據(jù)添加到表最域。目前l(fā)ast_modified_user,last_modified_time屬性由Hive自動(dòng)添加锈麸。用戶可以添加自己的屬性到這個(gè)列表镀脂。您可以執(zhí)行DESCRIBE EXTENDED TABLE來獲取這些信息。
欲了解更多信息掐隐,請(qǐng)參閱上面創(chuàng)建表的TBLPROPERTIES子句狗热。
4.4.1.3、 ALTER TABLE注釋
要更改表的注釋虑省,你必須改變TBLPROPERTIES的comment屬性:
ALTER TABLE table_name SET TBLPROPERTIES ('comment' = new_comment);
4.4.1.4匿刮、 添加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對(duì)象添加用戶定義的元數(shù)據(jù)表。
當(dāng)Hive初始化該表以序列化和反序列化數(shù)據(jù)時(shí)探颈,Serde屬性將傳遞給該表的Serde熟丸。因此,用戶可以在這里存儲(chǔ)自定義Serde所需的任何信息伪节。有關(guān)更多信息光羞,請(qǐng)參閱開發(fā)人員指南中的SerDe文檔和Hive Serde。有關(guān)在CREATE TABLE語句中設(shè)置表的SerDe和SERDEPROPERTIES的詳細(xì)信息,請(qǐng)參閱上面的行格式墓怀、存儲(chǔ)格式和Serde榴嗅。
請(qǐng)注意property_name和property_value這兩個(gè)都必須加引號(hào)。
例:
ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = ',');
4.4.1.5潜慎、 ALTER TABLE存儲(chǔ)屬性
ALTER TABLE table_name CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, ...)]
INTO num_buckets BUCKETS;
這些語句更改表的物理存儲(chǔ)性能。
注意:這些命令只會(huì)修改Hive的元數(shù)據(jù),不會(huì)重新組織或重新格式化現(xiàn)有的數(shù)據(jù)铐炫。用戶應(yīng)確保實(shí)際數(shù)據(jù)布局符合元數(shù)據(jù)定義垒手。
4.4.1.6、 ALTER TABLE傾斜或存儲(chǔ)為目錄
表的SKEWED和STORED AS DIRECTORIES屬性可以由ALTER TABLE語句來改變倒信。見上文中CREATE TABLE語法中相應(yīng)的傾斜表部分科贬。
- ALTER TABLE傾斜
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選項(xiàng)確定是否傾斜表使用列表桶功能,該功能為傾斜值創(chuàng)建子目錄鳖悠。
- ALTER TABLE不傾斜
ALTER TABLE table_name NOT SKEWED;
“NOT SKEWED”選項(xiàng)使表不傾斜榜掌,并關(guān)閉列表桶存儲(chǔ)功能(因?yàn)榱斜硗按鎯?chǔ)表總是傾斜的)。這會(huì)影響ALTER語句之后創(chuàng)建的分區(qū)竞穷,但對(duì)ALTER語句之前創(chuàng)建的分區(qū)沒有影響唐责。
- ALTER TABLE不存儲(chǔ)為目錄
ALTER TABLE table_name NOT STORED AS DIRECTORIES;
這將關(guān)閉列表桶存儲(chǔ)功能,盡管表仍然是傾斜的瘾带。
- ALTER TABLE設(shè)置傾斜表存儲(chǔ)位置
ALTER TABLE table_name SET SKEWED LOCATION (col_name1="location1" [, col_name2="location2", ...] );
這將更改列表桶存儲(chǔ)位置的映射鼠哥。
4.4.1.7、 ALTER TABLE約束
版本信息
由Hive2.1.0發(fā)布看政。
表約束可以通過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 DROP CONSTRAINT constraint_name;
- 其他ALTER TABLE語句
有關(guān)ALTER TABLE或Partition,請(qǐng)參見下面的更多修改表的DDL語句允蚣。
4.4.2于颖、 改變分區(qū)
分區(qū)可以通過在ALTER TABLE語句中使用PARTITION子句來添加,重命名嚷兔,交換(移動(dòng))森渐,刪除,存檔(或調(diào)檔)冒晰。如下所述同衣。為了讓Metastore知道直接添加到HDFS中的分區(qū),您可以使用Metastore Check命令(MSCK)或在AmazonEMR上使用ALTER TABLE的RECOVER PARTITIONS選項(xiàng)壶运。
有關(guān)更改分區(qū)的更多方法耐齐,請(qǐng)參見下面的修改表/分區(qū)。
版本1.2+
從Hive1.2(hive-10307)開始蒋情,如果屬性hive.typecheck.on.insert設(shè)置為true(默認(rèn))埠况,分區(qū)規(guī)范中指定的分區(qū)值將被檢查、轉(zhuǎn)換和標(biāo)準(zhǔn)化棵癣,以符合其列類型辕翰。這些值可以是數(shù)字字符串。
4.4.2.1狈谊、 添加分區(qū)
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給表添加分區(qū)金蜀。只有分區(qū)值是字符串時(shí)刷后,才需要其被引號(hào)包圍。Location必須是一個(gè)存放內(nèi)部數(shù)據(jù)目錄渊抄。(ADD PARTITION更改表的元數(shù)據(jù),但不會(huì)加載數(shù)據(jù)丧裁。如果分區(qū)的位置不存在數(shù)據(jù)护桦,查詢將不會(huì)返回任何結(jié)果。)
如果表中的已經(jīng)存在partition_spec的分區(qū)煎娇,則會(huì)引發(fā)錯(cuò)誤二庵。您可以使用IF NOT EXISTS跳過錯(cuò)誤。
0.7版本
雖然在單個(gè)ALTER TABLE中有多個(gè)partition_spec語法是正確的缓呛,如果你在0.7版本這樣做催享,則分區(qū)方案將失敗。也就是說哟绊,每個(gè)指定分區(qū)的查詢總是只使用第一個(gè)分區(qū)因妙。
具體來說,下面的示例將在Hive 0.7中默默地票髓、無錯(cuò)誤地失敗攀涵,并且所有查詢都將只轉(zhuǎn)到DT=‘2008-08-08’分區(qū),而不管您指定哪個(gè)分區(qū)洽沟。
例:
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';
在Hive0.8及更高版本以故,如前面的示例,你可以在一條ALTER TABLE語句添加多個(gè)分區(qū)裆操。
在Hive0.7怒详,如果要添加多個(gè)分區(qū),你應(yīng)該使用以下表格:
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';
4.4.2.2踪区、 動(dòng)態(tài)分區(qū)
4.4.2.3昆烁、 重命名分區(qū)
ALTER TABLE table_name PARTITION partition_spec RENAME TO PARTITION partition_spec;
此語句允許您更改分區(qū)列的值。其中一個(gè)用例是朽缴,您可以使用此語句使遺留分區(qū)列值規(guī)范化善玫,以符合其類型。在這種情況下密强,即使在屬性hive.typecheck.on.insert設(shè)置為true(默認(rèn))下茅郎,舊partition_spec中的列值也不啟用類型轉(zhuǎn)換和規(guī)范化,這允許您在舊partition_spec中以字符串形式指定任何遺留數(shù)據(jù)或渤。
4.4.2.4系冗、 交換分區(qū)
分區(qū)可以表之間交換(移動(dòng))。
版本信息
從Hive0.12(HIVE-4095)薪鹦。在Hive版本1.2.2掌敬、1.3.0和2.0.0中支持多個(gè)分區(qū)惯豆。
-- 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;
此語句允許您將分區(qū)中的數(shù)據(jù)從一個(gè)表移動(dòng)到另一個(gè)具有相同架構(gòu)且還沒有該分區(qū)的表。
有關(guān)此功能的詳細(xì)信息奔害,請(qǐng)參閱Exchange分區(qū)和hive-4095楷兽。
4.4.2.5、 恢復(fù)分區(qū)(MSCK REPAIR TABLE)
Hive在其metastore存儲(chǔ)每個(gè)表的分區(qū)列表华临。然而芯杀,如果新的分區(qū)被直接加入到HDFS(比方說通過使用hadoop fs -put命令),或從HDFS移除雅潭,metastore(因此Hive也)將不知道這些變化揭厚,除非用戶在分區(qū)表上每次新添或刪除分區(qū)時(shí)分別運(yùn)行ALTER TABLE table_name ADD/DROP PARTITION命令。
然而扶供,用戶可以運(yùn)行與維修表選項(xiàng)的metastore檢查命令:
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
它將更新Hive Metastore中關(guān)于分區(qū)的元數(shù)據(jù)筛圆,用于那些尚未存在此類元數(shù)據(jù)的分區(qū)。
- MSC命令的默認(rèn)選項(xiàng)是ADD PARTITIONS椿浓。使用此選項(xiàng)太援,它將向Metastore添加任何存在于HDFS上但不在Metastore中的分區(qū)。
- DROP PARTITIONS選項(xiàng)將從Metastore中刪除分區(qū)信息轰绵,對(duì)應(yīng)那些已經(jīng)從HDFS中刪除的分區(qū)粉寞。
- SYNC PARTITIONS選項(xiàng)等效于調(diào)用ADD PARTITIONS和DROP PARTITIONS。有關(guān)詳細(xì)信息左腔,請(qǐng)參閱hive-874和hive-17824唧垦。
- 當(dāng)有大量未跟蹤分區(qū)時(shí),有一項(xiàng)規(guī)定可以按批處理方式運(yùn)行MSCK修復(fù)表液样,以避免OOME(內(nèi)存不足錯(cuò)誤)振亮。通過為屬性hive.msck.repair.batch.size提供配置的批處理大小,它可以在內(nèi)部批處理中運(yùn)行鞭莽。該屬性的默認(rèn)值為零坊秸,這意味著它將一次執(zhí)行所有分區(qū)。
- 不帶修復(fù)選項(xiàng)的MSCK命令可用于查找元數(shù)據(jù)錯(cuò)配的詳細(xì)信息澎怒。
在Amazon Elastic MapReduce(EMR)版本Hive的等效命令是:
ALTER TABLE table_name RECOVER PARTITIONS;
從Hive 1.3開始褒搔,如果分區(qū)值中有HDFS目錄不允許的字符,MSCK將拋出異常喷面。在客戶端上使用設(shè)置hive.msck.path.validation來改變此行為星瘾;“skip”將簡單地跳過目錄【灞玻“ignore”將嘗試創(chuàng)建分區(qū)(舊的行為)琳状。這可能成功,也可能不起作用盒齿。
4.4.2.6念逞、 刪除分區(qū)
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來刪除表的分區(qū)困食。這刪除了用于該分區(qū)中的數(shù)據(jù)和元數(shù)據(jù)。如果設(shè)置了回收策略翎承,數(shù)據(jù)實(shí)際移動(dòng)到.Trash /當(dāng)前目錄硕盹,除非另外指定PURGE。但元數(shù)據(jù)完全丟失(見上文的刪除表)审洞。
版本信息:IGNORE PROTECTION
IGNORE PROTECTION不在2.0.0及以后的版本可用莱睁。此功能由Hive幾個(gè)可用的安全選項(xiàng)之一取代(請(qǐng)參見基于SQL標(biāo)準(zhǔn)的Hive授權(quán))。見HIVE-11145了解詳情芒澜。
對(duì)于由NO_DROP CASCADE保護(hù)的表,可以使用謂詞IGNORE PROTECTION刪除指定分區(qū)或一組分區(qū)(例如创淡,在兩個(gè)Hadoop集群之間拆分表時(shí)):
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec IGNORE PROTECTION;
上述命令將刪除該分區(qū)痴晦,而不考慮保護(hù)狀態(tài)。
版本信息:PURGE
ALTER TABLE的PURGE選項(xiàng)由1.2.1版本添加(HIVE-10934)琳彩。
如果指定PURGE的清除誊酌,則分區(qū)的數(shù)據(jù)不走的.Trash /當(dāng)前目錄,因此不能在一個(gè)失誤刪除的情況下恢復(fù)數(shù)據(jù):
ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec PURGE; -- (Note: Hive 1.2.0 and later)
PURGE選項(xiàng)也可以用表屬性中auto.purge指定(見上文的TBLPROPERTIES)露乏。
從Hive0.7.0到更高版本碧浊,DROP的分區(qū)如果不存在,返回一個(gè)錯(cuò)誤瘟仿,除非指定IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent為true箱锐。
ALTER TABLE page_view DROP PARTITION (dt='2008-08-08', country='us');
4.4.2.7、 分區(qū)存檔(和解檔)
ALTER TABLE table_name ARCHIVE PARTITION partition_spec; ALTER TABLE table_name UNARCHIVE PARTITION partition_spec;
歸檔功能是移動(dòng)的分區(qū)的文件到一個(gè)Hadoop歸檔(HAR)劳较。請(qǐng)注意驹止,只是文件的數(shù)量減少; HAR不提供任何壓縮。見Language Manual存檔 以了解更多信息
4.4.3观蜗、 改變表或分區(qū)
4.4.3.1臊恋、 ALTER TABLE /分區(qū)文件格式
ALTER TABLE table_name [PARTITION partition_spec] SET FILEFORMAT file_format;
這個(gè)語句更改表(或分區(qū)的)文件格式。有關(guān)可用file_format選項(xiàng)墓捻,看上面的CREATE TABLE部分抖仅。此操作只更改表的元數(shù)據(jù)。任何現(xiàn)有數(shù)據(jù)的轉(zhuǎn)換必須Hive外完成砖第。
4.4.3.2撤卢、 ALTER TABLE /分區(qū)位置
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION "new location";
4.4.3.3、 ALTER TABLE /分區(qū)TOUCH
ALTER TABLE table_name TOUCH [PARTITION partition_spec];
TOUCH讀取的元數(shù)據(jù)厂画,并將其寫回凸丸。這具有使前/后執(zhí)行掛鉤觸發(fā)的效果。一個(gè)示例是:如果您有一個(gè)鉤子記錄所有已修改的表/分區(qū)袱院,以及一個(gè)直接更改HDFS上文件的外部腳本屎慢。因?yàn)槟_本修改了Hive之外的文件瞭稼,所以這個(gè)修改不會(huì)被鉤子記錄下來。外部腳本可以調(diào)用Touch來觸發(fā)鉤子腻惠,并將所述表或分區(qū)標(biāo)記為修改后的表或分區(qū)环肘。
另外,如果我們將可靠的最后修改時(shí)間合并起來集灌,以后可能會(huì)很有用悔雹。TOUCH也會(huì)更新那個(gè)時(shí)間。
注意欣喧,如果TOUCH的表或分區(qū)不存在腌零,它也不會(huì)創(chuàng)建表或分區(qū)。(請(qǐng)參見創(chuàng)建表唆阿。)
4.4.3.4益涧、 改變表/分區(qū)保護(hù)
版本信息
由Hive0.7.0開始(HIVE-1413)。在HIVE 0.8.0在CASCADE子句加入NO_DROP(HIVE-2605)驯鳖。
此功能在Hive2.0.0已被刪除闲询。此功能由Hive幾個(gè)可用的安全選項(xiàng)之一替代(見基于SQL標(biāo)準(zhǔn)Hive授權(quán))。見HIVE-11145 了解詳情浅辙。
ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE NO_DROP [CASCADE]; ALTER TABLE table_name [PARTITION partition_spec] ENABLE|DISABLE OFFLINE;
數(shù)據(jù)保護(hù)可以在任一表或分區(qū)級(jí)別設(shè)置扭弧。啟用NO_DROP防止表被刪除。啟用OFFLINE防止查詢表或分區(qū)中的數(shù)據(jù)记舆,但元數(shù)據(jù)仍然可以被訪問鸽捻。
如果在一個(gè)表中的任何分區(qū)NO_DROP啟用,該表不能刪除氨淌。相反泊愧,如果一個(gè)表啟用NO_DROP之后,分區(qū)仍然可能被刪除盛正,但NO_DROP CASCADE分區(qū)不能被刪除删咱,除非刪除partition命令指定IGNORE PROTECTION。
4.4.3.5豪筝、 改變表/分區(qū)緊縮
版本信息
在Hive版本0.13.0及后續(xù)版本痰滋,當(dāng)事務(wù)正在被使用,ALTER TABLE語句可以要求緊縮表或分區(qū)续崖。在Hive發(fā)布1.3.0和2.1.0后敲街,當(dāng)事務(wù)正在被使用時(shí),ALTER TABLE ... COMPACT語句可以包括TBLPROPERTIES子句严望,或者是改變緊縮MapReduce工作屬性或覆蓋任何其他Hive表的屬性多艇。更多細(xì)節(jié)可以見在這里。
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])]
COMPACT 'compaction_type'[AND WAIT]
[WITH OVERWRITE TBLPROPERTIES ("property"="value" [, ...])];
一般來說像吻,在使用Hive事務(wù)時(shí)峻黍,您不需要請(qǐng)求緊縮复隆,因?yàn)橄到y(tǒng)將檢測到它們的需要并自動(dòng)啟動(dòng)緊縮。但是姆涩,如果關(guān)閉了表的緊縮功能挽拂,或者希望在系統(tǒng)不選擇的情況下緊縮表,則ALTER TABLE可以啟動(dòng)緊縮骨饿。默認(rèn)情況下亏栈,該語句將緊縮請(qǐng)求排隊(duì),然后返回宏赘。若要查看緊縮的進(jìn)度绒北,請(qǐng)使用“SHOW COMPACTIONS”。從Hive2.2.0開始察署,可以指定“AND WAIT”來讓操作等待緊縮完成镇饮。
該compaction_type可以是MAJOR 或者 MINOR。請(qǐng)參閱Hive事務(wù)的基本設(shè)計(jì)部分以獲取更多信息箕母。
4.4.3.6、 改變表/分區(qū)串聯(lián)
版本信息
在Hive 0.8.0中俱济, 增加了使用串聯(lián)命令塊級(jí)快速合并小型小RCFiles的支持嘶是。在Hive版本0.14.0 ,添加了使用串聯(lián)命令條帶(stripe)級(jí)別快速合并ORC小文件的支持蛛碌。
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] CONCATENATE;
如果表或分區(qū)包含許多小的RCFile或ORC文件聂喇,那么上面的命令將它們合并成更大的文件。對(duì)于RCFile蔚携,合并發(fā)生在塊級(jí)希太,而對(duì)于ORC文件,合并發(fā)生在條帶(stripe)級(jí)酝蜒,從而避免了數(shù)據(jù)解壓縮和解碼的開銷誊辉。
4.4.3.7、 ALTER TABLE /分區(qū)更新列
版本信息
在Hive釋放3.0.0中加入該命令亡脑,讓用戶同步SERDE存儲(chǔ)模式信息到metastore堕澄。
ALTER TABLE table_name [PARTITION (partition_key = 'partition_value' [, ...])] UPDATE COLUMNS;
具有自描述表模式的SERDES表在現(xiàn)實(shí)中可能有不同的模式,而存儲(chǔ)在Hive Metastore中的表也可能有不同的模式霉咨。例如蛙紫,當(dāng)用戶使用模式url或模式文字創(chuàng)建Avro存儲(chǔ)表時(shí),模式將被插入到HMS中途戒,然后無論服務(wù)器中的url或文字如何更改坑傅,模式都不會(huì)在HMS中被更改。這可能導(dǎo)致問題喷斋,特別是在與其他Apache組件集成時(shí)唁毒。
更新列功能為用戶提供了讓在SERDE所做的任何模式更改能同步到HMS的方式蒜茴。它適用于表和分區(qū)一級(jí),而且顯然只適用于其模式未被HMS跟蹤的表(見metastore.serdes.using.metastore.for.schema)枉证。在這些后來SERDE類型使用命令將導(dǎo)致錯(cuò)誤矮男。
4.4.4、 ALTER COLUMN
4.4.4.1室谚、 列名規(guī)則
列名不區(qū)分大小寫毡鉴。
版本信息
在Hive版本0.12.0及更早版本,列名只能包含字母數(shù)字和下劃線字符秒赤。
在Hive版本0.13.0及更高版本猪瞬,默認(rèn)情況下,列名可以反引號(hào)內(nèi)指定的(`)和含有任何的Unicode字符(HIVE-6013)入篮,然而陈瘦,點(diǎn)(.)和冒號(hào)(:)上查詢會(huì)觸發(fā)錯(cuò)誤。用反引號(hào)內(nèi)指定的任何列名都按字面處理潮售。在反引號(hào)字符串中痊项,用雙反引號(hào)(``)來表示一個(gè)反引號(hào)字符。在0.13.0之前的行為可以通過設(shè)置使用hive.support.quoted.identifiers為none酥诽,在這種情況下反引號(hào)名稱被解釋為正則表達(dá)式鞍泉。有關(guān)詳細(xì)信息,請(qǐng)參閱在列名中支持帶引號(hào)的標(biāo)識(shí)符肮帐。
反引號(hào)包圍符允許使用保留關(guān)鍵字用于列名咖驮,以及表名。
4.4.4.2训枢、 更改列名稱/類型/位置/注釋
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];
這個(gè)命令將允許用戶更改列的名稱托修,數(shù)據(jù)類型,注釋或位置恒界,或者它們的任意組合睦刃。PARTITION子句中從Hive0.14.0到更高版本;
CASCADE | RESTRICT子句中可用Hive1.1.0。ALTER TABLE CHANGE COLUMN與CASCADE配合更改表元數(shù)據(jù)的列仗处,并對(duì)所有分區(qū)元數(shù)據(jù)進(jìn)行相同的更改眯勾。RESTRICT是默認(rèn)的,限制僅表中列的元數(shù)據(jù)發(fā)生變化婆誓。
ALTER TABLE CHANGE COLUMN CASCADE子句將覆蓋表/分區(qū)相關(guān)列的元數(shù)據(jù)吃环,而不管表或分區(qū)的保護(hù)模式如何。謹(jǐn)慎使用洋幻。
更改列命令將只修改配置單元的元數(shù)據(jù)郁轻,并且不會(huì)修改數(shù)據(jù)。用戶應(yīng)確保表/分區(qū)的實(shí)際數(shù)據(jù)與布局的元數(shù)據(jù)定義一致。
例:
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';
4.4.4.3好唯、 添加/替換列
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允許您將新列添加到現(xiàn)有列之后竭沫,分區(qū)列之前。這個(gè)特性支持Avro的表骑篙, Hive0.14及更高版本蜕提。
REPLACE COLUMNS刪除所有現(xiàn)有列,并增加了新的一組列靶端。這只能是在表是本地SERDE(DynamicSerDe谎势,MetadataTypedColumnsetSerDe,LazySimpleSerDe和ColumnarSerDe)的情況下完成杨名。請(qǐng)參閱HiveSERDE以獲取更多信息脏榆。REPLACE COLUMNS還可以用來刪除列。例如台谍,“ ALTER TABLE test_change REPLACE COLUMNS (a int, b int);”將于test_change的模式中刪除列“C”衅檀。
PARTITION子句從Hive0.14.0 開始到更高版本;
CASCADE | RESTRICT子句中可用Hive1.1.0通惫。ALTER TABLE CHANGE COLUMN與CASCADE配合更改表元數(shù)據(jù)的列,并對(duì)所有分區(qū)元數(shù)據(jù)進(jìn)行相同的更改强缘。RESTRICT是默認(rèn)的片习,限制僅表中列的元數(shù)據(jù)發(fā)生變化夏哭。
ALTER TABLE ADD或REPLACE COLUMNS CASCADE將覆蓋表分區(qū)的列的元數(shù)據(jù)址貌,無視表或分區(qū)的的保護(hù)模式脚翘。請(qǐng)謹(jǐn)慎使用。
列更改命令將只修改配置單元的元數(shù)據(jù)炎咖,并且不會(huì)修改數(shù)據(jù)。用戶應(yīng)確保表/分區(qū)的實(shí)際數(shù)據(jù)與布局的元數(shù)據(jù)定義一致寒波。
4.4.4.4乘盼、 部分分區(qū)規(guī)范
從Hive 0.14(hive-8411)開始,用戶就可以為上述ALTER列語句提供部分分區(qū)規(guī)范俄烁,類似于動(dòng)態(tài)分區(qū)绸栅。因此,不需要為需要更改的每個(gè)分區(qū)發(fā)出ALTER列語句:
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);
...
...您可以使用帶有部分分區(qū)規(guī)范的單個(gè)ALTER語句一次更改許多現(xiàn)有分區(qū):
// 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);
類似動(dòng)態(tài)分區(qū)页屠,hive.exec.dynamic.partition必須設(shè)置為true粹胯,以便在ALTER分區(qū)期間啟用部分分區(qū)規(guī)范。以下操作支持此操作:
更改列
添加列
更換列
文件格式
Serde屬性
五辰企、創(chuàng)建/刪除/更改視圖
創(chuàng)建視圖
刪除視圖
改變視圖屬性
Alter View As Select
5.1风纠、 創(chuàng)建視圖
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創(chuàng)建給定名稱的視圖。如果一個(gè)具有相同名稱表或視圖已經(jīng)存在牢贸,則會(huì)引發(fā)錯(cuò)誤竹观。您可以使用IF NOT EXISTS跳過錯(cuò)誤。
如果沒有提供列名,該視圖的列的名稱將被自動(dòng)地從SELECT子句投影列表達(dá)式取得臭增。(如果SELECT包含無別名的標(biāo)量表達(dá)式如X + Y懂酱,所得到的視圖列名稱將在形式如_C0,_c1等)誊抛。重命名列時(shí)列牺,還可以選擇提供列注釋。(注釋不會(huì)自動(dòng)從基礎(chǔ)列繼承)拗窃。
如果定義視圖的SELECT表達(dá)式是無效的瞎领,CREATE VIEW語句將失敗。
注意并炮,視圖是沒有相關(guān)聯(lián)存儲(chǔ)的純邏輯對(duì)象(除了物化視圖默刚,該特性從Hive 2.3.0開始支持。)
當(dāng)一個(gè)查詢引用視圖時(shí)逃魄,將計(jì)算視圖的定義荤西,以便生成一組查詢結(jié)果集供進(jìn)一步處理。(這是一種概念描述伍俘;事實(shí)上邪锌,作為查詢優(yōu)化的一部分,Hive可以將視圖的定義與查詢的定義結(jié)合起來癌瘾,例如將過濾器從查詢向下推到視圖中(fan:即Where過濾條件下推至From子句)觅丰。)
視圖的模式在視圖創(chuàng)建時(shí)被凍結(jié);對(duì)底層表的后續(xù)更改(例如添加列)將不會(huì)反映在視圖的模式中妨退。如果以不兼容的方式刪除或更改基礎(chǔ)表妇萄,則隨后查詢無效視圖的嘗試將失敗。
視圖只讀的咬荷,也不可以作為LOAD / INSERT / ALTER的目標(biāo)冠句。如果需要改變?cè)獢?shù)據(jù),請(qǐng)參見ALTER VIEW幸乒。
視圖可以包含ORDER BY和LIMIT子句懦底。如果引用視圖的查詢也包含這些子句,則在視圖子句之后(以及在查詢中的任何其他操作之后)計(jì)算查詢級(jí)別的子句罕扎。例如聚唐,如果視圖指定LIMIT 5,并將引用查詢執(zhí)行為(select * from v LIMIT 10)腔召,則最多將返回5行杆查。
從Hive 0.13.0開始,視圖的SELECT語句可以包含一個(gè)或多個(gè)公共表達(dá)式(CTE)臀蛛,如SELECT語法所示根灯。有關(guān)CREATE VIEW語句中CTE的示例,請(qǐng)參見公共表達(dá)式。
例:
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';
使用SHOW CREATE TABLE來顯示創(chuàng)建視圖的CREATE VIEW語句烙肺。從Hive2.2.0纳猪,SHOW VIEWS顯示在數(shù)據(jù)庫中的視圖列表。
版本信息
最初桃笙,視圖的文件格式被硬編碼為SequenceFile氏堤。從Hive2.1.0(HIVE-13736),視圖與表和索引都遵循h(huán)ive.default.fileFormat和hive.default.fileformat.managed屬性的默認(rèn)值搏明。
5.2鼠锈、 刪除視圖
DROP VIEW [IF EXISTS] [db_name.]view_name;
DROP VIEW移除指定視圖元數(shù)據(jù)。(對(duì)視圖使用DROP TABLE是非法的)星著。
當(dāng)刪除其他視圖中引用的視圖時(shí)购笆,不會(huì)給出警告(依賴視圖會(huì)非法引用而無效,并必須由用戶刪除或重新創(chuàng)建)虚循。
從Hive0.7.0到更高版本同欠,DROP一個(gè)不存在的視圖會(huì)返回錯(cuò)誤,除非指定IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent為true横缔。
例:
DROP VIEW onion_referrers;
5.3铺遂、 改變視圖屬性
ALTER VIEW [db_name.]view_name SET TBLPROPERTIES table_properties;
table_properties:
: (property_name = property_value, property_name = property_value, ...)
與ALTER TABLE一樣,你可以用這個(gè)語句給視圖添加自己的元數(shù)據(jù)茎刚。
5.4襟锐、 Alter View As Select
ALTER VIEW [db_name.]view_name AS select_statement;
Alter View As Select改變一個(gè)已存在視圖的定義。語法類似于用于CREATE VIEW膛锭,效果和CREATE OR REPLACE VIEW相同粮坞。
注:該視圖必須已經(jīng)存在,且如果該視圖有分區(qū)初狰,它不能用ALTER VIEW AS SELECT所取代捞蚂。(fan:視圖也可以有分區(qū)嗎?)
六跷究、創(chuàng)建/刪除/ ALTER INDEX
本節(jié)提供了一個(gè)簡要介紹了Hive Index,更詳細(xì)的文檔如下:
Hive索引概述
索引設(shè)計(jì)文件
在Hive0.12.0和更早的版本敲霍,索引名在CREATE INDEX和DROP INDEX語句中是區(qū)分大小寫的俊马。但是,ALTER INDEX需要?jiǎng)?chuàng)建索引的名字是小寫字母(見 HIVE-2752)肩杈。此錯(cuò)誤是在Hive0.13.0修復(fù)的柴我,所有HiveQL語句的索引名不再區(qū)分大小寫。對(duì)于0.13.0之前的版本中扩然,最好的做法是所有索引名都使用小寫字母艘儒。
6.1、 創(chuàng)建索引
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在表上使用給定的列創(chuàng)建索引。請(qǐng)參閱CREATE INDEX設(shè)計(jì)文檔界睁。
6.2觉增、 DROP INDEX
DROP INDEX [IF EXISTS] index_name ON table_name;
DROP INDEX刪除索引,以及刪除索引表翻斟。
在Hive0.7.0或更高版本中逾礁,如果索引不存在,DROP將返回一個(gè)錯(cuò)誤访惜,除非指定了IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent 為true嘹履。
6.3、 ALTER INDEX
ALTER INDEX index_name ON table_name [PARTITION partition_spec] REBUILD;
ALTER INDEX ... REBUILD為使用WITH DEFERRED REBUILD子句的索引建立索引或重建先前建立的索引债热。如果指定分區(qū)砾嫉,那么只有該分區(qū)重建。
七窒篱、創(chuàng)建/刪除宏
Bug修復(fù):
在Hive1.3.0和2.0.0之前焕刮,當(dāng)處理同一行數(shù)據(jù)多次調(diào)用HiveQL宏時(shí),即使參數(shù)是不同舌剂,Hive對(duì)于所有調(diào)用也返回相同的結(jié)果济锄。(參見HIVE-11432)。
在Hive 1.3.0和2.0.0之前霍转,當(dāng)處理同一行數(shù)據(jù)調(diào)用多個(gè)HiveQL宏時(shí)荐绝, ORDER BY子句可能會(huì)給錯(cuò)誤的結(jié)果。(參見HIVE-12277)避消。
在Hive2.1.0之前低滩,當(dāng)處理同一行數(shù)據(jù)調(diào)用多個(gè)HiveQL宏時(shí),后面宏的結(jié)果會(huì)被第一個(gè)宏的結(jié)果覆蓋岩喷。(參見HIVE-13372)恕沫。
從Hive0.12.0引入HiveQL宏,之前他們只能在Java中創(chuàng)建纱意。
7.1婶溯、 創(chuàng)建臨時(shí)宏
CREATE TEMPORARY MACRO macro_name([col_name col_type, ...]) expression;
CREATE TEMPORARY MACRO創(chuàng)建可作為可選參數(shù)化表達(dá)式的宏。宏的持續(xù)時(shí)間存在當(dāng)前會(huì)話中偷霉。
例子:
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;
7.2迄委、 刪除臨時(shí)宏
DROP TEMPORARY MACRO [IF EXISTS] macro_name;
如果宏不存在,DROP TEMPORARY MACRO將返回錯(cuò)誤类少,除非指定IF EXISTS叙身。
八、創(chuàng)建/刪除/重新裝載函數(shù)
8.1硫狞、 臨時(shí)函數(shù)
8.1.1信轿、 創(chuàng)建臨時(shí)函數(shù)
CREATE TEMPORARY FUNCTION function_name AS class_name;
使用這個(gè)語句允許您創(chuàng)建一個(gè)由class_name實(shí)現(xiàn)的函數(shù)晃痴。只要會(huì)話持續(xù),就可以在Hive查詢中使用此函數(shù)财忽。您可以使用Hive類路徑中的任何類倘核。您也可以通過執(zhí)行‘Add JAR’語句將JAR添加到類路徑中。
有關(guān)如何從Hive類路徑添加/刪除文件的更多信息定罢,請(qǐng)參閱CLI部分Hive Interactive Shell命令笤虫,包括Hive參考資料。使用它祖凫,您可以注冊(cè)用戶定義的函數(shù)(UDF)琼蚯。
有關(guān)創(chuàng)建自定義UDF的一般信息,請(qǐng)參見Hive插件惠况。
8.1.2遭庶、 刪除臨時(shí)函數(shù)
您可以按如下刪除UDF:
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
在Hive0.7.0或更高版本中,如果該函數(shù)不存稠屠,DROP會(huì)返回一個(gè)錯(cuò)誤峦睡,除非指定IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent為true。
8.2权埠、 永久函數(shù)
在Hive0.13或更高版本中榨了,函數(shù)可以注冊(cè)到metastore,這樣他們就可以在查詢中引用而無需在每個(gè)會(huì)話創(chuàng)建臨時(shí)函數(shù)攘蔽。
8.2.1龙屉、 創(chuàng)建函數(shù)
CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
這個(gè)語句允許您創(chuàng)建一個(gè)由class_name實(shí)現(xiàn)的函數(shù)。JAR满俗、文件或檔案可以使用Using子句指定转捕,將其添加到環(huán)境中的;當(dāng)函數(shù)第一次被Hive會(huì)話引用時(shí)唆垃,這些資源將被添加到環(huán)境中五芝,就像已經(jīng)發(fā)出Add JAR/File一樣。如果Hive沒有處于本地模式辕万,那么資源位置必須是一個(gè)非本地URI枢步,例如HDFS目錄。
該函數(shù)將被加入到指定的數(shù)據(jù)庫渐尿,或在該函數(shù)的創(chuàng)建時(shí)的當(dāng)前數(shù)據(jù)庫醉途。該函數(shù)可以通過完全限定符的函數(shù)名(db_name.function_name)引用,如果函數(shù)位于當(dāng)前數(shù)據(jù)庫中涡戳,則可以不加限定符引用該函數(shù)。
8.2.2脯倚、 刪除函數(shù)
DROP FUNCTION [IF EXISTS] function_name;
如果該函數(shù)不存在渔彰,DROP返回一個(gè)錯(cuò)誤嵌屎,除非指定IF EXISTS或設(shè)置變量hive.exec.drop.ignorenonexistent為真。
8.2.3恍涂、 重新加載函數(shù)
RELOAD FUNCTION;
作為HIVE-2573宝惰,在一個(gè)HiveCLI會(huì)話創(chuàng)建永久的函數(shù)可能不會(huì)反映在創(chuàng)建函數(shù)之前被啟動(dòng)的HiveServer2或其他HiveCLI會(huì)話中。允許在HiveServer2或HiveCLI會(huì)話中執(zhí)行RELOAD FUNCTION再沧,以便裝載其他HiveCLI會(huì)話所做的永久函數(shù)的任何變更尼夺。
九、創(chuàng)建/刪除/授予/撤銷角色和權(quán)限
Hive廢棄的授權(quán)模式/Legacy模式炒瘸,提供了以下DDL語句的信息:
CREATE ROLE
GRANT ROLE
REVOKE ROLE
GRANT privilege_type
REVOKE privilege_type
DROP ROLE
SHOW ROLE GRANT
SHOW GRANT
有關(guān)Hive 0.13.0和更高版本中基于SQL標(biāo)準(zhǔn)的授權(quán)淤堵,請(qǐng)參見以下DDL語句:
- 角色管理命令
- CREATE ROLE
- GRANT ROLE
- REVOKE ROLE
- DROP ROLE
- SHOW ROLES
- SHOW ROLE GRANT
- SHOW CURRENT ROLES
- SET ROLE
- SHOW PRINCIPALS
- 對(duì)象權(quán)限命令
- GRANT privilege_type
- REVOKE privilege_type
- SHOW GRANT
十、顯示
- 顯示數(shù)據(jù)庫
- 顯示表/視圖/分區(qū)/索引
- 顯示表
- 顯示視圖
- 顯示分區(qū)
- 顯示表/分區(qū)擴(kuò)展
- 顯示表屬性
- 顯示創(chuàng)建表
- 顯示索引
- 顯示列
- 顯示函數(shù)
- 顯示授予的角色和權(quán)限
- 顯示鎖
- 顯示配置
- 顯示事務(wù)
- 顯示緊縮
這些語句提供了一種查詢Hive Metastore
以獲取該Hive
系統(tǒng)中可訪問的現(xiàn)有數(shù)據(jù)和元數(shù)據(jù)的方法顷扩。
10.1拐邪、 顯示數(shù)據(jù)庫
SHOW (DATABASES|SCHEMAS) [LIKE 'identifier_with_wildcards'];
SHOW DATABASES或SHOW SCHEMAS列出所有在metastore定義的數(shù)據(jù)庫。SCHEMA和數(shù)據(jù)庫的用途是可以互換的,他們的含義相同隘截。
可選的LIKE子句允許使用正則表達(dá)式篩選數(shù)據(jù)庫列表扎阶。正則表達(dá)式中的通配符只能是匹配任意字符的*
或表示可選的|
。例如employees
婶芭、emp*
东臀、emp*|*ee
,所有這些都將與名為employees
的數(shù)據(jù)庫相匹配。
10.2、 顯示表/視圖/分區(qū)/索引
10.2.1、 顯示表
SHOW TABLES [IN database_name] ['identifier_with_wildcards'];
SHOW TABLES列出當(dāng)前數(shù)據(jù)庫所有的基礎(chǔ)表和視圖(或者使用IN或FROM子句顯式命名的數(shù)據(jù)庫)。表名與可選的正則表達(dá)式匹配。正則表達(dá)式中的通配符只能是任意字符的*
或是表示可選的|
户辱。例如page_view
、page_v*
、*view|page*
,所有這些都將與page_view
視圖相匹配。匹配視圖按字母順序列出申屹。如果在Metastore
中沒有找到匹配的視圖杆煞,則也不會(huì)報(bào)錯(cuò)派桩。如果沒有給出正則表達(dá)式范嘱,則列出所選數(shù)據(jù)庫中的所有表和視圖撕阎。
10.2.2棉饶、 顯示視圖
版本信息
在Hive2.2.0中通過hive-14558引入坑律。
SHOW VIEWS [IN/FROM database_name] [LIKE 'pattern_with_wildcards'];
SHOW VIEWS列出當(dāng)前數(shù)據(jù)庫所有的視圖(或使用IN或FROM子句顯式命名的數(shù)據(jù)庫)。視圖名與可選的正則表達(dá)式匹配。正則表達(dá)式中的通配符只能是任意字符的“”或是表示可選的“|”。例如‘page_view’、‘page_v’、‘view|page’,所有這些都將與‘page_view’視圖相匹配焰扳。匹配視圖按字母順序列出葫隙。如果在Metastore中沒有找到匹配的視圖,則也不會(huì)報(bào)錯(cuò)躏仇。如果沒有給出正則表達(dá)式恋脚,則列出所選數(shù)據(jù)庫中的所有視圖腺办。
例子
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_"
10.2.3、 顯示分區(qū)
SHOW PARTITIONS table_name;
SHOW PARTITIONS列出所有給表中現(xiàn)有的分區(qū)糟描。分區(qū)是按字母順序列出怀喉。
版本信息
從Hive 0.6開始,顯示分區(qū)可以過濾分區(qū)列表船响,如下所示躬拢。
另外,還可以指定一個(gè)分區(qū)規(guī)范的部分來篩選結(jié)果列表见间。
例子:
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)
版本信息
從Hive0.13.0開始聊闯,SHOW分區(qū)可以指定一個(gè)數(shù)據(jù)庫(HIVE-5912)。
SHOW PARTITIONS [db_name.]table_name [PARTITION(partition_spec)]; -- (Note: Hive 0.13.0 and later)
例:
SHOW PARTITIONS databaseFoo.tableBar PARTITION(ds='2010-03-03', hr='12'); -- (Note: Hive 0.13.0 and later)
10.2.4米诉、 擴(kuò)展顯示表/分區(qū)
SHOW TABLE EXTENDED [IN|FROM database_name] LIKE 'identifier_with_wildcards' [PARTITION(partition_spec)];
SHOW TABLE EXTENDED將列出匹配給定正則表達(dá)式所有表的信息菱蔬。如果指定分區(qū)標(biāo)識(shí),則用戶不能對(duì)表名使用正則表達(dá)式史侣。此命令的輸出包括像totalNumberFiles拴泌,totalFileSize,maxFileSize惊橱,minFileSize弛针,LastAccessTime和lastUpdateTime等等基本表信息和文件系統(tǒng)信息。如果分區(qū)存在李皇,它將輸出給定分區(qū)的文件系統(tǒng)信息削茁,而不是表的文件??系統(tǒng)信息。
例
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
10.2.5掉房、 顯示表屬性
SHOW TBLPROPERTIES tblname;
SHOW TBLPROPERTIES tblname("foo");
第一種形式列出了所有的表屬性茧跋,每行由制表符分隔。該命令的第二種形式只打印請(qǐng)求屬性的值卓囚。
欲了解更多信息瘾杭,請(qǐng)參閱上面創(chuàng)建表的TBLPROPERTIES內(nèi)容。
10.2.6哪亿、 顯示創(chuàng)建表
SHOW CREATE TABLE ([db_name.]table_name|view_name);
SHOW CREATE TABLE展示了創(chuàng)建一個(gè)給定的表CREATE TABLE語句粥烁,或者展示創(chuàng)建一個(gè)給定視圖的CREATE VIEW語句。
10.2.7蝇棉、 顯示索引
SHOW [FORMATTED] (INDEX|INDEXES) ON table_with_index [(FROM|IN) db_name];
SHOW INDEX顯示特定列上的所有索引讨阻,以及有關(guān)它們的信息:索引名稱、表名篡殷、用作鍵的列名钝吮、索引表名稱、索引類型和注釋。如果使用FORMATTED關(guān)鍵字奇瘦,則為每一列打印列標(biāo)題棘催,即按列輸出。
10.3耳标、 顯示列
SHOW COLUMNS (FROM|IN) table_name [(FROM|IN) db_name];
SHOW COLUMNS顯示表中包括分區(qū)列的所有列醇坝。
版本信息
SHOW COLUMNS(FROM | IN)TABLE_NAME [(FROM | IN)DB_NAME] [ LIKE 'pattern_with_wildcards'];
在Hive3.0新增 (HIVE-18373)
SHOW COLUMNS列出表中的所有列,其名稱與可選正則表達(dá)式相匹配次坡。正則表達(dá)式中只能是匹配任意字符的“”或表示可選的“|”纲仍。例如‘cola’,‘col’贸毕,‘a|col’,所有這些都將與‘cola’列相匹配夜赵。匹配列按字母順序列出明棍。如果在表中沒有找到匹配的列,也不會(huì)報(bào)告錯(cuò)誤寇僧。如果沒有給出正則表達(dá)式摊腋,則列出所選表中的所有列。
例子
-- 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";
10.4嘁傀、 顯示函數(shù)
SHOW FUNCTIONS "a.*";
SHOW FUNCTIONS列表顯示所有匹配正則表達(dá)式的用戶自定義函數(shù)和內(nèi)置函數(shù)兴蒸。要獲得所有函數(shù)使用“.*”
10.5、 顯示授予的角色和權(quán)限
Hive棄用授權(quán)模式/Legacy模式细办,其具有這些SHOW語句:
SHOW ROLE GRANT
SHOW GRANT
在Hive0.13.0及更高版本中橙凳,基于標(biāo)準(zhǔn)SQL的授權(quán)有以下SHOW語句:
SHOW ROLE GRANT
SHOW GRANT
SHOW CURRENT ROLES
SHOW ROLES
SHOW PRINCIPALS
10.6、 顯示鎖
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;
SHOW鎖顯示在表或分區(qū)上的鎖笑撞。有關(guān)鎖的信息岛啸,請(qǐng)參閱Hive并發(fā)模型。
SHOW LOCKS (DATABASE|SCHEMA)從Hive0.13支持?jǐn)?shù)據(jù)庫(見HIVE-2093)和從Hive0.14支持SCHEMA(見HIVE-6601)茴肥。SCHEMA和數(shù)據(jù)庫是可以互換的,他們的含義相同坚踩。
當(dāng)Hive正在使用事務(wù)時(shí),SHOW LOCKS返回如下信息(見HIVE-6460):
- 數(shù)據(jù)庫名稱
- 表名
- 分區(qū)名稱(如果表是分區(qū)表)
- 鎖處于的狀態(tài)瓤狐,其取值如下:
- “持有” - 請(qǐng)求者持有鎖
- “等待” - 請(qǐng)求者正在等待鎖
- “終止” - 鎖已超時(shí)瞬铸,但還沒有被清理
- 如果這個(gè)鎖處于“等待”狀態(tài),則鎖定該鎖的ID础锐。
- 鎖的類型嗓节,其可以是:
- “獨(dú)占” - 沒有人能同時(shí)持有鎖(主要由DDL操作獲得,如DROP表)
- “shared_read” - 可以在同一時(shí)間任意數(shù)量的shared_read鎖定相同的資源(通過讀取獲得皆警;令人困惑的是赦政,插入操作也獲得shared_read鎖)
- “shared_write” - 可同時(shí)任意數(shù)量shared_read鎖定同一資源,但不允許其他shared_write(通過更新而獲得和刪除)
- 與此鎖相關(guān)聯(lián)的事務(wù)ID,如果有的話
- 上一次持有該鎖的所有者發(fā)送心跳時(shí)間恢着,可表明它仍然活著
- 獲取鎖的時(shí)間桐愉,如果它已被獲取
- 請(qǐng)求鎖的Hive用戶
- 用戶運(yùn)行程序的主機(jī)
- 代理信息——幫助識(shí)別發(fā)出鎖請(qǐng)求的實(shí)體的字符串。對(duì)于SQL客戶端來說掰派,這是查詢ID从诲,對(duì)于流客戶端來說,它可能是Storm Blot ID(Storm)靡羡。
10.7系洛、 顯示CONF
SHOW CONF <configuration_name>;
SHOW CONF返回指定配置屬性的描述。
默認(rèn)值
需要的類型
描述
需要注意的是略步,SHOW CONF不顯示配置屬性的當(dāng)前值描扯。對(duì)于當(dāng)前屬性的設(shè)置,在CLI或HiveQL腳本趟薄、在Beeline中使用“set”命令(請(qǐng)參閱命令)(見Beeline Hive命令)绽诚。
10.8、 顯示事務(wù)
SHOW TRANSACTIONS;
SHOW TRANSACTIONS供管理員在啟用Hive事務(wù)時(shí)使用杭煎。它返回系統(tǒng)中所有當(dāng)前打開和中止的事務(wù)列表恩够,包括以下信息:
- 事務(wù)ID
- 事務(wù)狀態(tài)
- 啟動(dòng)事務(wù)的用戶
- 事務(wù)開始的服務(wù)器
- 當(dāng)事務(wù)開始的時(shí)間戳(自Hive2.2.0開始)
- 最后一次心跳檢測的時(shí)間戳(自Hive2.2.0開始 )
10.9、 顯示Compactions
SHOW COMPACTIONS;
當(dāng)啟用Hive事務(wù)時(shí)羡铲,SHOW COMPACTIONS返回當(dāng)前正在緊縮或計(jì)劃緊縮的表和分區(qū)的列表蜂桶,包括以下信息:
- “CompactionId” – 唯一標(biāo)識(shí)的內(nèi)部ID(從Hive3.0開始)
- “Database” - Hive數(shù)據(jù)庫名稱
- “Table” - 表名
- “Partition” - 分區(qū)名稱(如果表是分區(qū)表)
- “Type” - 無論是最大或最小的緊縮
- “State” – 緊縮任務(wù)所處的狀態(tài)秒紧,可以是:
- “初始化” - 在隊(duì)列中等待緊縮
- “工作中” – 正在緊縮
- “準(zhǔn)備清理” - 緊縮已經(jīng)完成约炎,舊文件正安排清潔
- “失敗” - 任務(wù)失敗。metastore日志中將有更多的細(xì)節(jié)埃篓。
- “成功” - OK
- “嘗試中” - 試圖安排緊縮雷恃,但失敗了钦购。metastore日志中將有更多的信息。
- “Worker” - 做緊縮工作者線程(只有在工作狀態(tài))的線程ID
- “開始時(shí)間” - 在該緊縮的開始時(shí)間(僅當(dāng)在工作或準(zhǔn)備清洗的狀態(tài))
- “持續(xù)時(shí)間(毫秒)” –緊縮所用的時(shí)間(從Hive2.2 )
- “HadoopJobId” -提交的Hadoop的工作標(biāo)識(shí)(從Hive2.2)
緊縮都是自動(dòng)啟動(dòng)的褂萧,但也可以用ALTER TABLE COMPACT語句手動(dòng)啟動(dòng)押桃。
十一、 描述
11.1导犹、 描述數(shù)據(jù)庫
DESCRIBE DATABASE [EXTENDED] db_name;
DESCRIBE SCHEMA [EXTENDED] db_name;
DESCRIBE DATABASE顯示數(shù)據(jù)庫的名稱唱凯,它的注釋(如果已設(shè)置)和在文件系統(tǒng)的根目錄位置。
SCHEMA和DATABASE的用途是可以互換的,他們的含義相同谎痢。
DESCRIBE SCHEMA在Hive1.1.0加入(HIVE-8803)磕昼。
EXTENDED也顯示了數(shù)據(jù)庫性屬性DBPROPERTIES节猿。
11.2票从、 Hive2.0+:語法變化
Hive2.0+:新語法
在Hive2.0發(fā)布以后漫雕,描述表的命令語法有變化,并不向后兼容峰鄙。詳見HIVE-12184浸间。
DESCRIBE [EXTENDED | FORMATTED]
[db_name.]table_name [PARTITION partition_spec] [col_name ( [.field_name] | [.'$elem/pre>] | [.'$key/pre>] | [.'$value/pre>] )* ];
警告:新語法可能影響到當(dāng)前的腳本。
不再接受表名和列名之間用點(diǎn)分隔吟榴,他們必須要空格分開魁蒜。DB和TABLENAME用點(diǎn)分隔。復(fù)雜類型數(shù)據(jù)的列名仍然可以包含點(diǎn)吩翻。
可選partition_spec必須出現(xiàn)在表名之后兜看、可選的列之前加入。而在之前的語法中狭瞎,列名出現(xiàn)在表名和partition_spec之間细移。
例子:
DESCRIBE FORMATTED default.src_table PARTITION (part_col = 100) columnA;
DESCRIBE default.src_thrift lintString.$elem$.myint;
11.3、 描述表/視圖/列
DESCRIBE [EXTENDED|FORMATTED]
[db_name.]table_name[ col_name ( [.field_name] | [.'$elem/pre>] | [.'$key/pre>] | [.'$value/pre>] )* ];
DESCRIBE語句顯示給定表包括分區(qū)列在內(nèi)的所有列熊锭,如果使用了Extended關(guān)鍵字弧轧,則以Thrift序列化形式顯示表的元數(shù)據(jù),這通常只對(duì)調(diào)試有用球涛,而不適用于一般用途。如果使用Formatted關(guān)鍵字校镐,則以表格形式顯示元數(shù)據(jù)亿扁。
注意:DESCRIBE EXTENDED僅顯示在數(shù)據(jù)加載時(shí)收集統(tǒng)計(jì)信息(請(qǐng)參閱新創(chuàng)建的表),以及使用HiveCLI而不是Thrift客戶端或Beeline時(shí)統(tǒng)計(jì)的行數(shù)鸟廓。HIVE-6285將解決這個(gè)問題从祝。盡管Analysis Table可以在加載數(shù)據(jù)后收集統(tǒng)計(jì)信息(請(qǐng)參閱現(xiàn)有表),但目前DESCRIBE EXTENDED沒有提供有關(guān)行數(shù)的信息引谜。
如果表擁有復(fù)合類型的列牍陌,可以通過使用表名 復(fù)合列名(field_name用于結(jié)構(gòu),''用于數(shù)組员咽,''用于map的鍵毒涧,''用于map的鍵值)查看該列的屬性。您可以遞歸地指定這一語法贝室,以剖析更復(fù)雜的列類型契讲。
對(duì)于視圖,可以使用DESCRIBE EXTENDED或FORMATTED來獲取視圖的定義滑频。提供了兩個(gè)相關(guān)屬性:由用戶指定的原始視圖定義和Hive內(nèi)部使用的擴(kuò)展定義捡偏。
版本信息 - 分區(qū)和非分區(qū)列
在Hive 0.10.0和更早版本中,在顯示描述表的列時(shí)峡迷,不區(qū)分分區(qū)列和非分區(qū)列银伟,從Hive 0.12.0開始,它們分別顯示。
在Hive 0.13.0及更高版本中彤避,配置參數(shù)hive.display.partion.cols.separately允許您使用舊的行為傅物,詳見Hive6689。有關(guān)示例忠藤,請(qǐng)參見用于Hive-6689修補(bǔ)程序中的測試用例挟伙。
修復(fù)bug于Hive0.10.0 - 數(shù)據(jù)庫限定符
在Hive0.7.0中引入了表名的數(shù)據(jù)庫限定符,但是在Hive0.10.0(hive-1977)中的bug修復(fù)之前模孩,表名的數(shù)據(jù)庫限定符會(huì)破環(huán)DESCRIBE尖阔。
修復(fù)bug于Hive0.13.0 - 帶引號(hào)的標(biāo)識(shí)符
在Hive 0.13.0之前,DESCRIBE沒有接受反引號(hào)(')包圍的表標(biāo)識(shí)符榨咐,因此不能將DESCRIBE用于與保留關(guān)鍵字(hive-2949和hive-6187)匹配的表名介却。
從0.13.0開始,當(dāng)配置參數(shù)hive.support.quoted.identifiers的默認(rèn)值為“column”時(shí)(hive-6013),反引號(hào)包圍內(nèi)的所有標(biāo)識(shí)符被字面處理块茁。唯一的例外是雙反引號(hào) (``)表示單個(gè)反引號(hào)字符齿坷。
11.4、 描述分區(qū)
DESCRIBE [EXTENDED | FORMATTED]
[db_name.]table_name [PARTITION partition_spec]
此語句列出給定分區(qū)的元數(shù)據(jù)数焊。輸出與Describe TABLE_NAME的輸出類似永淌。目前,在準(zhǔn)備計(jì)劃時(shí)不使用與特定分區(qū)相關(guān)聯(lián)的列信息佩耳。從Hive1.2(hive-10307)開始遂蛀,當(dāng)hive.typecheck.on.insert設(shè)置為true(默認(rèn)),partition_spec中指定的分區(qū)列的值將被驗(yàn)證干厚、轉(zhuǎn)換并歸一化為其列類型李滴。這些值可以是數(shù)字字符串。
例:
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)
11.5蛮瞄、 顯示列統(tǒng)計(jì)信息
版本信息
截止到Hive0.14.0所坯,見HIVE-7050和HIVE-7051。(ANALYZE TABLE的選項(xiàng)FOR COLUMNS 從Hive0.10.0開始)挂捅。
ANALYZE TABLE table_name COMPUTE STATISTICS FOR COLUMNS將計(jì)算指定表中所有列的列統(tǒng)計(jì)信息(如果對(duì)表進(jìn)行分區(qū)芹助,則計(jì)算所有分區(qū))。要查看收集的列統(tǒng)計(jì)信息闲先,可以使用以下語句:
DESCRIBE FORMATTED [db_name.]table_name column_name;
DESCRIBE FORMATTED [db_name.]table_name PARTITION (partition_spec) column_name;
見Hive統(tǒng)計(jì):可以對(duì)現(xiàn)有表執(zhí)行ANALYZE TABLE命令取得有關(guān)的詳細(xì)信息周瞎。
十二、 終止事務(wù)
版本信息
從Hive1.3.0到2.1.0 (見Hive事務(wù))饵蒂。
ABORT TRANSACTIONS transactionID [ transactionID ...];
ABORT TRANSACTIONS是從Hive Metastore中清除指定事務(wù)的ID声诸,這樣用戶就不需要直接與Metastore交互就可以刪除懸空或失敗的事務(wù)。中止事務(wù)在Hive1.3.0和2.1.0中加入(HIVE-12634)退盯。
例:
ABORT TRANSACTIONS 0000007 0000008 0000010 0000015;
這個(gè)命令可以與使用SHOW TRANSACTIONS配合使用彼乌。后者可以幫助找出被清理的候選事務(wù)ID泻肯。
翻譯說明
1、版本信息
除非版本是1.2以上慰照,過濾諸如 “Version Information As of Hive 0.9”之類的信息
2灶挟、個(gè)別術(shù)語保持英文,如:
Schema
分類: Hadoop生態(tài), Hive
標(biāo)簽: Hive 官方手冊(cè) 翻譯 DDL