hive建表及导入数据的问题

dlkdqpi 2013-05-24 09:15:38
本人hive菜鸟,刚尝试着将hadoop及hive安装上,建了一个有45个double类型组成的表:
create table dht_tab(name1 DOUBLE ,name2 DOUBLE, ... ,name45 DOUBLE);
本地磁盘上有个名为“dhtnew.dh”的一个数据,可看为45*n个DOUBLE型的2进制字节的顺序文件组成。
我将其导入的语句是:
load data local inpath 'dhtnew.dh' overwrite into table dht_tab;
但是后来查看的时候表是空的,貌似全部违反了schema。这我很不理解。
请问是否我建表的语句有问题,过于简单了?那么正确的建表语句是什么?
...全文
1907 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
egraldloi 2015-03-06
  • 打赏
  • 举报
回复
楼主问题解决了吗?
dlkdqpi 2013-06-03
  • 打赏
  • 举报
回复
引用 11 楼 0flying0 的回复:
[quote=引用 2 楼 dlk004 的回复:] 之前想到分隔符的事了,我要导入的是顺序文件,都是2进制字节,请问怎么设置行分隔符和列分隔符?
要看一下二进制的文件是什么编码的,ascii的考虑 '\001',unicode 可以考虑'\u0001'[/quote] 我明白你的意思,但我要处理的文件是一个double8字节紧挨着另一个double的。所以不知道怎么让hive区分列。难道它不能自动按模式中类型的长度自动读取一定长度的字节么?
r6 2013-05-31
  • 打赏
  • 举报
回复
引用 2 楼 dlk004 的回复:
之前想到分隔符的事了,我要导入的是顺序文件,都是2进制字节,请问怎么设置行分隔符和列分隔符?
要看一下二进制的文件是什么编码的,ascii的考虑 '\001',unicode 可以考虑'\u0001'
dlkdqpi 2013-05-28
  • 打赏
  • 举报
回复
本以为Hive很强大呢,难道只能处理文本文件么? 木有知道解决办法的么?这周末结贴。
dlkdqpi 2013-05-27
  • 打赏
  • 举报
回复
引用 8 楼 tntzbzc 的回复:
这个有点无解了 给你两种解决方案 1、修改C Code,用文本输出,每个DOUBLE之间一个分隔符分割数据列 2、把原数据全部导入HDFS,然后写一个MAPREDUCE,重整这些数据到文本
谢谢,我在网上也没查到什么方法。貌似hive只有切割,没有按固定字节长度读取的方法。
撸大湿 2013-05-27
  • 打赏
  • 举报
回复
这个有点无解了 给你两种解决方案 1、修改C Code,用文本输出,每个DOUBLE之间一个分隔符分割数据列 2、把原数据全部导入HDFS,然后写一个MAPREDUCE,重整这些数据到文本
dlkdqpi 2013-05-27
  • 打赏
  • 举报
回复
原始数据也就是地震数据,如segy,segd等格式,通常比较庞大。
dlkdqpi 2013-05-27
  • 打赏
  • 举报
回复
引用 5 楼 tntzbzc 的回复:
贴一行原始数据给我看看
原始数据擦不多这样:用C操作的,
double a,b;
char* c = (char*)malloc(sizeof(double)*2);
memcpy(c,&a,8);memcpy(c,&b,8);
int h = open(filepath,wr);
write(h,c,16);
撸大湿 2013-05-26
  • 打赏
  • 举报
回复
贴一行原始数据给我看看
dlkdqpi 2013-05-26
  • 打赏
  • 举报
回复
引用 1 楼 tntzbzc 的回复:
create table dht_tab(name1 DOUBLE ,name2 DOUBLE, ... ,name45 DOUBLE)row format delimited fields terminated by '\t';
--用制表符作为分隔符
load data local inpath 'LOCAL_PATH/dhtnew.dh' overwrite into table dht_tab fields terminated by '\t' 确认你要倒入文件的分隔符
谢谢您的帮助,可我还是没有明白设置行列分隔符如何设置。因为我用row format delimited fields terminated by '\t'还是没有成功。数据都以字节挨着的,怎么能用\t呢。而且这我只是举个例子。实际上数据很大我无法转成double.本想建个表,45个double,3000个float列组成,数据都是按这个结构重复组成的。
撸大湿 2013-05-26
  • 打赏
  • 举报
回复
引用 2 楼 dlk004 的回复:
之前想到分隔符的事了,我要导入的是顺序文件,都是2进制字节,请问怎么设置行分隔符和列分隔符?
二进制数据倒入HIVE前最好做一次ETl转换 看LZ都是用DOUBLE,不妨把二进制先转成DOUBLE,再倒入HIVE 当然,如果LZ一定要用HIVE直接保存二进制数据也可以 给你个链接https://issues.apache.org/jira/browse/HIVE-637 介绍了如何用HIVE去处理二进制BLOB数据
dlkdqpi 2013-05-26
  • 打赏
  • 举报
回复
之前想到分隔符的事了,我要导入的是顺序文件,都是2进制字节,请问怎么设置行分隔符和列分隔符?
撸大湿 2013-05-26
  • 打赏
  • 举报
回复
create table dht_tab(name1 DOUBLE ,name2 DOUBLE, ... ,name45 DOUBLE)row format delimited fields terminated by '\t';
--用制表符作为分隔符
load data local inpath 'LOCAL_PATH/dhtnew.dh' overwrite into table dht_tab fields terminated by '\t' 确认你要倒入文件的分隔符

20,808

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