当前位置: 首页 > 编程日记 > 正文

hive 使用技巧笔记

来源:http://michael-roshen.iteye.com/blog/2115268

例子:

INSERT OVERWRITE TABLE prices_collected_${hiveconf:wid_version}

select

pc.collect_id as product_id ,

regexp_extract(pc.price,'(\\d*\\.?\\d+)',1) as price ,

pc.region,

'' as location_area_code,

'' as city_code,

from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as created_at,

from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as updated_at

from products_compared_${hiveconf:wid_version} as pc

1.根据hive执行的参数来动态的设置表名称 prices_collected_${hiveconf:wid_version}

hive -hiveconf wid_version='4'

则可以通过${hiveconft:wid_version}来接收参数,生成prices_collected_4这张表

2. 使用正则表达式获取需要的信息,如:获取一段字符串中的数字

regexp_extract(pc.price,'(\\d*\\.?\\d+)',1) as price

注意hive中需要使用双斜杠来处理正则表达式

3. 获取系统时间

from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') as created_a

使用from_unixtime(unix_timestamp() , 'yyyy-MM-dd hh:mm:ss') 获取系统时间,格式可以根据需要调整

4. 多个表进行join的时候,可能会报错

使用set hive.auto.convert.join=false;解决

5. 创建表

create table if not exists brands (

name string,

created_at string,

updated_at string

)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

ESCAPED BY '\\'

STORED AS TEXTFILE;

以文本方式进行存储,"\\"进行转义,"\t"作为换行符

6.到处hive中的某个表中的数据到本地,执行hive命令如下:

hive

-hiveconf local_path=/home/hive/hive_data/products_24_1

-hiveconf hive_table=products_24_1

-hiveconf columnstr=' name , created_at,  updated_at,   "released" as status '

-f /home/hive/export_hive_table_to_local.sql

需要执行的参数依次是

1.导出到本地的位置local_path

2.导出hive中的哪个表 hive_table

3. 导出products_24_1 表中的哪些字段 colunmstr

4. 根据上面的参数,在本地创建products_24_1 表,使用-f来指定调用的文件

/home/hive/export_hive_table_to_local.sql 文件内容如下:

insert overwrite local directory '${hiveconf:local_path}'

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'

ESCAPED BY '\\'

STORED AS TEXTFILE

select ${hiveconf:columnstr}

from ${hiveconf:hive_table};

7.将本地文件导入到psql数据库中, hive对pg的支持不好,不能用sqoop来进行数据的导入,可以先将hive中的数据读到本地,在使用python脚本来进行文件的写入

Python代码  收藏代码

  1. def insert_to_pg(conn , table_name , file_path , insert_columns=None):  

  2.   conn = psycopg2.connect(conn)  

  3.   cursor = conn.cursor()  

  4.   if os.path.isfile( file_path ):  

  5.     datafile=ReadFileProgress(file_path)  

  6.     cursor.copy_from(file=datafile, table=table_name, sep='\t', null='\\N', size=81920, columns=insert_columns)  

  7.     datafile.close()  

Python代码  收藏代码

  1. #!/usr/bin/python  

  2. # #_*_ coding: utf-8 _*_  

  3.   

  4. import os , sys  

  5. import psycopg2  

  6.   

  7. class ReadFileProgress:  

  8.   

  9.   def __init__(self, filename):  

  10.     self.datafile = open(filename)  

  11.     self.totalRecords = 0  

  12.     self.totalBytes = os.stat(filename).st_size  

  13.     self.readBytes = 0  

  14.     self.datafile.readline()  

  15.     i = 0  

  16.     for i, l in enumerate(self.datafile):  

  17.       pass  

  18.     self.totalRecords = i + 1  

  19.     sys.stderr.write("Number of records: %d\n" % (self.totalRecords))  

  20.     self.datafile.seek(0)  

  21.     self.datafile.readline()  

  22.     self.perc5 = self.totalBytes / 20.0  

  23.     self.perc5count = 0  

  24.     self.lastPerc5 = 0  

  25.     sys.stderr.write("Writing records: 0%")  

  26.   

  27.   def countBytes(self, size=0):  

  28.     self.readBytes += size  

  29.     if (self.readBytes - self.lastPerc5 >= self.perc5):  

  30.       self.lastPerc5 = self.readBytes  

  31.       if (int(self.readBytes / self.perc5) == 5):  

  32.         sys.stderr.write("25%")  

  33.       elif (int(self.readBytes / self.perc5) == 10):  

  34.         sys.stderr.write("50%")  

  35.       elif (int(self.readBytes / self.perc5) == 15):  

  36.         sys.stderr.write("75%")  

  37.       else:  

  38.         sys.stderr.write(".")  

  39.   

  40.       sys.stderr.flush()  

  41.   

  42.   def readline(self, size=None):  

  43.     countBytes(size)  

  44.     return self.datafile.readline(size)  

  45.    

  46.   def read(self, size=None):  

  47.     self.countBytes(size)  

  48.     return self.datafile.read(size)  

  49.   

  50.   def close(self):  

  51.     sys.stderr.write("100%\n")  

  52.     self.datafile.close()  

