时间:2021-05-22
mysql可以使用nevicat导出insert语句用于数据构造,但是hive无法直接导出insert语句。我们可以先打印在hive命令行,然后使用脚本拼装成insert语句,进行数据构造。
手动copy到python脚本进行sql语句构造:
def transformString(s): list_s = s.split('\t') print(len(list_s)) s_new = '' for item in list_s: s_new += '\"' + item.strip(' ') + '\"' + ',' return str(s_new.rstrip(','))# 为手动copy hive命令行打印输出的记录s = "555 helloworld"s_new = transformString(s)sql = 'insert into dw.test PARTITION (ymd = \'2019-03-18\') values({});'.format(s_new)print(sql)结果:
insert into dw.test PARTITION (ymd = '2019-03-18') values("555","helloworld");
补充知识:python向hive插入数据遇到的坑
因项目需求,应用python建模需要通过hive取数,并将结果写入hive表。
尝试了以下几条坑爹路,仅做记录如下:
通过impyla库搭建hive与python桥梁
1.1 环境配置的坑(回头放连接)
注: 远程访问hive一定要记得配置账号密码!!!报错:。。。-4.。。
1.2 一定不要用impyla中的executemany去批量插入数据,也不要用其他的方式向hive插入数据,都是坑!奇慢无比!找资料也都是说不建议这么做。
长途跋涉hdfs法
2.1 先用python的pyhdfs库将结果写成hdfs文件,然后。。。尼玛!!根本没成功连上服务器的hdfs,本地hdfs到是可以的
2.2 那既然写hdfs,我就直接将模型结果通过hadoop/hdfs命令上传至hdfs。然后, 通过hive命令load data将hdfs中的结果再导入hive。虽然有点绕,但是成功了!!!BUT!!!小兄弟,这个直接操作HDFS风险太高了,要不你还是另寻他法吧,不可以拒绝哦!!!
2.3 好吧,根据建议,使用kafka,抱歉这个坑后面再来踩。
2.4 临时处理方案:先将结果写入mysql,再转入hive,这个没有坑,具体我也只是写到mysql,无坑。。就是有点绕。。。
以上这篇使用Python构造hive insert语句说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
EXPLAIN语句提供有关MySQL如何执行语句的信息。EXPLAIN与SELECT,DELETE,INSERT,REPLACE和UPDATE语句一起使用。EX
一、设置填充时机使用下面的注解设置填充的时机,例如insert、update语句@TableField(fill=FieldFill.INSERT)有下面4种规
使用sqoopimport命令从postgresql导入数据到hive中,发现数据行数变多了,但是任务没有跑错,非常奇怪。导入语句为:sqoopimport--
1、如果同时从同一个客户端插入很多行,使用含多个VALUE的INSERT语句同时插入几行。这比使用单行INSERT语句快(在某些情况下快几倍)。如果你正向一个非
本章节将为大家介绍Python循环语句的使用。Python中的循环语句有for和while。Python循环语句的控制结构图如下所示:while循环Python