Hive(二)——数据类型与文件格式
数据
-
基本数据类型
-
集合数据类型
-
分隔符
# 数据:
John Doe^A100000.0^AMary Smith^BTodd Jones^AFederal Taxes^C.2^BStateTaxes^C.05^ BInsurance^C.1^A1 Michigan Ave.^BChicago^BIL^B60600
{
"name": "John Doe",
"salary": 100000.0,
"subordinates": ["Mary Smith", "Todd Jones"],
"deductions": {
"Federal Taxes": .2,
"State Taxes": .05,
"Insurance": .1
},
"address": {
"street": "1 Michigan Ave.",
"city": "Chicago",
"state": "IL",
"zip": 60600
}
}
# 例:
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 # ROW FORMAT DELIMITED这组关键字必须要写在其他子句(除了STORED AS ... 子句)之前
FIELDS TERMINATED BY '\001'
COLLECTION ITEMS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n' # 子句LINES TERMINATED BY '…'和STORED AS …不需要ROW FORMAT DELIMITED关键字
STORED AS TEXTFILE; # Hive到目前为止对于LINESTERMINATED BY …仅支持字符‘\n’,也就是说行与行之间的分隔符只能为‘\n’
-
如果一个表表结构指定三个字段,而数据文件有五列,则后两列会被舍弃
-
如果某些字段是数值型的,但是Hive在读取时发现存在非数值型的字符串值的话,那么对于那些字段将会返回null值。————读时模式
-
如果数据库非常多的话,那么可以使用正则表达式匹配来筛选出需要的数据库名
hive >show databases like 'h.*';
-
建库语句使用LOCATION关键字可指定数据库位置(默认hive.metastore.warehouse.dir)
hive> CREATE DATABASE financials > LOCATION '/my/preferred/directory';
-
默认情况下,Hive是不允许用户删除一个包含有表的数据库的。用户要么先删除数据库中的表,然后再删除数据库;要么在删除命令的最后面加上关键字CASCADE,这样可以使Hive自行先删除数据库中的表
hive > DROP DATABASE IF EXISTS finacials CASCADE;
-
用户可以使用ALTER DATABASE命令为某个数据库的DBPROPERTIES设置键-值对属性值,来描述这个数据库的属性信息。数据库的其他元数据信息都是不可更改的,包括数据库名和数据库所在的目录位置
hive > ALTER DATABASE financials SET DBPROPERTIES ('edited-by' = 'Joe Dba');