精华内容
下载资源
问答
  • 关键字: hive, partition, add column ...最近在查hive版本问题,发现在hive1.1.0和hive1.2.1上,分区表新增字段新增字段值为空的情况。 网上查了资料,提供了两种解决办法: 1. 修改hive元数据SDS表的CD_ID字段,

    关键字: hive, partition, add column

    hive JIRA:https://issues.apache.org/jira/browse/HIVE-6131 


    最近在查hive版本问题,发现在hive1.1.0和hive1.2.1上,分区表新增字段后新增字段值为空的情况。

    网上查了资料,提供了两种解决办法:

    1. 修改hive元数据SDS表的CD_ID字段,原因是修改表结构后,元数据库中的SDS中该表对应的CD_ID会改变,但是该表分区下面对应的CD_ID还是原来表的CD_ID

    2.删除当前分区重建

    这两个办法都不太适应,办法1修改元数据库风险大,办法2可能会导致数据丢失。

    老大给的任务是其他办法workaround。

    通过测试发现如下规律,先给出结论:

    在分区表里增加字段后,向分区表插入数据有两种情况:
    1.分区在修改表结构前存在
    2.分区在修改表结构前不存在
    对于第二种情况,bug不存在
    针对第一种情形,
    执行alter table denglg add columns(c3 string);  查分区数据新增字段值为空,
    需再执行alter table denglg partition(step='1') add columns(c3 string);【假设当前只有step='1'的分区】

    具体测试如下,可以参考看看

    1.新建分区表,插入两个分区的数据

       CREATE TABLE testtmp.denglg(c1 string, c2 string)PARTITIONED BY (step string);
        insert into table testtmp.denglg partition(step='1') select '1','2' from default.dual;
        insert into table testtmp.denglg partition(step='2') select '11','22' from default.dual;
      hive> select * from denglg where step='1';   hive> select * from denglg where step='2';
      OK                                           OK
      1 2 1                              1122 2 


    2.新增字段c3 
    alter table denglg add columns(c3 string);
    3.向三个分区插入数据
       insert into table testtmp.denglg partition(step='1') select '1','2','3' from default.dual;
       insert into table testtmp.denglg partition(step='2') select '11','22','33' from default.dual;
       insert into table testtmp.denglg partition(step='3') select '111','222','333' from default.dual;
    hive> select * from denglg where step='1';
    OK
    1 2 NULL1
    1 2 NULL1
    Time taken: 0.122 seconds, Fetched: 2 row(s)
    hive> select * from denglg where step='2';
    OK
    11 22 NULL2
    11 22 NULL2
    Time taken: 0.075 seconds, Fetched: 2 row(s)
    hive> select * from denglg where step='3';
    OK
    111 222 333 3
    Time taken: 0.077 seconds, Fetched: 1 row(s)
    发现分区step=3不受影响
    4.执行alter table denglg partition(step='1') add columns(c3 string);
    hive> select * from denglg where step='1';
    OK
    1 2 NULL1
    1 2 31
    Time taken: 0.728 seconds, Fetched: 2 row(s)
    hive> select * from denglg where step='2';
    OK
    11 22 NULL2
    11 22 NULL2
    验证上述结论正确。


    展开全文
  • 对hive分区表新增字段后,在执行插入分区的动作,会发现其实数据文件中已经有新字段值了,但是在查询的时候新字段的值还是显示为null。 比如我们做一个简单的问题重现 我们先创建一个分区表xj_test1,往分区dt=...

    对hive分区表新增字段后,在执行插入分区的动作,会发现其实数据文件中已经有新字段值了,但是在查询的时候新字段的值还是显示为null。

    比如我们做一个简单的问题重现

    我们先创建一个分区表xj_test1,往分区dt=201501中插入一条数据:

    create table xj_test1(a string,b string) partitioned by (
    dt string)
    row format delimited fields terminated by ',';

    INSERT OVERWRITE TABLE xj_test1 PARTITION(dt=201501)
    select '1','1' from dual


    然后我们新加一个字段:

    alter table xj_test1 add columns (c string);

    再往上面的那个分区中插入数据:

    INSERT OVERWRITE TABLE xj_test1 PARTITION(dt=201501)
    select '1','1','1' from dual

    按照常理的话,现在查询201501分区的数据,应该显示1,1,1 。但是新加的字段c的值为null,在hdfs上该分区目录下面的数据文件中确实已经有c字段的值了,只是查询不出来。

    原因是修改表结构以后,元数据库中的SDS中该表对应的CD_ID会改变,但是该表分区下面对应的CD_ID还是原来表的CD_ID,

    比如我这边测试表叫:xj_test1,分区字段叫dt

    查看表的CD_ID:select CD_ID from SDS where LOCATION='hdfs://n1:8020/user/hive/warehouse/xj_test1' ,(假设我们这里查出来表的新的CD_ID值为35178)

    查看表的所有分区的CD_ID:SELECT * FROM SDS WHERE LOCATION LIKE 'hdfs://n1:8020/user/hive/warehouse/xj_test1/dt=%'

    我们需要手工更新一下现有分区的CD_ID的值为表CD_ID的值:

    UPDATE SDS SET CD_ID=35178 WHERE LOCATION LIKE 'hdfs://n1:8020/user/hive/warehouse/xj_test1/dt=%'

    然后我们再去查询一下表xj_test1,字段c的值可以正常的显示出来了。


    当然,删除分区重建也是可以的,具体选择哪种方法根据实际情况决定,毕竟删除分区是会删除数据的,如果不允许删除原来的数据,建议还是修改元数据。


    展开全文
  • 增加字段

    千次阅读 2012-10-11 12:38:27
    如果你创建一个表之后,想增加字段的话,是可以的,而且还能设置该字段的具体位置。 语法如下: ALTER TABLE 表名 ADD 字段名1 数据类型 [约束] [FIRST|AFTER 字段名2]; []之中是可选内容 先写个最简单的: ...

    如果你创建一个表之后,想增加字段的话,是可以的,而且还能设置该字段的具体位置。

    语法如下:

    ALTER TABLE 表名 ADD 字段名1 数据类型 [约束] [FIRST|AFTER 字段名2];

    []之中是可选内容

    先写个最简单的:

    ALTER TABLE user ADD phone VARCHAR(20);

    如果想添加约束,如下

    ALTER TABLE user ADD age INT(4) NOT NULL;

    设置字段的位置的语法有两个:

    一个你可以把字段加在所有字段的最前面:

    ALTER TABLE user ADD num INT(4) PRIMARY KEY FIRST;

    还有一个就是把字段加在某个字段后面,

    ALTER TABLE user ADD address VARCHAR(30) NOT NULL AFTER phone;

    上句的意思就是把address字段加在phone字段的后面。

    上面的都可以用desc 表名; 查看。

    展开全文
  • hive分区表新增字段新增字段值为空的情况。 在分区表里增加字段后,向分区表插入数据有两种情况: 1.分区在修改表结构前存在 2.分区在修改表结构前不存在 对于第二种情况,即加字段后跑的分区,bug不存在 针对第...

    hive分区表新增字段后新增字段值为空的情况。

    在分区表里增加字段后,向分区表插入数据有两种情况:
    1.分区在修改表结构前存在
    2.分区在修改表结构前不存在
    对于第二种情况,即加字段后跑的分区,bug不存在
    针对第一种情形,
    执行alter table HIVE_TALBLE add columns(aaa string);  查分区数据新增字段值为空,
    需再执行alter table HIVE_TALBLE  partition(pt_d='20171111') add columns(aaa string);【假设当前只有pt_d='20171111'的分区】

    3.add columns(aaa string) cascade;

    强制更新所有分区

    展开全文
  • 新增字段:alter table 表名 add 字段名 类型; 新增字段注释:comment on column 表.字段 is '注释'; 新增表注释 :comment on table 表名is '注释';
  • SQL---mysql新增字段

    万次阅读 多人点赞 2018-03-14 10:28:44
    ALTER TABLE people ADD COLUMN name VARCHAR(100) DEFAULT NULL COMMENT '姓名' AFTER age; 修改表 people 增加字段name 长度100 默认为null 备注:姓名 在age字段后面; ...
  • 新增字段 为atest集合新增一个字段content db.atest.update({},{$set:{content:""}},{multi:1}) 删除uname字段 db.atest.update({},{$unset:{uname:""}},false,true) 修改字段,把content改为mcontent db....
  • 语法:alter table 表名 add 新增字段名 字段类型 默认值... 2:修改字段名 语法:exec sp_rename '表名.字段名','修改字段名','COLUMN。 注意:更改对象名的任一部分都可能会破坏脚本和存储过程。 3:...
  • 一、新增字段、指定新增字段、加注释 alter table 表 add 新增字段 varchar(50) default null comment '注释' after 要加在那个字段的后面 二、删除字段
  • 直接手动添加字段会提示错误:需将表中数据清空才可新增字段,这样会影响原来的数据。 解决办法:使用sql语句进行添加 1、增加一个字段:(增加字段时,只能排在已有字段的后面,不能插到已有字段之间) Alter...
  • 大数据:hive新增字段之后

    千次阅读 2019-07-26 22:22:27
    问题:在hive表中增加字段后,向分区表中写入数据(包含新增字段),查询分区表数据发现新增字段值均为“NULL”! 原因分析:表结构新增字段与创建分区表的顺序不同,导致查询结果不同 1.创建分区在修改表结构之后...
  • sqlite新增字段

    千次阅读 2019-07-05 13:39:26
    不支持字段名称的改变,但是可以新增字段 1.修改表名称 ALTER TABLE 旧表名 RENAME TO 新表名 eg:ALTER TABLE or_sql_tableRENAME TO new_table; 2.添加字段 ALTER TABLE 表名 ADD COLUMN 列名 数据类型 ...
  • hive 修改字段类型和增加字段

    万次阅读 2018-12-04 15:34:13
    Hive 表修改字段类型 Alter table 表名 change column 原字段名称 现字段名称 数据类型   新增字段表 alter table 表名 add columns(字段名 数据类型)    
  • hive表新增字段和字段注释修改 alter table bi.mei_ike_trans_monthly_detail_i_m ADD COLUMNS (currency STRING COMMENT 'BIZHONG');
  • Oracle表新增字段后修改字段顺序

    千次阅读 2018-02-08 21:25:58
     工作中遇到:在为一个表新增字段后,新增字段在最后,想调整新增字段的位置。 1、原始方法:--新建临时表以存储正确的顺序 create table A_2 as select (column1,colum2,……A表中的顺序) from A_1 ;--删除表A...
  • mysql新增字段

    千次阅读 2018-04-10 15:27:38
    场景 线上数据库,新增字段 解决 ALTER TABLE `table_name` ADD COLUMN contract_status tinyint(1) DEFAULT 4 COMMENT '介绍' after `status`;
  • 最近公司做的一个需求,需要将现已有的50+万数据的索引新增一个字段,之前没有在索引中加过字段,记录一下新增字段的方法。 首先需要有一个已经存在的索引,下面先创建一个索引skus PUT /skus { "settings": { ...
  • ODPS 表新增字段

    千次阅读 2020-10-14 17:24:01
    ODPS 表新增字段 alter table tableName add columns(fiedldName string) ;
  • 1、表(t_tbl)增加字段 – 添加一个名为 col_name_add 的字符字段 alter table t_tbl add column col_name_add varchar(20); 2、修改字段名 – 将 col_name_old 的字段名改为 col_name_new 的字段名 alter ...
  • Oracle 之 表新增字段后修改字段顺序

    千次阅读 2019-05-20 11:33:00
    工作中遇到:在为一个表新增字段后,新增字段在最后,想调整新增字段的位置。 1、原始方法: --新建临时表以存储正确的顺序 create table A_2 as select (column1,colum2,……A表中的顺序) from A_1 ; -...
  • 数据库表新增字段

    2020-01-14 11:33:45
    新增字段SQL --PositionInfo表增加Requirement字段。 IF EXISTS ( SELECT 1 FROM SYSOBJECTS T1 INNER JOIN SYSCOLUMNS T2 ON T1.ID=T2.ID WHERE T1.NAME='PositionInfo' AND T2.NAME='Require...
  • 末尾新增字段 ALTER TABLE student ADD age INT(4) COMMENT '年龄'; 开头新增字段 ALTER TABLE student ADD age INT(4) COMMENT '年龄' FIRST; 在中间新增字段 ALTER TABLE student ADD age INT(4) COMMENT '年龄'...
  • oracle增加字段、删除字段、修改字段类型
  • 金仓数据库新增字段

    2020-07-29 00:30:01
    3、金仓数据库有增加字段的方法:但是在表尾添加字段,不方便select * ....因为有备用字段的存在 金仓数据库有 查询管理器: kingbaseES/bin目录下----->使用命令 javatools.sh JSQL 企业管理器:k...
  • ES新增字段

    千次阅读 2017-08-25 17:32:35
    Elasticsearch中的mapping一旦创建,就不...我们经常会遇到新增字段。很简单。 /索引/_mapping/类型 {  "customer": { //类型  "properties": {  "submit_channels": { /
  • mysql增删改查基本语句: 1、修改表名: rename table 旧表名 to 新...4、增加字段: alter table 表名 add 字段字段类型(长度) //批量增加字段 alter table 表名 add (字段名1 字段类型(长度),字段名2 字

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 787,986
精华内容 315,194
关键字:

增加字段