网站建设网络安全,竞价推广和信息流推广,网页界面设计中表单的组成部分有哪四个,珠宝网站建设公司Hive表修改Loction 一、Hive中修改Location语句二、方案1 删表重建1. 创建表#xff0c;写错误的Location2. 查看Location3. 删表4. 创建表#xff0c;写正确的Location5. 查看Location 三、方案2 直接修改Location并恢复数据1.建表#xff0c;指定错误的Location#xff0… Hive表修改Loction 一、Hive中修改Location语句二、方案1 删表重建1. 创建表写错误的Location2. 查看Location3. 删表4. 创建表写正确的Location5. 查看Location 三、方案2 直接修改Location并恢复数据1.建表指定错误的Location并插入数据2.修改表的Location3.对于新分区插入数据时新分区的路径会按照表的Location生成4.修复历史分区数据通过hdfs命令修复 一、Hive中修改Location语句
ALTER TABLE table_name [PARTITION partition_spec] SET LOCATION new location;从修改Location语句可以看出可以修改表的Location也可以修改分区的的Location。 工作中建表时一般会显式指定表的Location即数据的存储位置。 有时可能因为一些原因建表时Location写错了这里给出一些解决方案。
二、方案1 删表重建
对于新建的表或者无下游依赖的表可以选择删除表重新创建这种方式比较简单仅做简单演示。
1. 创建表写错误的Location
CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_alter_location
(id INT COMMENT 编号
) COMMENT 修改Location测试
PARTITIONED BY (pt_day VARCHAR(8) COMMENT 天分区)
LOCATION hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test
;2. 查看Location
DESC FORMATTED bi.test_alter_location;3. 删表
DROP TABLE IF EXISTS bi.test_alter_location;这里需要注意一下因为创建的是外部表删表时并不会删除数据。因此需要检查一下该表的Location下是否有数据有的话就进行删除。 检查语句如下
hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test;从查询结果来看我这里没有数据。下面给出删除语句供需要的人使用。 删除数据命令如下
hdfs dfs -rm -r hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test;4. 创建表写正确的Location
创建语句如下
CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_alter_location
(id INT COMMENT 编号
) COMMENT 修改Location测试
PARTITIONED BY (pt_day VARCHAR(8) COMMENT 天分区)
LOCATION hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location
;5. 查看Location
DESC FORMATTED bi.test_alter_location;三、方案2 直接修改Location并恢复数据
1.建表指定错误的Location并插入数据
建表
CREATE EXTERNAL TABLE IF NOT EXISTS bi.test_alter_location_right
(id INT COMMENT 编号
) COMMENT 修改Location测试
PARTITIONED BY (pt_day VARCHAR(8) COMMENT 天分区)
LOCATION hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_wrong
;插入数据
INSERT OVERWRITE TABLE bi.test_alter_location_right
PARTITION (pt_day 20240127)
VALUES(1)
,(2)
;查看数据
SELECTid
FROM bi.test_alter_location_right
WHERE pt_day 20240127
;查看Location
DESC FORMATTED bi.test_alter_location_right PARTITION(pt_day 20240127);从后台查看文件情况
hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_wrong/pt_day202401272.修改表的Location
修改语句
ALTER TABLE bi.test_alter_location_right SET LOCATION hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_right;查看表Location
DESC FORMATTED bi.test_alter_location_right;3.对于新分区插入数据时新分区的路径会按照表的Location生成
新分区插入数据
INSERT OVERWRITE TABLE bi.test_alter_location_right
PARTITION (pt_day 20240128)
VALUES(3)
,(4)
;查看新分区的Location
DESC FORMATTED bi.test_alter_location_right PARTITION(pt_day 20240128);4.修复历史分区数据通过hdfs命令修复
修复命令
hdfs dfs -mv hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_wrong/pt_day20240127 hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_right/pt_day20240127查看新老路径下数据情况
hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_wrong/pt_day20240127hdfs dfs -ls hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_right/pt_day20240127从执行结果可以看出数据已从老路径移动到新路径下了 通过表查询数据
SELECTid
FROM bi.test_alter_location_right
WHERE pt_day 20240127
;可以看到并没有查询出数据。这是因为分区的Location未修改的缘故。 查询分区的Location
DESC FORMATTED bi.test_alter_location_right PARTITION(pt_day 20240127);修改分区的Location
ALTER TABLE bi.test_alter_location_right PARTITION(pt_day 20240127) SET LOCATION hdfs://hadoop102:8020/user/hive/warehouse/bi.db/test_alter_location_right/pt_day20240127;再次查询数据
SELECTid
FROM bi.test_alter_location_right
WHERE pt_day 20240127可以看出修改分区的Location后可以正常查询数据了数据修复完成。