1. 程式人生 > >Hive學習之函式DDL和Show、Describe語句

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

   該語句顯示指定分割槽列的元資料。