notice
hive不像mysql、oracle这些数据库一样在insert的时候可以指定字段,必须在插入的时候插入的是全字段。
少一个也不行,只会按建表语句顺序匹配值。
在select中指定别名也不行。
这样也不行
insert overwrite table my.test_table partition(pt=1) select 2 as col2, 1 as col1
add column之后,在旧分区插入的新字段的数据查不到,显示为null。add column之后的新分区可以。
这是因为你对表结构进行了改变,但是历史分区的数据却没有做改变(新增分区不会出现这个情况)。
为了解决上面的问题,可以采用两种方式:
如果已经执行添加操作,并且没有带cascade,可以尝试下面的方法:
使用replace 恢复表结构,这样历史的分区数据都不会消失
alter table industry_db.product replace columns
(product_name string comment ‘产品名’);
在新增的时候加上cascade关键词
alter table my.test_table add columns(col3 int comment '第三列') cascade
一、直接将文件insert到本地或hdfs上
1.insert到本地,谁的本地?sql提交到的地方的本地,就是metastore或者hs2
INSERT OVERWRITE LOCAL DIRECTORY '路径'
ROW FORMAT DELIMITED FIELDS TERMINATED by ','
select * from datas;
2.insert到hdfs,这里分隔符的设置有些迷,比如@@##会变成@
INSERT OVERWRITE DIRECTORY '路径'
ROW FORMAT DELIMITED FIELDS TERMINATED by '@@##'
select * from datas;