首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HIVE: Insert into似乎正在覆盖现有表

HIVE是一个基于Hadoop的数据仓库基础设施,它提供了类似于SQL的查询语言HiveQL,用于处理大规模数据集。Hive的设计目标是提供简单易用的接口,使非专业的用户能够通过类似于SQL的查询语言来处理和分析大数据。

在Hive中,INSERT INTO语句用于将数据插入到现有表中。当执行INSERT INTO语句时,如果目标表已经存在,它将尝试覆盖现有表中的数据。

然而,需要注意的是,Hive并不是一个事务性数据库,它的插入操作是追加式的,而不是真正的覆盖。当执行INSERT INTO语句时,Hive会将新的数据追加到现有表的末尾,而不会删除或覆盖已有的数据。

这种行为对于数据仓库和批处理场景非常适用,因为它允许用户持续地将新数据添加到现有表中,而不会破坏已有的数据。然而,如果需要覆盖现有表中的数据,可以使用其他方法,如TRUNCATE TABLE语句先删除表中的数据,然后再执行INSERT INTO语句。

对于Hive的使用,腾讯云提供了TencentDB for Hive产品,它是一种高性能、高可靠性的云数据库服务,专为大数据场景而设计。您可以通过TencentDB for Hive来存储和查询大规模数据,并使用HiveQL语言进行数据分析和处理。

更多关于TencentDB for Hive的信息和产品介绍,您可以访问腾讯云官方网站的以下链接: https://cloud.tencent.com/product/thive

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

装载数据

装载数据 前面我们一起学习了创建表,那么下一步我们应该学会怎么把数据装载到表中,然后才能去查询吧! *Hive的四种常见的数据导入方式 (1)、从本地文件系统中导入数据到Hive表; (2)、从HDFS上导入数据到Hive表; (3)、从别的表中查询出相应的数据并导入到Hive表中; (4)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中。 一、从本地文件系统中导入数据到Hive表 --Hive没有行级别的数据插入、数据更新和删除操作,那么往表中装载数据的唯一途径就是使用一种“大量”的数据装载操作。 或者通过其他方式将数据写入到正确的目录下 先在Hive里面创建好表,如下: 1. hive> create table employees 2. > (id int, name string, 3. > tel string) 4. > ROW FORMAT DELIMITED 5. > FIELDS TERMINATED BY '\t' 6. > STORED AS TEXTFILE; 7. OK 8. Time taken: 2.832 seconds 本地文件系统里面有个/home/data/employees/employees.txt文件,内容如下: 1. [data@cdh54 ~]$ cat employees.txt 2. 1 zs 13666666666 3. 2 ls 13888888888 4. 3 ww 13777777777 employees.txt文件中的数据列之间是使用\t分割的,可以通过下面的语句将这个文件里面的数据导入到employees表里面,操作如下: 1. hive> load data local inpath ' /home/data/employees.txt' OVERWRITE table employees; 2. OK 3. Time taken: 3.567 seconds 解析:1.如果目标表是非分区表,那么语句中应该省略 PARTITION 子句 2.通常情况下指定的路径应该是一个目录,而不是单个独立的文件。Hive 会将所有文件都拷贝到这个目录中。 3. 如果使用了 LOCAL 这个关键字,那么这个路径应该为本地文件系统路径,数据将会被拷贝到目标位置 如果省略掉 LOCAL 关键字,那么这个路径应该是分布式文件系统中得路径 4.如果指定了 OVERWRITE 关键字,那么目标文件夹中之前存在的数据将会被先删除 如果没有这个关键字,仅仅会把新增的文件增加到目标文件夹中不会删除之前的数据 如果目标文件夹中已经存在和装载的文件同名的文件,那么旧的同名文件将会被覆盖重写 5.如果目标表是分区表那么需要使用 PARTITION 子句,而且我们还必须为每个分区的键指定一个值 6.对于 INPATH 这个路径有一个限制,那就是这个路径下不可以包含任何文件夹 二、HDFS上导入数据到Hive表   从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下(典型的情况是复制到上传用户的HDFS home目录下,比如/home/employees/),然后再将数据从那个临时目录下移动(注意,这里说的是移动,不是复制!)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,假设有下面这个文件/home/employees/add.txt,具体的操作如下: 1. [data@cdh54 /home/employees/hadoop-2.2.0]$ bin/hadoop fs -cat /home/employees/add.txt 2. 5 yy1 131222222222 3. 6 yy2 134444444444 4. 7 yy3 132111111111 5. 8 yy4 135555555555 上面是需要插入数据的内容,这个文件是存放在HDFS上/home/employees目录(和一中提到的不同,一中提到的文件是存放在本地文件系统上)里面,

02

hive模糊搜索表

