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

   该语句显示指定分区列的元数据。

相关内容