如果使用如下语句新增列,可以成功添加列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.
全过程:1. 建立hive表映射到hbase表(建表的时候不能建外表)
2. 之后修改hive表属性,企图将内表改为外表,失败,不支持
3. 向hive表插入数据,hive中有结果,hbase中也有结果
4. 在hbase中插入数据,hbase中有结果,hive中也有结果
5. 在hbase中更新数据,hbase中结果有变化,hive中结果也有变化
6.用hive插入hbase中主键有重复的记录:在一次插入多条主键一样的记录时,只是将最后一条记录插入了;而且明明用的是overwrite,但是表里面原有的其他记录没有被覆盖;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)