8. 从pg上导出指定表

Python代码  收藏代码

  1. def do_export(conn , table_name , file_path , columns=None):  

  2.   conn = psycopg2.connect(conn)  

  3.   cursor = conn.cursor()  

  4.   cursor.copy_to(file=file(file_path , 'w'), table=table_name, sep='\t', null='\\N', columns=columns)  

  5.   cursor.close()  

  6.   conn.commit()  

  7.   sys.stdout.write("Transaction finished successfully.\n")  

9. 则select语句中也可以通过hiveconf来传递参数,执行hive命令

hive -hiveconf name='hello hive'

INSERT OVERWRITE TABLE companies

select

'${hiveconf:name}' as name

from companies_old



本文转自 SimplePoint 51CTO博客,原文链接:http://blog.51cto.com/2226894115/1898261,如需转载请自行联系原作者

相关文章:

GNU make manual 翻译( 一百四十九)

继续翻译 5.7.4 The --print-directory Option ------------------------------------If you use several levels of recursive make invocations, the -w or --print-directory option can make the output a lot easier to understand by showing each directory as make sta…

【青少年编程】马雷越:商品价格竞猜

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档&…

女生参加web前端培训压力大吗

女生参加web前端培训压力大吗?这个问题很多人都是想知道的,因为对于互联网行业来说,大部分都是男性,尤其是技术岗位,女生做前端压力大小和能力也有很大的关系,前端技术好工作效率高,那么压力相对较低。 女…

Android 入门开发

哈哈 我已经学会Android开发了 而且还发布了两款产品 转载于:https://www.cnblogs.com/Aixieer/archive/2012/10/04/2711443.html

整理了一下Asp.net源码常见问题(完善中...),欢迎大家补充修正(最后更新于06-01)!...

以下是一些51aspx网友经常反馈的问题,特总结放在下面,本部分内容会陆续更新。同时也提醒广大网友在仔细查看源码项目对应的运行环境及每个代码中所附的文本文件《51aspx源码必读.txt》。 Q:打开51aspx上网站源码项目需要什么样的软件环境&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 1. 一元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 相关内容: 西瓜书公式推导讲解来了!0. 导学 后台…

Python培训教程分享:“高效实用” 的Python工具库

作为一名合格Python技术员,对于Python工具库的使用是少不了的,本期Python培训教程就为大家分享的是““高效实用” 的Python工具库”,希望能够帮助到大家。 Python培训教程分享:“高效实用” 的Python工具库: 1、Reque…

LNMP安装与启动脚本编写

1、安装mysql 1cd /usr/local/src/ 下载mysql: 1wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 解压: 1tar zxvf/usr/local/src/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 更改命名: 1mv mysql-5…

Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

Flash Builder在Debug时出现的问题:Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法: 1. 进入Flash Builder的安装目录 C:\Program Files\Adobe\Adobe Flash Builder 4.6\player\win\11.1 2. 安装flashplayer_11_plugin_debug.exe&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 2. 多元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

UI设计培训分享:ui设计师如何培养设计思维?

作为一名UI设计师,工作上经常会遇到思维碰撞的问题,培养自己的设计思维是大部分UI设计师都需要的,那么ui设计师如何培养设计思维呢?来看看下面的详细介绍。 UI设计培训分享:ui设计师如何培养设计思维? 一、因舍而得 正如我们看到…

[转载红鱼儿]kbmmw 开发点滴:ErrorTable用法

