Hive编程之Hive中的数据库

Hive中的数据库概念本质上仅仅是表的一个目录或者命名空间。
在所有数据库相关命令中,SCHEMA==TABLE;
列举出所有以字母h开头的数据库名:

hive> SHOW DATABASES LIKE 'h.*';

一个数据库有一个目录, 表以这个目录的字目录形式存储。
数据库所在目录位于hive.metastore.warehose.dir所指定的顶层目录之后,即/user/hive/warehouse,当我们创建数据库finacials时,Hive将会对应地创建一个目录/user/hive/warehouse/financials.db.
用户可以通过命令修改这个默认设置:

hive>CREATE DATABASES financials LOCATION '/my/preferred/directory';

本地模式下,hive返回的数据库存储目录类似

file:///user/hive/warehouse/financials.db.
hdfs:///user/hive/warehouse/financials.dbhdfs://master-server/user/hive/warehouse/financials.db是等价的。

删除数据库

删除数据库需要先删除库中的表,可以在删除命令的后面加上CASCADE关键字,使hive自行删除这些表:

hive> DROP DATABASES IF EXISTS financials CASCADE;

在指定的数据库下面建表

ion Data Types” on page 43:
CREATE TABLE IF NOT EXISTS mydb.employees (
name
STRING COMMENT 'Employee name',
salary
FLOAT COMMENT 'Employee salary',
subordinates ARRAY<STRING> COMMENT 'Names of subordinates',
deductions
MAP<STRING, FLOAT>
COMMENT 'Keys are deductions names, values are percentages',
address
STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
COMMENT 'Home address')
COMMENT 'Description of the table'
TBLPROPERTIES ('creator'='me', 'created_at'='2012-01-02 10:00:00', ...)
LOCATION '/user/hive/warehouse/mydb.db/employees';

拷贝表的模式

CREATE TABLE IF NOT EXISTS mydb.employees2
LIKE mydb.employees;

查看表的详细表结构

DESCRIBE EXTENDED 数据库名(当前可省).表名;
你可以用FORMATTED代替 EXTENDED试试看!

hive> DESCRIBE EXTENDED mydb.employees;
name
string Employee name
salary float
Employee salary
subordinates
array<string>
Names of subordinates
deductions
map<string,float> Keys are deductions names, values are percentages
address struct<street:string,city:string,state:string,zip:int> Home address
Detailed Table Information
Table(tableName:employees, dbName:mydb, owner:me,
...
location:hdfs://master-server/user/hive/warehouse/mydb.db/employees,
parameters:{creator=me, created_at='2012-01-02 10:00:00',
last_modified_user=me, last_modified_time=1337544510,
comment:Description of the table, ...}, ...)

查看某一列的信息

DESCRIBE mydb.employees.salary;

管理表

目前所创建的都是管理表也称为内部表。hive会控制着数据的生命周期,当我们删除一个管理表时,hive表也会删除这个表中数据。

外部表

没有给予hive对数据的所有权,外部表指向一份数据,就可以使用hive查询了。删除时仅仅删除描述表的元数据信息,而不会删除数据。

CREATE EXTERNAL TABLE IF NOT EXISTS stocks (
exchange STRING,
symbol STRING,
ymd STRING,
price_open FLOAT,
price_high FLOAT,
price_low FLOAT,
price_close FLOAT,
volume INT,
price_adj_close FLOAT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/data/stocks';

分区表

CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
PARTITIONED BY (country STRING, state STRING);

查看分区信息

hive>show PARTITIONS employees;

在管理表中通过载入数据的方式创建分区

LOAD DATA LOCAL INPATH '${env:HOME}/california-employees'
INTO TABLE employees
PARTITION (country = 'US', state = 'CA');

Hive将会创建这个分区对应的目录…/employees/country=US/state=CA

外部分区表

CREATE EXTERNAL TABLE IF NOT EXISTS log_messages (
hms INT,
severity STRING,
server STRING,
process_id INT,
message STRING)
PARTITIONED BY (year INT, month INT, day INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

自定义表的存储格式

CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING>,
deductions MAP<STRING, FLOAT>,
address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT>
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

使用TEXTFILE就意味着每一行被认为是一个单独的记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值