开发者社区> 问答> 正文

hive导入数据到【有分区的表】(partitioned by)就报错,提示hi?400报错

服务器centos7.2

hive版本0.12

hadoop版本2.7.6

----------------分割线-----------------

创建table的时候,用的外部表,放置于mysql,其中使用了partitioned by 关键字 (

partitioned by (logdate string,hour string)

)。

具体代码片段为:

create external table people(id int,name string)

partitioned by (logdate string,hour string) row format delimited

fields terminated by ',';

--------------------------------

但是!! 往表里面存入数据时就报错为hive.partition doesn't exists !!!!

java.sql.SQLSyntaxErrorException: Table 'hive.PARTITIONS' doesn't exist

mysql那边看了,hive数据库生成了,但确实没有partition表。只有下图。

 

select * 之后确实是我添加的partition字段

 

可是没办法改这个表的名字为partition啊(似乎是因为mysql关键字存在partition)!!

 

 

那我该如何存取数据进入这个hive表??

求帮助,谢谢。

展开
收起
爱吃鱼的程序员 2020-06-06 15:28:24 1381 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>从mysql导入到hive有几种办法,最简单的一个给你说下,你参考下</p>
    

    1.我看你hive表内容是逗号分隔。然后建了分区,那么你可以在hdfs上找到对应目录了。

    2.将mysql数据导出,用outfile或者程序导出都可以,导出成逗号分隔的文件,列和hive对应上。

    3.将导出文件上传到hdfs对应分区。

    这样就可以了

                            我是想从hdfs 加载数据到hive表内,,, 只是元数据放在mysql里面而已
                        
    
                        <p>你的图挂了 ,看不出来问题。我把我的映射语句发出来,你做个参考吧</p> 
    

     

    -- 如果分区存在则删除
    ALTER TABLE yourtable DROP IF EXISTS PARTITION (day=${day},hour=${hour});
    ALTER TABLE yourtable ADD IF NOT EXISTS PARTITION (day=${day},hour=${hour}) LOCATION 'your hdfs location';
    

     

                            我很好奇我得图是不能刷出来吗?在其他人的视角里面到底是怎么样的? 我这边都能看见。。 感谢你的回答,虽然我暂时没有解决这个问题,但是并不完全影响我目前的实验。
                        
    
                        <p>一摸一样的问题,搞了一天,请问楼主解决了吗</p>
                    
    
                            我发现了,md,是mysql驱动包版本的原因,炸了。
    
    2020-06-06 15:28:37
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Comparison of Spark SQL with Hive 立即下载
Hive Bucketing in Apache Spark 立即下载
2019大数据技术公开课第五季—Hive迁移到MaxCompute最佳实践 立即下载