创建表
简单的建表
create table
spec_table_from_textfile(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)
从查询结果创建表
create table table2
as select phone_num,real_name,id_card,create_time
from table1
where info_from like '%18%'
克隆表
create table like tablename1
- 此处是指克隆表结构,并不会克隆表数据。
创建从格式化文本文件导入的表
create table
spec_table_from_textfile(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)
row format delimited
fields terminated by ','
stored as textfile
创建 orc 表
create table
spec_table_orc(
id bigint,
table_code string,
table_name string,
table_common string,
column_code string,
column_name string,
column_common string)
clustered by (id) into 3 buckets
stored as orc TBLPROPERTIES ('transactional'='true')
- ORC表支持行级delete、updata和insert等操作,但需要配置HIVE相关配置文件,具体操作点击链接。
导入数据至表
Hive表接受批量插入,一般不支持逐条记录插入的insert
SQL语句。
从查询数据导入
若目标表和数据源表的表结构一至:
insert into table xx select * from xx where xxx
- 字段数据结构不一致Hive会尝试转换,转换不了的置
NULL
导入时指定特殊值
insert into
spec_test(
id,
table_code,
table_name,
filed_code,
filed_name,
category
)
select *,'zx'
from spec_table2
- 一种适用的场景是在表合并时,对目标表新增的字段指定来源。
选择字段导入
insert into table
table1(
wp_id,
wp_phone,
wp_email,
wp_sex,
wp_birthday)
select * from table2
从文本文件导入
如上一小节创建从格式化文本文件导入的表,对应的建表后可在hive-shell
中指定文本文件路径导入,需要注意的是文本文件中字段和字段之间的分隔符必须和建表语句中指定的一至:
load data local inpath '/home/hive/zx/spec_table_from_textfile.txt' into table spec_table_from_textfile
查询表
与常见的SQL查询语句类似:
select * from spec_table where table_name like 'xx%' and table_name like '00%' limit 1000
修改表
修改名
alter table name old_name to new_name
增加字段
alter table spec_table2 add columns (category string);
- 在尾部增加
修改表结构
alter table spec_table2
replace columns (
id bigint,
table_code string,
table_name string,
filed_code string,
filed_name string
);
注:这个语句只是修改表结构并不会对数据进行操作,如果表中已经存在数据,你删除一个字段后再恢复会发现数据还在,同样如果你改变字段顺序,会发现数据错位了。
删除表
drop table xx