TkbmMWClientQuery有一个ErrorTable属性,用于记录提交Query时返回的错误结果。当用户保存修改的业务数据,出错时,可以用ErrorTable定位出错的记录并提示错误信息。 下面是实现代码: procedure TForm2.Button4Click(Sender: TObjec…

ijkplayer iOS集成

2019独角兽企业重金招聘Python工程师标准>>> http://www.jianshu.com/p/1f06b27b3ac0 如果按楼主的方式配置后还编译报错,可能的原因是,需要将环境设置成C混编环境,可以直接将AppDelegate.m 改名成AppDelegate.mm 即可 转载于:htt…

【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection

Whalepaper是由周郴莲负责的一个每周分享论文的活动。 NLP 论文分享:每周日 晚上 九点CV 论文分享: 每周日 晚上 九点Res 论文分享:每周六 晚上 九点半 欢迎对paper感兴趣的人加入我们的分享啊!!! 分享人…

软件测试培训分享:做软件测试工作如何清楚的描述一个bug

一名合格的软件测试工程师是需要清楚的交代自己的工作任务的,必须要清楚的告诉技术员出现的bug,那么做软件测试工作如何清楚的描述一个bug呢?来看看下面的详细介绍。 软件测试培训分享:做软件测试工作如何清楚的描述一个bug? 发现问题的版本…

kvm虚拟化学习笔记(十七)之KVM到KVM之v2v迁移

1.源KVM虚拟主机node1(1).查看源KVM虚拟主机上的虚拟机列表,本文计划将CentOS6.5-01虚拟机迁移到其它KVM虚拟主机中。[rootnode1 ~]# virsh list --allId Name State ----------------------------------------------------- CentOS6.5-01 …

UVA 216 Getting in Line

大意:给你一些定点,让你以代价最小的边将所有的点连起来。 思路:数据范围很小,可以通过最小生成树或者回溯来解决。 最小生成树去写时不知道哪错了,于是用回溯模拟了一遍,相当于模拟一个数组的全排列。 AC …

【青少年编程】【三级】猜数字

Scratch竞赛交流群已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】,即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料(视频、代码、文档)。 猜数字…

参加web前端开发培训具体要学什么内容

学习web前端技术不是一天两天就能学会的,想要成为一名合格的web前端工程师,一定要进行系统的培训学习,那么下面小编就为大家详细的介绍一下参加web前端开发培训具体要学什么内容? 参加web前端开发培训具体要学什么内容? 一、了解web前端 we…

最长公共上升子序列 LCIS

关于子序列什么什么的问题,以前一直没怎么在意过,直到省赛突然考了一个赤裸裸的LCIS,这下才着急了,因为忘记怎么做了,而且模版也没有带。从第三名一直掉到第11名,而且超上来的,全都是会做这题的…

【组队学习】【26期】动手学数据分析

动手学数据分析 论坛版块: http://datawhale.club/c/team-learning/25-category/25 开源内容: https://github.com/datawhalechina/hands-on-data-analysis 学习目标 了解数据分析中基本库的操作(比如:pandas,numpy和matplo…

利用FFmpeg切割视频

关键词:FFmpeg,seek,ss,t,to,搜索,定位介绍如果你想要从输入文件中切割一部分,需要用到ss选项。快速定位需要将ss放在输入文件的前面(即-i的前面)ffmpeg-ss 00:03:00 -i …

哪些人适合参加软件测试培训?

想要进入互联网行业也不是一句两句那么简单的,近几年,很多人都想要学习软件测试技术,通过做软件测试岗位进入到互联网行业,那么所有人都可以学习这个技术吗?我们下面就来详细的了解一下哪些人适合参加软件测试培训? 哪些人适合参…

Linux的su命令,sudo命令和限制root远程登录

3.7 su命令: su命令是用来切换用户的,例如我要从root用户切换到user2用户: 这个 - 选项是彻底切换用户的意思,如果不加 - 选项也可以,但是切换得不彻底,例如当前的家目录还是root,环境变量也还是…

MongoDB 标准连接字符串

MongoDB 标准连接字符串mongodb://[username:password]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]注:并非所有MongoDB驱动都支持完整的连接字符串,不支持此格式连接字串的驱动会有替代连接方案,具体请参照驱…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 3. 对数几率回归

Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

零基础ui设计培训一定要知道字体设计规则

作为一名UI设计师,最最重要的就是字体设计这方面,很多UI设计工作中,字体是必不可缺的,下面小编就为大家详细的介绍一下零基础ui设计培训一定要知道字体设计规则。 零基础ui设计培训一定要知道字体设计规则: 在计算机普…

centos 脚本基础练习1

1,写一个脚本:判断当前系统上是否有用户的默认shell 为bash;如果有,就显示有多少个这类用户;否则就显示没有这类用户;[rootlocalhost mscripts]# cat lx1.sh #!/bin/bashgrep "bash$" /etc/passw…

【组队学习】【26期】图神经网络

图神经网络 论坛版块: http://datawhale.club/c/team-learning/27-category/26 开源内容: https://github.com/datawhalechina/team-learning-nlp/tree/master/GNN 学习目标 我们的组队学习将带领大家入门图神经网络,为大家今后在学习和…

as3回调方法模拟事件监听

//Client.as package callback{import flash.display.Sprite;public class Client extends Sprite{public function Client() {//调用Seriver类的callFun方法,并把clientFun方法传给callFun方法var server : Server new Server();server.callFun(clientFun);}//定义一个回调方…