精华内容
下载资源
问答
  • 问题描述今天同事让我把订单表新增一个字段,我新增好字段后,重跑脚本,验证数据的时候发现新增加的那个字段的值都是NULL。脚本通过insert overwrite覆盖T+1的历史数据。新增字段的sql是这样的altertable app.app_...

    问题描述

    今天同事让我把订单表新增一个字段,我新增好字段后,重跑脚本,验证数据的时候发现新增加的那个字段的值都是NULL。脚本通过insert overwrite覆盖T+1的历史数据。

    新增字段的sql是这样的

    altertable app.app_tar_order_dt addcolumns(brand_name stringCOMMENT'品牌名称');

    解决方案

    (1)将新增字段的sql改成如下所示,然后执行insert overwrite,再查询发现新增字段有数据了。

    altertable app.app_tar_order_dt addcolumns(brand_name stringCOMMENT'品牌名称') cascade;

    (2)通过对分区添加字段的方式,将新增字段的sql改成这样如下所示:

    altertable app.app_tar_order_dt partition(dt='2020-09-10') add columns(brand_name stringCOMMENT'品牌名称');

    (3)可以先将分区删除,然后重新insert overwrite,这样新的字段也会有值。

    altertable app.app_tar_order_dt droppartition(dt='2020-09-10');

    官方文档描述如下

    The CASCADE|RESTRICT clause is available in Hive 1.1.0. ALTER TABLE ADD|REPLACE COLUMNS with CASCADE command changes the columns of a table's metadata, and cascades the same change to all the partition metadata. RESTRICT is the default, limiting column changes only to table metadata.

    简单解释下,在Hive 1.1.0版本中可以使用CASCADE和RESTRICT语法,默认情况下是RESTRICT语法,RESTRICT语法只能更新表的元数据;而使用CASCADE语法的命令能同时更新表和分区元数据。

    注意:默认的RESTRICT语法对新分区没有影响,新增字段之后,如果是生成新的分区,新增字段会有值,Hive会自动维护新分区中的元数据。

    展开全文
  • 新分区正常,无论是内部表还是外部表均有该问题。 原因:使用alter table语句更新表结构时,由于默认更新现有表结构,对原有分区无改动,导致原有分区改变数据时,新字段为NULL 测试过程: 创建测试表: CREATE...

    背景:

    数仓开发过程中,经常会有需求变更,添加字段的情况很难免,添加完了字段需要重新写数据,重新将这个字段的数据overwrite进去,但是会出现一个问题,就是加载的数据为NULL。新分区正常,无论是内部表还是外部表均有该问题。 

    原因:
    使用alter table语句更新表结构时,由于默认更新现有表结构,对原有分区无改动,导致原有分区改变数据时,新字段为NULL

    测试过程:

    创建测试表:

    CREATE TABLE DEFAULT. COMPANYLEVEL_TEST(
    IDSTRING,
    PARENT_ID STRING, 
    LEVEL STRING
    )
    PARTITIONED BY('UPDATE_DATE' STRING)

    插入测试数据:

    INSERT OVERWRITE TABLE DEFAULT. COMPANYLEVEL_TEST PARTITION (UPDATE_DATE='2021-11-13')
    SELECT ID, PARENT ID, LEVEL FROM DEFAULT. COMPANYLEVEL

    数据正常:

    增加新列:

    --增加新列:ALTER TABLE表名ADD CoLUMNS(字段名称数据类型)
    ALTER TABLE DEFAULT.COMPANYLEVEL_TEST ADD COLUMNS(PARENT_EVEL STRING)

     插入新数据:

    INSERT OVERWRITE TABLE DEFAULT. COMPANYLEVEL_TEST PARTITION(UPDATE_DATE='2021-11-13')
    SELECT ID, PARENTID, LEVEL, PARENT_EVEL FROM DEFAULT. COMPANYLEVEL

    查看数据是否成功,结果新插入列数据显示为NULL

    解决办法:

    删除所插数据当天分区:

    alter table DEFAULT. COMPANYLEVEL_TEST drop partition(UPDATE_DATE='2021-11-13')

    再次执行SQL插入数据,结果显示正常。

    其他:

    查阅资料,实际上在添加字段是能够经过CASCADE关键字来避免出现这种问题。

    如:alter table table_name add columns(age int) CASCADE

    资料:

    LanguageManual DDL - Apache Hive - Apache Software Foundation

    展开全文
  • hive中如何新增字段

    2021-09-09 15:24:00
    1、方法1 alter table 表名 add columns (列名 string COMMENT '新添加的列') CASCADE; 与alter table 表名 add columns (列名 string COMMENT '新...2、方法2 (适用于外部表) 当分区过多的情况下,直接适用 ...

    1、方法1

    alter table 表名 add columns (列名 string COMMENT '新添加的列') CASCADE;
    
    alter table 表名 add columns (列名 string COMMENT '新添加的列');
    
    
    
    hive表中指定位置增加一个字段
    
    分两步,先添加字段到最后(add columns),然后再移动到指定位置(change)
    
    点击(此处)折叠或打开
    
    alter table 表名 add columns (列名 string comment '当前时间'); -- 正确,添加在最后
    alter table 表名 change 列名 string after 指定位置的列名; -- 正确,移动到指定位置,address字段的后面
    

    CASCADE会刷历史分区字段

    2、方法2 (适用于外部表)

    当分区过多的情况下,直接使用alter就行增加字段会报错

    第一步:

    删除分区 ,当分区过多可以写个for循环

    alter table table_name drop if exists partition(par_col=col_name)

    第二步:

    使用alter操作就行添加字段,这时候就不会因为分区过多报错

    第三步:

    进行修复分区

    msck repair table 表名;

    3、方法3(下下策)

    创建新表修改表名,进行存储原表数据

    将原表进行drop

    再对新表进行改名操作

    ALTER TABLE old_name RENAME TO new_name;

    展开全文
  • 有一个hive外部表,分区字段是tp和month,新增了几个字段fee_org_id,applied_date_time,pop_coop_mode_type_cd,fee_company后,insert overwrite重跑分区数据, SELECT * FROM app.app_yhzz_pop_bill_indicator...

    一、问题点

    有一个hive外部表,分区字段是tp和month,新增了几个字段fee_org_id,applied_date_time,pop_coop_mode_type_cd,fee_company后,insert overwrite重跑分区数据,

    SELECT * FROM app.app_yhzz_pop_bill_indicator_result WHERE tp = 'yt' AND month = '2021-04'

    用hive引擎查询如下,新增的几个字段是null

    而用presto查询如下,不为null

     

    使用alter table语句更新结构时,hive默认更新现有分区元数据,对原来已经存在的分区元数据不会变动,导致已经存在的分区新增字段后,重跑数据时,查询新增的字段值出现为null情况,而后来新增的分区就没有这样的问题

    至于presto查询有数据,而hive查询无数据,猜测应该是presto和hive使用的元数据不一样,hive使用自身的存储的元数据,presto没有使用元数据,应该是直接去hdfs获取的最新的表信息。

    二、解决方案

    1、删除分区后重建分区(推荐)

    删除分区

    ALTER TABLE app.app_yhzz_pop_bill_indicator_result DROP partition(MONTH = '2021-04') ;

    重新添加分区 

    ALTER TABLE app.app_yhzz_pop_bill_indicator_result ADD partition(tp = 'yt', MONTH = '2021-04') ;

    此方案,删除分区数据后,分区数不会删除,重新添加分区后,再次查询出来的字段就不为null了。缺点是分区很多的情况下,需要挨个执行

    2、删除表后重建表(不建议)

    此种方案为下策,删除表代价太大,数据也面临丢失风险,不到万不得已不可取

    3、命令修复表分(无效)

    有人说msck repair 可以,然而经过测试,无效,查询出来的依然为null

    msck repair TABLE app.app_yhzz_pop_bill_indicator_result;

     

    展开全文
  • 环境:hive-1.1.0-cdh5.13.0 重跑 insert overwrite table tablename partition(dt=’...重新insert overwrite 历史已存在的分区后发现 newCol字段为null,新分区正常,无论是内部表还是外部表均有该问题。 在新增
  • hive分区增加字段

    2021-06-05 15:05:17
    hive分区增加列 新增的列会以null展示 插入数据后还是显示null 如果放到第二天的分区,就能查出数据
  • 遇到问题:发现报文有新增字段的值,但是对应在SAP的内表字段,一直为空(原因:一致性检查那一步操作漏掉了) 分析方法:遇到以上问题,可以通过以下途径分析 1)postman 推送报文自测 2)soamanager 打开对应...
  • 创建并添加字段

    2021-08-03 01:15:10
    本文介绍如何创建、如何向中添加字段、如何设置的 主键 以及如何如何设置字段属性。在创建和添加字段之前,请确保已理解背景概念。 有关详细信息,请参阅简介。本文内容创建简单的数据库(如联系人...
  • 1,现象演示:创建数据库:create database if not exists ma_excomment 'manager_external'with ...我的另一篇博客详细介绍了Hive的数据库操作2,内部表演示创建内部(MANAGED _TABLE):创建内部也可以指定location...
  • 数据加载创建时加载create table newtable as select col1,col2 from oldtablehive> create table testNew as select name,addr from testtable;hive> select * from testNew;OKliguodong cdaobama ...
  • 概述今天主要介绍一下MySQL 8.0.19 instant add column的新特性,基于亿级数据秒速增加字段,下面一起来看看吧~一、MySQL DDL 的方法MySQL 在大型上的 DDL 会带来耗时较久、负载较高、额外空间占用、MDL、主从同步...
  • 1.查询user1 select * from mysql.user2.user中各字段的含义1 Select_priv:用户可以通过SELECT命令选择数据。2 Insert_priv:用户可以通过INSERT命令插入数据;3 Update_priv:用户可以通过UPDATE命令修改现有...
  • 添加一列并增加列字段注释

    千次阅读 2020-12-22 22:32:11
    HIVE是什么来自度娘百科的解释:hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。 其优点是学习成本低,可以...
  • PowerDesigner 通过脚本对表模型批量添加字段 脚本 Option Explicit Dim mdl ' the current model Set mdl = ActiveModel Dim Tab 'running table Dim col_1 Dim col_2 Dim col_3 Dim col_4 Dim col_5 ' ...
  • 初识 MyBatis MyBatis 是第一个支持自定义 SQL、存储过程和高级映射的...使 Map 接口和 POJO 类映射到数据库字段和记录。MyBatis 的特点 那么 MyBatis 具有什么特点呢?或许我们可以从如下几个方面来描述MyBatis 中...
  • 从spark1.2 到spark1.3,spark SQL中的...DataFrame将数据写入hive中时,默认的是hive默认数据库,insertInto没有指定数据库的参数,本文使用了下面方式将数据写入hive或者hive的分区中,仅供参考。1、将DataFra...
  • 查看分区describe formatted tableName partition(date_id="2019-01-07");查看table在hdfs上的存储路径及建表语句...操作分区和语句alter table tableName add IF NOT EXISTS partition(date_id="$year-$mon-$day...
  • 我发现下面的实体有错误(可能是由于一对多关系),但是我看不到如何解决该问题.课程:@ForeignCollectionField(eager = true)Collection grades;@DatabaseField(columnName = "ID", canBeNull = false)private long id...
  • 以下两个例子来自:...其中old表示tab2(被动触发),new表示tab1(主动触发,外部应用程序在此表里执行insert语句)例子1:创建两个,目的是在一个表里添加一条记录,另一个也添加一条记录:DROP TABLE ...
  • mysql 数据库新增用户

    2021-01-19 13:12:12
    1.user中host为%含义:Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。而%是个通配符,如果Host=192.168.1.%,那么就表示...
  • 本文围绕以下框架,对Hive及Mysql中,常用的字段/处理语句进行整理汇总。1. 创建(1)Hive(2)Mysql2. 字段重命名(1)Hive--改变列名/类型/位置/注释ALTERTABLE table_name CHANGE[CLOUMN] col_old_name col_new_...
  • Impala和hive一起使用,当我们在HIVE中新增一张时,我们发现在Impala中不能及时查看到新增表,这是因为元数据信息没有及时刷新,在impala里执行invalidate metadata命令刷新元数据即可。 这里我们简单测试 HIVE中...
  • ----------字段的编辑类型PB提供了六种编辑类型:1)Edit是字段的缺省编辑类型,可以用于所有类型的字段上。2)CheckBox编辑类型在这里是一种状态选择,可以为其规定选中和非选中状态时的文字,当字段的输入内容...
  • HIVE常用SQL语句及语法

    2020-12-22 22:32:06
    HIVE建内部表语句create table dll102.sougou(id string,pwd string,name string,count int,seqno int,address string)row ...创建字段中含有数组类型,对象类型的表,并查询特殊字段外部表默认 存在HDFS下的 ‘/use...
  • 达梦数据库提供基表修改语句,对基表的结构进行全面的修改,包括修改基表名、列名、增加列、删除列、修改列类型、增加级约束、删除级约束、设置列缺省值、设置触发器状态等一系列修改。通用格式:ALTER TABLE ...
  • MySQL 在大型上的 DDL 会带来耗时较久、负载较高、额外空间占用、MDL、主从同步延时等情况。需要特别引起重视,而MySQL 的 DDL 有很多种方法。 MySQL 本身自带三种方法,分别是:copy、inplace、instant。 copy ...
  • 其实OBJECT_TYPE为LOB就是大对象(LOB),它指那些用来存储大量数据的数据库字段。Oracle 11gR2 文档:一、LOB 分类LOB大对象主要是用来存储大量数据的数据库字段,在Oracle 9iR2 中LOB的最大容量是4G,Oracle 10g ...
  • oracle查询clob字段

    千次阅读 2021-05-04 05:07:55
    oracle 动态字段查询,,oracle动态获取字段,oracle... 经过上面的一系列查询优化, 最后测试在文章( AR- T ICLES) 拥有几十万条记录下的 Clob 字段查询, 发现查 询所花费的时间大约只 有 1 ......Oracle更新CLOB或CL...
  • SQLSERVER 添加一个不可为空的字段SqlServer 中当之前有记录的时候发现设计的不合理要加字段,但是alter table Skating_Consumption add MemberCardId numeric(9)只能加可为空的字段,解决办法,第一、加个为空...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 34,193
精华内容 13,677
关键字:

外部表新增字段