hive-insert

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;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值