hive的load踩过的坑
load:
hive中load命令的使用语法
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 ...)]
'LOCAL'表示输入文件在本地文件系统上。如果'LOCAL'被省略,那么它会在HDFS中查找该文件。
关键字'覆盖'表示表中的现有数据被删除。如果忽略'OVERWRITE'关键字,则将数据文件附加到现有数据集。
注意:
- 加载命令不执行对模式的数据验证。使用load data形式往hive表中装载数据时,不会检查字段类型,如果字段类型不一致,使用null值填充。如果字段过多则会丢弃,缺失则会使用null值填充。
- 如果文件位于hdfs中,则将其移入Hive控制的文件系统名称空间。会将数据从HDFS文件/目录加载到表中。
- 请注意,从HDFS加载数据将导致移动文件/目录,这里是文件的移动,不是复制。因此,该操作几乎是即时的。
坑1:
描述:
使用带'LOCAL'关键字的load命令,想从本地导入数据到hive表中,但是执行报错:No files matching path file
报错找不到文件,但确定当前机器确实存在这个文件。
分析:
- 期初怀疑是权限或者用户不对,导致找不到文件。然后chmod、chown了一波,并没有卵用,问题不在这。
- 搜素解决了问题,分析为:hive导入数据语句 load data [local] inpath ,是一个服务器端的指令,它是在服务器端执行。因此指定local时表明加载的文件为本地文件,但是这里的local,在hive中指的是 hiveserver 服务所在的机器,而不是hivecli 或 beeline客户端所在的机器(生产环境大都是 hiveserver 和 hivecli不在同一个机器)。
方法:
- 把要加载的文件上传到 hiveserver所在的服务器(这一般是不可能的事情),然后执行 load data local inpath [path] [overwrite] into table table_name.
- 先将本地文件上传至hdfs,然后使用 load data inpath [hdfspath] [overwrite] into table table_name。
推荐使用第二种方法
hadoop dfs -mkdir /input
hdfs dfs -ls /input #刚建的文件夹下没有文件
hadoop fs -put test.txt /input
hdfs dfs -ls /input #可以看到文件下有刚上传的文件
#在hive中执行load命令
oad data inpath [hdfspath] [overwrite] into table table_namehdfs dfs -ls /input #文件夹下的文件发生了移动
一个参考的好连接:https://blog.csdn.net/hao495430759/article/details/80529456
坑2:
描述:
导入到hive中的表数据大量为NULL,只有第一个字段和分区字段有数据,其他字段全为NULL。
分析:
我在关系型数据库oracle导出的数据中每个数据字段的文本限定符为双引号(每个字段用双引号包围),栏位分隔符(字段分隔符)为逗号。但是hive中的表第一个数据字段为string,后面字段不为string。所以只是第一个字段类型一致,也只有它可以导入数据,其它字段类型不匹配,全部为NULL。
方法:
- 重新超出oracle数据,文本限定符为“无”,栏位分隔符为“定位”(文本中为^I)。
- 在hive中执行命令:show create table test_table_name; 可以看到建表脚本和行列分隔符等信息。
hive默认的分割方式,即行为\n,列为^A
- 修改数据文件的分隔符,替换为^A
cat -A test.txt #可以看到分隔符为^I set -i 's/ /^A/g' test.txt #test.txt原本的分隔符为^I(按“Ctrl+v,Ctrl+i”可以输出),^A(按“Ctrl+v,Ctrl+a”可以输出) cat -A test.txt #可以看到分隔符为^A
- 在hive中执行load命令。
一个很好的参考链接:https://blog.csdn.net/qq_26442553/article/details/80297028
坑3:
描述:
经过几次踩坑之后数据可以导入到hive中了,但是仔细一看hive表的timestamp类型的字段全部为NULL。
分析:
在Hive中提供了字段类型TIMESTAMP,但其对应的时间格式为yyyy-MM-dd HH:MM:SS,即通过LOAD命令将文本加载到已创建的表中时,只有满足上述格式的内容才可以被正确解析,否则只能识别为NULL。
而我导出的数据时间格式的日期格式符为“/”。
方法:
- 重新从oracle中导出数据,注意日期格式符修改为“-”。
- 重新load
经过一波操作终于可以导入数据进hive表中。
hive的load踩过的坑相关推荐
- hive分隔符_Hive踩过的坑-hive多个分隔符的问题
今天就说说hive多个分隔符的问题. 多分隔符(列)这个问题,也是之前同事给我一份文件我才发现的... 这份文件上列分隔符是@#| hive建表时,ROW FORMAT DELIMITED FIELD ...
- 启动mq 在虚拟机中_记在使用rocketmq client客户端过程中踩到的坑
前言 最近项目中使用阿里的RocketMQ来做消息队列,具体怎么使用RocketMQ不在本文讨论范围之内,其相关帮助文档可以参考如下链接 本文主要记录在使用rocketmq client时,遇到的一些 ...
- SonarQube的安装部署过程中踩过的坑
在安装和是用sonarqube踩过如下坑,记录一下: 1.java版本不正确 java版本的问题,主要体现在两个方面, 第一个:是需要安装对应电脑版本的jdk, 具体报如下错误: Unable to ...
- 那些年我们在spark SQL上踩过的坑
做了一年延云YDB的开发,这一年在使用spark上真心踩了不少坑,总结一下,希望对大家有所帮助. spark 内存泄露 1.高并发情况下的内存泄露的具体表现 很遗憾,spark的设计架构并不是为了高并 ...
- 用vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
用vant框架做H5时踩过的坑 1. 页面在手机端不能上下滑动,在PC端浏览器正常滑动 说明:在设置了overflow:auto;属性的前提下,H5页面在PC端浏览器里展示可以上下滑动,在ios上可正 ...
- 阿里云centos环境之linux上redis安装及踩过的坑(七)
阿里云centos环境之linux上redis安装及踩过的坑<七> 文章目录 阿里云centos环境之linux上redis安装及踩过的坑<七> 第一:下载上传 第二:解压安装 ...
- Pyinstaller 打包程序踩过的坑(1.Failed to execute script ;2.No module named typedefs等问题)
Pyinstaller 打包程序踩过的坑(1.Failed to execute script ;2.No module named typedefs:3 Could not find or load ...
- mac git使用与配置踩过的坑
#mac git使用与配置踩过的坑 标题mac配置git ssh密钥 参考链接mac配置git ssh key go get安装失败的解决方法 go get约等于git clone+go instal ...
- java项目经理也就那么回事_网易PM | 我们之前在需求评审环节踩过的坑...
原本觉得需求评审也就那么回事儿,大家应该都差不多这么做的,没啥好说的.不过前不久有一位同学问起来我们是怎么做需求评审的,然后发现有一些团队的做法可能还不大一样,他们也还踩着我们之前踩过的坑,他们还在探 ...
最新文章
- 电脑日常故障及处理(二)
- 韩拓-七牛产品演进之路
- 它们才是真正的数学家 寻找自然界中的数学
- 报告表明混合云带来IT管理挑战
- 自动布局和view 设置frame同时有效
- win10 uwp 重启软件
- java同步锁-详细易懂
- Android跳转小项目-CHANGE页面-Recycylerview、List、Context(二)
- 量化研究 | 策略在指数与主连复权的差异化分析(二)
- 漏洞复现----11、GlassFish任意文件读取
- opencv 二维码定位
- LeetCode 725 分隔链表
- Android源码分析 - Parcel 与 Parcelable
- APP内如何打开某个应用的App Store下载页面
- DELPHI快速入门基础教程
- matlab疑难问题笔记
- [转]英国爱丁堡大学拟开设搜寻外星人课程
- Intellij IDEA2017.3免注册码激活步骤-亲测可用
- CSS开发-简单布局模板
- 计算机系统的四种启动方式是,U盘启动有四种模式?云骑士装机大师教你怎么选...