一文搞定hive之insert into 和 insert overwrite与数据分区

版权声明:本文为博主原创文章,未经博主允许不得转载。

数据分区

        数据库分区的主要目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间,主要包括两种分区形式:水平分区与垂直分区。水平分区是对表进行行分区。而垂直分区是对列进行分区,一般是通过对表的垂直划分来减少目标表的宽度,常用的是水平分区。

        hive建立分区语法:       

create external table if not exists tablename(

        a string,

        b string)

 partitioned by (year string,month string)

 row format delimited fields terminated by ',';

        hive通常有三种方式对包含分区字段的表进行数据插入:

        1)静态插入数据:要求插入数据时指定与建表时相同的分区字段,如:

insert overwrite table tablename (year='2017', month='03') select a, b from tablename2;

        2)动静混合分区插入:要求指定部分分区字段的值,如:

insert overwrite table tablename (year='2017', month) select a, b from tablename2;

        3)动态分区插入:只指定分区字段,不用指定值,如:

insert overwrite table tablename (year, month) select a, b from tablename2;

        hive动态分区设置相关参数:

Hive.exec.dynamic.partition  是否启动动态分区。false(不开启) true(开启)默认是 false

hive.exec.dynamic.partition.mode  打开动态分区后,动态分区的模式,有 strict和 nonstrict 两个值可选,strict 要求至少包含一个静态分区列,nonstrict则无此要求。各自的好处,大家自己查看哈。

hive.exec.max.dynamic.partitions 允许的最大的动态分区的个数。可以手动增加分区。默认1000

hive.exec.max.dynamic.partitions.pernode 一个 mapreduce job所允许的最大的动态分区的个数。默认是100

数据插入之insert into 和 insert overwrite

        hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。通常hive包括以下四种数据导入方式:

(1)、从本地文件系统中导入数据到Hive表;

(2)、从HDFS上导入数据到Hive表;

(3)、在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中;

(4)、从别的表中查询出相应的数据并导入到Hive表中。

  • INSERT INTO

  1. 使用样例

                insert into table tablename1 select a, b, c from tablename2;

  • INSERT OVERWRITE

  1. 使用样例

                insert overwrite table tablename1 select a, b, c from tablename2;

  • 两者的异同

        insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入。如果存在分区的情况,insert overwrite会只重写当前分区数据。

  • 15
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: 这是一个Java程序出现的错误,错误信息为“createprocess error=2,系统找不到指定的文件”。这通常是因为程序尝试执行一个不存在的文件或路径,导致无法创建进程。可能需要检查程序中的文件路径或文件名是否正确,或者检查系统中是否存在所需的文件。 ### 回答2: 在Java开发中,我们有时会遇到这样的异常:caused by: java.io.ioexception: createprocess error=2,系统找不到指定的文件。这是由于Java系统在创建一个新的进程时,找不到指定的可执行文件,从而抛出的异常。 造成这个异常的最常见的原因是路径错误。当我们在处理输入、输出等操作时,需要指定正确的文件路径。如果文件路径不存在,那么Java就会抛出这个异常。另一个可能的原因是消息提示中已经明确指出的,也就是指定的文件不存在。在这种情况下,我们需要检查一下文件是否存在,如果不存在,需要重新编写路径或创建需要的文件。 为了避免这个问题,我们需要写出可靠的代码并遵循以下最佳实践: 1.正确编写文件路径,确保所有文件都能够被找到。 2.程序执行期间不要删除或移动文件,避免找不到文件。 3.注意检查错误日志,尽可能确定出错的原因并进行调整。 4.确保文件在Java程序中可以正确地打开和关闭。 在开发中遇到这种异常的时候,需要及时找到问题并修复。通过注意细节,合理编写代码并严格执行上述最佳实践,我们可以避免这类异常并提高代码的可靠性和健壮性。 ### 回答3: 这个错误是Java程序在执行调用系统命令时出现的错误。具体地说,是因为Java程序调用了一个不存在或者无法找到的文件,然后导致系统无法创建这个命令。 Java程序可以通过ProcessBuilder或Runtime.getRuntime().exec()方法来执行系统命令。当程序运行到exec()方法时,会创建一个子进程来执行系统命令,然后将子进程的输入和输出管道与Java程序的输入和输出连接起来。 如果在调用运行系统命令时,Java程序无法找到指定的文件,例如指定的文件不存在,或者程序没有权限访问该文件等,则会抛出上述异常。 解决这个问题的方法有很多,其中一种方法是检查Java程序的路径和文件名是否正确。另外,还可以通过设置环境变量来解决该问题。还有一种方法是使用绝对路径来调用系统命令,这样可以避免出现找不到指定文件的错误。 总之,这个异常的出现是由于Java程序无法找到指定的文件,需要我们检查Java程序的路径和文件名是否正确,或通过设置环境变量或使用绝对路径来避免该问题的出现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值