分享

瞎摸索 有一个疑问

Wyy_Ck 发表于 2017-2-7 15:11:53 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 13 10906
最近通过hive  按照步骤  创建表---load data 就可以在对应HDFS数据仓库查到了相关表文件,并HQL可以查询。

所以我做了一个小测试, 我直接按照hdfs目录,我上传了一个文件到HDFS, 然后想通过HIVE查询【没有创建表】

结果查不到, 谁能告诉下原因吗? HIVE查询的过程是怎么样的? 是先查询表的元数据 再查询表吗?


谢谢

已有(15)人评论

跳转到指定楼层
starrycheng 发表于 2017-2-7 15:35:30
hive只能查询hive表的内容,不能直接查询hdfs.如果想查询,可以对hive做一个外表,然后在查询 create external table exter_table

更多推荐参考
hive内部表与外部表区别详细介绍
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7458


回复

使用道具 举报

Wyy_Ck 发表于 2017-2-7 16:09:14
starrycheng 发表于 2017-2-7 15:35
hive只能查询hive表的内容,不能直接查询hdfs.如果想查询,可以对hive做一个外表,然后在查询 create exter ...

多谢哈  我试试  谢谢
回复

使用道具 举报

Wyy_Ck 发表于 2017-2-7 17:24:58
starrycheng 发表于 2017-2-7 15:35
hive只能查询hive表的内容,不能直接查询hdfs.如果想查询,可以对hive做一个外表,然后在查询 create exter ...

你好,可以简单这么理解不?

外部表 就是存储位置不在hive-site.xml配置的那个HDFS路径  是存储到其他任意位置的  而内部表就是warehouses 所配置所在路径



个人理解哈
回复

使用道具 举报

Wyy_Ck 发表于 2017-2-7 17:39:18
按照这个操作的外部表
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7458


有一个小问题哈
建表如下:
[mw_shl_code=shell,true]hive>  create external table tbl_ext(id int ,name String, age int,tel string) location '/home/hadoop/ck/external';[/mw_shl_code]

导入过程和结果:
[mw_shl_code=shell,true]Loading data to table default.tbl_ext
OK
Time taken: 0.248 seconds
hive> show tables;
OK
hivepersons
tb_test_insertfile
tbl_ext
Time taken: 0.029 seconds, Fetched: 3 row(s)
hive> select * from tab_ext;
FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'tab_ext'
hive> select * from tbl_ext;
OK
NULL        NULL        NULL        NULL
NULL        NULL        NULL        NULL
NULL        NULL        NULL        NULL
Time taken: 0.122 seconds, Fetched: 3 row(s)[/mw_shl_code]

我的数据如下:
[mw_shl_code=shell,true][hadoop@master external]$ hadoop fs -cat /home/hadoop/ck/external/ck.txt
1   ck     24  1111111111111
2   test   30  22222222222
3   zs     34  3333333333333  [/mw_shl_code]



问题是 为什么都是NULL 呢  感觉条数也是对的?


回复

使用道具 举报

langke93 发表于 2017-2-7 18:17:05
Wyy_Ck 发表于 2017-2-7 17:39
按照这个操作的外部表
http://www.aboutyun.com/forum.php?mod=viewthread&tid=7458

尽量不要省关键字
load data local inpath '/home/hadoop/ck/external/ck.txtt' into table tbl_ext;
如果还不行,设置下文件编码,需要保持一致,不出意外应该是utf8
回复

使用道具 举报

Wyy_Ck 发表于 2017-2-7 18:37:01
langke93 发表于 2017-2-7 18:17
尽量不要省关键字
load data local inpath '/home/hadoop/ck/external/ck.txtt' into table tbl_ext;
...

我的操作就是这样的  应该还好吧

load data local inpath '/home/hadoop/ck/data/ck.txt' into table tbl_ext;
Loading data to table default.tbl_ext
OK

回复

使用道具 举报

einhep 发表于 2017-2-7 18:58:35
Wyy_Ck 发表于 2017-2-7 18:37
我的操作就是这样的  应该还好吧

load data local inpath '/home/hadoop/ck/data/ck.txt' into table ...

应该还是分隔符的问题,创建内部表与外部表,应该只有两个地方有区别
1.加了external 关键字
2.加了路径
其它都一样,包括分隔符
回复

使用道具 举报

Wyy_Ck 发表于 2017-2-7 18:58:49
OK 了 我建表必须要这样才行吗?

[mw_shl_code=shell,true]hive>  create external table tbl_ext_s(id int ,name String, age int,tel string) row format delimited fields terminated by '|' lines terminated by '\n' location '/home/hadoop/ck/externals';
OK
Time taken: 0.133 seconds
hive> load data local inpath '/home/hadoop/ck/data/ck.txt' into table tbl_ext_s;
Loading data to table default.tbl_ext_s
OK
Time taken: 0.234 seconds
hive> select * from tbl_ext_s;
OK
1        ck        24        1111111111111
2        test        30        22222222222
3        zs        34        3333333333333  
Time taken: 0.07 seconds, Fetched: 3 row(s)[/mw_shl_code]


原始数据不想按照| 进行区分,  还有其他方法吗?
回复

使用道具 举报

tntzbzc 发表于 2017-2-7 19:07:12
本帖最后由 tntzbzc 于 2017-2-7 19:12 编辑
Wyy_Ck 发表于 2017-2-7 18:58
OK 了 我建表必须要这样才行吗?

[mw_shl_code=shell,true]hive>  create external table tbl_ext_s(id  ...

二者保持一致即可,分隔符应该不是固定的
列如下面
CREATE TABLE tblStockDetail(ordernumber STRING,rownum int,itemid string,qty int,price int,amount int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

回复

使用道具 举报

12下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条