hive删除数据库
① hive drop partition会不会删除全部数据
ALTER TABLE DROP PARTITION 用于删除table中某个PARTITION和其中的数据,主要是用于历史数据的删除。如果还想保留数据,就需要合并到另一个partition中。 删除该partition之后,如果再insert该partition范围内的值
② Hive分区表怎么删除一个新添加的字段
声明接受任意属性,我们希望在一个表中修改以下语法。
ALTER TABLE name RENAME TO new_name
ALTER TABLE name ADD COLUMNS (col_spec[, col_spec ...])ALTER TABLE name DROP [COLUMN] column_name
ALTER TABLE name CHANGE column_name new_name new_type
ALTER TABLE name REPLACE COLUMNS (col_spec[, col_spec ...])
Rename To… 语句
下面是查询重命名表,把 employee 修改为 emp。
hive> ALTER TABLE employee RENAME TO emp;
JDBC 程序
在JDBC程序重命名表如下。
import java.sql.SQLException;import java.sql.Connection;import java.sql.ResultSet; import java.sql.Statement;import java.sql.DriverManager;public class HiveAlterRenameTo {
private static String driverName = "org.apache.hadoop.hive.jdbc.HiveDriver";
public static void main(String[] args) throws SQLException {
// Register driver and create driver instance
Class.forName(driverName);
// get connection
Connection con = DriverManager.getConnection("jdbc:hive://localhost:10000/userdb", "", "");
// create statement
Statement stmt = con.createStatement();
// execute statement
stmt.executeQuery("ALTER TABLE employee RENAME TO emp;");
System.out.println("Table Renamed Successfully");
con.close();
}}
将该程序保存在一个名为HiveAlterRenameTo.java文件。使用下面的命令来编译和执行这个程序。
$ javac HiveAlterRenameTo.java
$ java HiveAlterRenameTo
输出
Table renamed successfully.
③ hive 怎么在不删除数据 的情况下,重新建表
insert overwrite table t_table1 select * from t_table1 where XXXX;
其中xxx是你需要保留的数据的查询条件。
如果清空表,如下:
insert overwrite table t_table1 select * from t_table1 where 1=0;
④ Hive中怎样强制删除数据库
insert overwrite table t_table1 select * from t_table1 where XXXX;
其中xxx是你需要保留的数据的查询条件。
如果清空内表,如容下:
insert overwrite table t_table1 select * from t_table1 where 1=0;
⑤ hive中怎么删除表中的部分数据
工具:(1)HIVE;
(2)电脑;
(3)Xshell;
采用hdfs命令进行删除表中的部分数据:
1、先使用hdfs查看该表实际分区以及数据目录位置
hdfs dfs -ls /user/hive/warehouse/tbdata.db/表名小写/;
⑥ 在hive中怎样删除一张有数据的外部表,包括删除数据
Hive的数据管理:
(1)元数据存储
Hive 将元数据存储在 RDBMS 中,有三种模式可以连接到数据库:
Single User Mode:此模式连接到一个 In-memory 的数据库 Derby,一般用于 Unit Test。
Multi User Mode:通过网络连接到一个数据库中,这是最常用的模式。
Remote Server Mode:用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer,客户端则利用 Thrift 协议通过 MetaStoreServer来访问元数据库。
(2)数据存储
首先,Hive 没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由地组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,它就可以解析数据了。
其次,Hive 中所有的数据都存储在 HDFS 中,Hive 中包含4种数据模型:Table、External Table、Partition、Bucket。
Hive 中的 Table 和数据库中的 Table 在概念上是类似的,每一个 Table 在 Hive 中都有一个相应的目录来存储数据。例如,一个表 pvs,它在 HDFS 中的路径为:/wh/pvs,其中,wh 是在 hive-site.xml 中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。
Partition 对应于数据库中Partition 列的密集索引,但是 Hive 中 Partition 的组织方式与数据库中的很不相同。在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 数据都存储在对应的目录中。例如:pvs 表中包含 ds 和 city 两个 Partition,则对应于 ds = 20090801, city = US 的 HDFS 子目录为:/wh/pvs/ds=20090801/city=US;对应于 ds = 20090801, city = CA 的 HDFS 子目录为:/wh/pvs/ds=20090801/city=CA。
Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了便于并行,每一个 Buckets对应一个文件。将 user 列分散至 32 个Bucket上,首先对 user 列的值计算 hash,比如,对应 hash 值为 0 的 HDFS 目录为:/wh/pvs/ds=20090801/city=US/part-00000;对应hash 值为 20 的 HDFS 目录为:/wh/pvs/ds=20090801/city=US/part-00020。
External Table 指向已经在 HDFS 中存在的数据,可以创建 Partition。它和 Table 在元数据的组织结构上是相同的,而在实际数据的存储上则有较大的差异。
在Table 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成)中,实际数据会被移动到数据仓库目录中。之后对数据的访问将会直接在数据仓库的目录中完成。删除表时,表中的数据和元数据将会被同时删除。
External Table 只有一个过程,因为加载数据和创建表是同时完成的。实际数据是存储在 Location 后面指定的 HDFS 路径中的,它并不会移动到数据仓库目录中。
(3)数据交换
数据交换主要分为以下几个部分
⑦ hive中误删除了数据库,怎么恢复
--开启行移动功能
alter table 表名 enable row movement;
--恢复表数据
flashback table 表名 to timestamp to_timestamp('2014-05-19 09:40:00','yyyy-mm-dd hh24:mi:ss');
上述时间为删除数据的时间
备注:恢复后请关闭行移动功能
⑧ 删除Hive分区中的某条记录该如何操作用了以下语句总报错
insert overwrite table t_table1 select * from t_table1 where XXXX;
其中xxx是你需要保留的数据的查询条件。
如果清空表,如下:
insert overwrite table t_table1 select * from t_table1 where 1=0;
⑨ hive中怎样删除分区
准备好环境,小编这边环境已经有了,就不讲解如何搭建环境,毕竟搭建一套大数据需要一段时间的。
准备一个分区表
show partitions 表名
方法1:使用hive自带sql语法进行删除
alter table 表名 drop partition (etl_dt=20161118);
再次查看20161118分区还在不在,如果分区不在了,说明该分区已经被删除,数据也已被清空。
show partitions 表名;
方法2:采用hdfs命令进行清空
这个表还剩下一个分区,咱们把这个分区也清空。
先使用hdfs查看该表实际分区以及数据目录在哪
hdfs dfs -ls /user/hive/warehouse/tbdata.db/表名小写/
或者
hadoop fs -ls /user/hive/warehouse/tbdata.db/表名小写/
两个命令效果一样
使用hdfs命令删除该分区20161124目录
hdfs dfs -rm -r -f /user/hive/warehouse/tbdata.db/表名小写/etl_dt=20161124
最后在查看没有分区目录了
最查看进hive命令行查看此表是否还有数据
⑩ hive误删了dhfs上的数据怎么恢复
--开启行移动功能
alter table 表名 enable row movement;
--恢复表数据
flashback table 表名 to timestamp to_timestamp('2014-05-19 09:40:00','yyyy-mm-dd hh24:mi:ss');
上述时间为删除数据的时间
备注:恢复后请关闭行移动功能
,