1.hive模糊搜索表 show tables like '*name*'; 2.查看表结构信息 desc formatted table_name; desc table_name; 3.查看分区信息 show partitions table_name; 4.根据分区查询数据 select table_coulm from table_name where partition_name = '2014-02-25'; 5.查看hdfs文件信息 dfs -ls /user/hive/warehouse/table02; 6.从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字) LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config; --从查询语句给table插入数据 INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select * from stage.s_h02_click_log where dt='2014-01-22' limit 100; 7.导出数据到文件 insert overwrite directory '/tmp/csl_rule_cfg' select a.* from dim.dim_csl_rule_config a; hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"> /home/jrjt/testan/baitiao.dat; 8.自定义udf函数 1.继承UDF类 2.重写evaluate方法 3.把项目打成jar包 4.hive中执行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar; 5.创建函数create temporary function get_pro as 'jd.Get_Property'//jd.jd.Get_Property为类路径; 9.查询显示列名 及 行转列显示 set hive.cli.print.header=true; // 打印列名 set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能 set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数 10.查看表文件大小,下载文件到某个目录,显示多少行到某个文件 dfs -du hdfs://BJYZH3-HD-JRJT-4137.jd.com:54310/user/jrjt/warehouse/stage.db/s_h02_click_log; dfs -get /user/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0 /home/jrjt/testan/; head -n 1000 文件名 > 文件名 11.杀死某个任务 不在hive shell中执行 hadoop job -kill job_201403041453_58315 12.hive-wui路径 http://172.17.41.38/jobtracker.jsp 13.删除分区 alter table tmp_h02_click_log_baitiao drop partition(dt='2014-03-01'); alter table d_h02_click_log_basic_d_fact drop partition(dt='2014-01-17'); 14.hive命令行操作 执行一个查询,在终端上显示mapreduce的进度,执行完毕后,最后把查询结果输出到终端上,接着hive进程退出,不会进入交互模式。 hive -e 'select table_cloum from table' -S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。这个静音模式很实用,,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。 hive -S -e 'select table_cloum

02

hive基本操作整理

show tables like '*name*'; 2.查看表结构信息 desc formatted table_name; desc table_name; 3.查看分区信息 show partitions table_name; 4.根据分区查询数据 select table_coulm from table_name where partition_name = '2014-02-25'; 5.查看hdfs文件信息 dfs -ls /user/hive/warehouse/table02; 6.从文件加载数据进表(OVERWRITE覆盖,追加不需要OVERWRITE关键字) LOAD DATA LOCAL INPATH 'dim_csl_rule_config.txt' OVERWRITE into table dim.dim_csl_rule_config; --从查询语句给table插入数据 INSERT OVERWRITE TABLE test_h02_click_log PARTITION(dt) select * from stage.s_h02_click_log where dt='2014-01-22' limit 100; 7.导出数据到文件 insert overwrite directory '/tmp/csl_rule_cfg' select a.* from dim.dim_csl_rule_config a; hive -e "select day_id,pv,uv,ip_count,click_next_count,second_bounce_rate,return_visit,pg_type from tmp.tmp_h02_click_log_baitiao_ag_sum where day_id in ('2014-03-06','2014-03-07','2014-03-08','2014-03-09','2014-03-10');"> /home/jrjt/testan/baitiao.dat; 8.自定义udf函数 1.继承UDF类 2.重写evaluate方法 3.把项目打成jar包 4.hive中执行命令add jar /home/jrjt/dwetl/PUB/UDF/udf/GetProperty.jar; 5.创建函数create temporary function get_pro as 'jd.Get_Property'//jd.jd.Get_Property为类路径; 9.查询显示列名 及 行转列显示 set hive.cli.print.header=true; // 打印列名 set hive.cli.print.row.to.vertical=true; // 开启行转列功能, 前提必须开启打印列名功能 set hive.cli.print.row.to.vertical.num=1; // 设置每行显示的列数 10.查看表文件大小,下载文件到某个目录,显示多少行到某个文件 dfs -du hdfs://BJYZH3-HD-JRJT-4137.jd.com:54310/user/jrjt/warehouse/stage.db/s_h02_click_log; dfs -get /user/jrjt/warehouse/ods.db/o_h02_click_log_i_new/dt=2014-01-21/000212_0 /home/jrjt/testan/; head -n 1000 文件名 > 文件名 11.杀死某个任务 不在hive shell中执行 Hadoop job -kill job_201403041453_58315 12.hive-wui路径 http://172.17.41.38/jobtracker.jsp 13.删除分区 alter table tmp_h02_click_log_baitiao drop partition(dt='2014-03-01'); alter table d_h02_click_log_basic_d_fact drop partition(dt='2014-01-17'); 14.hive命令行操作 执行一个查询,在终端上显示mapreduce的进度,执行完毕后,最后把查询结果输出到终端上,接着hive进程退出,不会进入交互模式。 hive -e 'select table_cloum from table' -S,终端上的输出不会有mapreduce的进度,执行完毕,只会把查询结果输出到终端上。这个静音模式很实用,,通过第三方程序调用,第三方程序通过hive的标准输出获取结果集。 hive -S -e 'select table_cloum from table'

04
领券