Hive學習之函式DDL和Show、Describe語句
建立/刪除函式
建立臨時函式
下面的語句建立由class_name實現的臨時函式,該函式被建立後只能夠在當前會話中使用,會話結束後函式失效。實現函式的類可以是Hive類路徑中的任意類,可以使用Add Jar語句向Hive類路徑新增類。
CREATE TEMPORARY FUNCTION function_name AS class_name
刪除臨時函式
使用下面的語句可以刪除當前會話中的臨時函式:
DROP TEMPORARY FUNCTION [IF EXISTS] function_name
建立永久函式
在Hive-0.13版本及之後的版本中,自定義函式可以被註冊到元儲存中,這樣使用者可以在每次會話中都引用函式而不必每次都建立函式。下面是建立永久函式的語句:
CREATE FUNCTION[db_name.]function_name AS class_name [USINGJAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ]
在該語句中可以使用USING從句新增Jar檔案、普通檔案或者歸檔檔案,當函式第一次使用時,這些檔案將會新增到Hive環境中。若Hive不是以本地模式執行,file_uri是非本地URI,比如可以使HDFS路徑。可以使用引數hive.exec.mode.local.auto設定本地模式,將該引數的值設定為true則為本地模式,預設為false。如果指定了db_name,則函式將新增到指定的資料庫,否則新增到當前資料庫,引用當前資料庫中的函式只需指定函式名,引用非當前資料庫中的函式則需要使用全限定函式名db_name. function_name。
刪除永久函式
刪除永久函式的語句為:
DROP FUNCTION[IF EXISTS] function_name
Show語句
在前面學習各種DDL語句時,已經或多或少的使用了一些show語句,比如show databases、show tables等,下面將會系統全面地學習各種show語句。
Show Databases
完整的show databases語句如下,還可以使用LIKE從句利用正則表示式對資料庫進行過濾,不過萬用字元只能是*(任意字元)或者|(其它選擇),萬用字元需要使用單引號。
SHOW (DATABASES|SCHEMAS) [LIKE identifier_with_wildcards];
演示程式碼如下:
hive> show databases like 'lea*';
OK
learning
Time taken:0.304 seconds, Fetched: 1 row(s)
hive> show schemas like 'lea*';
OK
learning
Time taken:0.223 seconds, Fetched: 1 row(s)
Show Tables
Show Tables
SHOW TABLES [IN database_name] [identifier_with_wildcards];
該語句列出當前資料庫中所有的表和檢視,若使用IN從句則列出指定資料庫中的所有表和檢視,還可以使用正則表示式進行過濾,萬用字元和show databases中的萬用字元使用相同的規則,即只能使用*和|。表和檢視按照字母順序列出。
show Partitions
SHOW PARTITIONS table_name [PARTITION(partition_desc)]
該語句以字母順序列出指定表中的所有分割槽。還可以通過指定部分分割槽來過濾結果集:
hive> show partitions people;
OK
department=1/sex=0/howold=23
Time taken: 4.75seconds, Fetched: 1 row(s)
hive> show partitions people partition(department='1');
OK
department=1/sex=0/howold=23
Time taken:0.716 seconds, Fetched: 1 row(s)
hive> show partitions people partition(department='2');
OK
Time taken:0.376 seconds
從Hive-0.13版本開始還可以指定資料庫:
hive> show partitions learning.people;
OK
department=1/sex=0/howold=23
Time taken: 0.25seconds, Fetched: 1 row(s)
Show Table/Partition Extended
SHOW TABLE EXTENDED[IN|FROM database_name] LIKE identifier_with_wildcards [PARTITION (partition_desc)]
該語句列出匹配正則表示式的所有表的資訊,如果指定了PARTITION從句則不能使用正則表示式。該語句的輸出包括基礎表資訊和檔案系統資訊,如totalNumberFiles,totalFileSize, maxFileSize, minFileSize,lastAccessTime和 lastUpdateTime,如果使用了PARTITION則輸出指定分割槽的檔案系統資訊。
Show Table Properties
SHOW TBLPROPERTIES table_name;
SHOW TBLPROPERTIES table_name (‘屬性名’);
上面的第一個語句以每行一個的格式列出表table_name所有屬性,屬性和屬性值之間以tab分隔,第二個語句輸出指定屬性的值。
hive> show tblproperties table_properties;
OK
numFiles 0
last_modified_by hadoop
last_modified_time 1402456050
COLUMN_STATS_ACCURATE false
transient_lastDdlTime 1402456050
comment learning alter properties
numRows -1
totalSize 0
telephone 1234567
rawDataSize -1
Time taken:0.247 seconds, Fetched: 10 row(s)
hive> show tblproperties table_properties('telephone');
OK
1234567
Time taken:0.355 seconds, Fetched: 1 row(s)
Show Create Table
SHOW CREATETABLE ([db_name.]table_name|view_name)
該語句輸出建立指定表或者檢視的語句。如下:
hive> show create table people;
OK
CREATE TABLE `people`(
`name` string,
`age` int,
`mobile` string COMMENT 'change column name',
`birthday` date,
`address` string)
PARTITIONED BY (
`department` string,
`sex` string,
`howold` int)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
STORED ASINPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.mapred.SequenceFileOutputFormat'
LOCATION
'hdfs://hadoop:9000/user/hive/warehouse/learning.db/people'
TBLPROPERTIES (
'last_modified_by'='hadoop',
'last_modified_time'='1402539133',
'transient_lastDdlTime'='1402539133')
Time taken:0.477 seconds, Fetched: 22 row(s)
Show Indexes
SHOW [FORMATTED](INDEX|INDEXES) ON table_with_index [(FROM|IN) db_name]
該語句輸出特定表上的所有索引資訊,包括索引名稱、表名、被索引的列名、儲存索引的表名、索引型別和註釋。如果使用FORMATTED,會為上述資訊新增列標題,如下圖所示:
Show Columns
SHOW COLUMNS(FROM|IN) table_name [(FROM|IN) db_name]
該語句輸出給定表中包含分割槽列的所有列:
hive> show columns in people;
OK
name
age
mobile
birthday
address
department
sex
howold
Time taken:0.493 seconds, Fetched: 8 row(s)
Show Functions
SHOW FUNCTIONS"a.*"
該語句輸出匹配正則表示式的自定義和內建的函式,使用’.*’輸出所有函式。需要注意的是正則表示式中必須要有點號,否則不會匹配成功,見下面的例子:
hive>show functions 'av*';
OK
Timetaken: 0.022 seconds
hive>show functions 'av.*';
OK
avg
Timetaken: 0.039 seconds, Fetched: 1 row(s)
Show Locks
SHOW LOCKS<table_name>;
SHOW LOCKS<table_name> EXTENDED;
SHOW LOCKS<table_name> PARTITION (<partition_desc>);
SHOW LOCKS<table_name> PARTITION (<partition_desc>) EXTENDED;
上述語句顯示錶或者分割槽上的鎖,當使用Hive事務時,上述語句返回下面的資訊:
- 資料庫名稱
- 表名稱
- 分割槽名稱(若表存在分割槽)
- 鎖的狀態,可以是下面的一種:
- 獲得:請求者擁有鎖
- 等待:請求者等待鎖
- 終止:鎖已經超時但還未被清理
- 鎖的型別,可以是下面的一種:
- 獨佔鎖:其他任何使用者不可在同一時間擁有該鎖(大多數DDL語句使用該鎖,如刪除表)。
- 共享讀鎖:任意數量的共享讀鎖可以同時鎖定相同的資源(讀操作取得該鎖,令人困惑的是,插入操作也取得共享讀鎖)。
- 共享寫鎖:任意數量的共享讀鎖可以同時鎖定相同的資源,但其它共享寫鎖不允許鎖定已經被共享寫鎖定的資源(更新和刪除使用共享寫鎖)。
- 若存在與鎖關聯的事務,則顯示其ID
- 鎖的持有者最後一次傳送心跳(表明其還存活)的時間
- 如果鎖被獲得,則顯示獲得鎖的時間
- 請求鎖的使用者
- 使用者執行的主機
Show Transactions
SHOW TRANSACTIONS
事務是在Hive-0.13版本中引進的,管理員使用該語句查詢當前開啟或者終止的事務,包括如下資訊:
- 事務ID
- 事務狀態
- 啟動事務的使用者
- 事務啟動時所在的主機
Show Compactions
SHOW COMPACTIONS
該語句顯示當Hive事務被使用時,所有正在被壓縮或者預定壓縮的表和分割槽,包括下面的資訊:
- 資料庫名稱
- 表名
- 分割槽名稱(如果存在分割槽)
- 主壓縮還是次要壓縮
- 壓縮的狀態:
- 初始化:在佇列中等待壓縮
- 工作:正在被壓縮
- 準備清除:壓縮已經結束,舊檔案被安排清除
- 如果處於工作狀態,顯示壓縮執行緒的執行緒ID
- 如果處於工作狀態或者準備清除狀態,顯示壓縮開始的時間
Describe語句
Describe Database
DESCRIBE DATABASE db_name
該語句顯示給定資料庫的註釋(如果設定的話),在HDFS上的路徑和資料庫的擁有者,如下所示:
hive>describe database learning;
OK
learning hdfs://hadoop:9000/user/hive/warehouse/learning.db hadoop
Time taken:0.088 seconds, Fetched: 1 row(s)
hive>describe database default;
OK
default Default Hive database hdfs://hadoop:9000/user/hive/warehouse public
Time taken:0.216 seconds, Fetched: 1 row(s)
Describe Table/View/Column
DESCRIBE [EXTENDED|FORMATTED] [db_name.]table_name[DOT col_name ( [DOT field_name] |[DOT '$elem$'] | [DOT '$key$'] | [DOT '$value$'] )* ]
該語句顯示給定表包括分割槽列在內的所有列,如果使用了extended關鍵字,則以Thrift序列化形式顯示錶的元資料,如果使用formatted關鍵字,則以表格形式顯示元資料。如果表擁有複合型別的列,可以通過使用表名.複合列名('$elem$'用於陣列,'$key$'用於map的鍵,'$value$'用於map的鍵值)檢視該列的屬性。對於檢視DESCRIBE EXTENDED or FORMATTED可以用來獲取檢視的定義。兩個相關的屬性被提供:由使用者指定的原始檢視定義和由Hive內部使用的擴充套件定義。
Describe Partition
DESCRIBE [EXTENDED|FORMATTED] [db_name.]table_name PARTITION partition_spec
該語句顯示指定分割槽列的元資料。