如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区中的col1将为空且无法更新,即便insert overwrite该分区也不会生效。
解决方法:
解决方法很简单,就是增加col1时加上cascade关键字。示例如下:
加深记忆的方法也很简单,cascade的中文翻译为“级联”,也就是不仅变更新分区的表结构(metadata),同时也变更旧分区的表结构。
ADD COLUMNS lets you add new columns to the end of the existing columns but before the partition columns. This is supported for Avro backed tables as well, for Hive 0.14 and later.
REPLACE COLUMNS removes all existing columns and adds the new set of columns. This can be done only for tables with a native SerDe (DynamicSerDe, MetadataTypedColumnsetSerDe, LazySimpleSerDe and ColumnarSerDe). Refer to Hive SerDe for more information. REPLACE COLUMNS can also be used to drop columns. For example, "ALTER TABLE test_change REPLACE COLUMNS (a int, b int)" will remove column 'c' from test_change's schema.
The PARTITION clause is available in Hive 0.14.0 and latersee Upgrading Pre-Hive 0.13.0 Decimal Columns for usage.
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.
refer:https://blog.csdn.net/longshenlmj/article/details/51702343
#Hive建外部External表(外部表external table):
#
#添加分区并加载分区数据:
alter table table_name add partition (proc_date='${hivevar:pdate}') location '...'(不改变源数据存储位置)
alter table table_name add if not exsit partition (proc_date='${hivevar:pdate}') location 'hdfs://hdfscluster/'
load data inpath '...' into table table_name partition(proc_date='${hivevar:pdate}')(会将源数据切到hive表指定的路径下)
#删除分区: alter table table_name drop if exists partition(proc_date='${hivevar:pdate}')
#TBLPROPERTIES
实际上就是table properties,TBLPROPERTIES允许开发者定义一些自己的键值对信息。可以对TBLPROPERTIES进行查看和修改(部分可修改)。在TBLPROPERTIES中有一些预定义信息,比如last_modified_user和last_modified_time,其他的一些预定义信息包括:
#tplproperties属性参考
(1)comment:可以用来定义表的描述信息。
(2)hbase.table.name:hive通过 storage handler(暂放)将hive与各种工具联系起来,这是是使用hive接入hbase时,设置的属性(暂放)。
(3)immutable:顾名思义‘不可变的’,当表的这个属性为true时,若表中无数据时可以insert数据,但是当表已经有数据时,insert *** 作会失败。不可变表用来防止意外更新,避免因脚本错误导致的多次更新,而没有报错。本人实际中还没用到这个属性。
(4)orc.compress:这是orc存储格式表的一个属性,用来指定orc存储的压缩方式(暂放)。
(5) transactional,NO_AUTO_COMPACTION,compactor.mapreduce.map.memory.mb,compactorthreshold.hive.compactor.delta.num.threshold,compactorthreshold.hive.compactor.delta.pct.threshold:这5个属性与hive的事务支持有关,先不做了解。
(6)auto.purge:当设置为ture时,删除或者覆盖的数据会不经过回收站,直接被删除。配置了此属性会影响到这些 *** 作: Drop Table, Drop Partitions, Truncate Table,Insert Overwrite。
(7)EXTERNAL:通过修改此属性可以实现内部表和外部表的转化。
#
1.Hive 表修改字段类型
Alter table 表名 change column 原字段名称 现字段名称 数据类型
2.新增字段表
alter table 表名 add columns(字段名 数据类型)
3.时间类型的字段设置为date时显示不出来的问题
将时间类型的字段修改为string就可以正常显示了
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)