关于luigi框架下查询hive表的操作

class JoinQuery(HiveQueryTask):
date=luigi.DateParameter()
def hiveconfs(self):
jcs = {}
jcs['mapred.job.name'] = "xxx_xxx_hive_daily_{}_username".format(format_date(self.date))
jcs['mapred.job.queue.name'] = 'root.xxx.xxx'
return jcs def requires(self):
return LogHiveFiles(date=self.date)
def output(self):
return luigi.hdfs.HdfsTarget(hdfs_targets.DailyExprImgHdfsFiles(date=self.date).path,
format=luigi.hdfs.PlainDir)
def query(self):
query="""
INSERT OVERWRITE DIRECTORY '{ot}'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
SELECT * FROM {tb} WHERE date='{dt}' LIMIT 1
""".format(ot=self.output().path,tb=self.input().table,dt=self.input().partition['date'])
return query class recCountStats(luigi.Task):
now = datetime.now()
date = luigi.DateParameter(default=datetime(now.year, now.month, now.day) - timedelta(days=3)) def requires(self):
return JoinQuery(self.date)
if __name__ == '__main__':
luigi.run(main_task_cls=recCountStats)

直接上的代码,luigi框架不多说了,可以看之前的luigi的文章。HiveQueryTask类是封装好的专门用于hive sql的类,就是把hive的query写在程序中,他帮你查。

1.JoinQuery类是直接继承自HiveQueryTask类的,处理Luigi本身就有的requires和output以外,区别于spark任务,不用写main()或run()方法,写query()方法就好。

2.区别于luigi下执行spark任务,执行hive和执行mapreduce比较像,需要定义hiveconf方法,就是程序的配置。里面需要定义程序的名称和跑该程序的队列,切记,写了名称和队列 公司服务器才会接受运行该程序,要不然报错的。

3.关于查询的query语句,Luigi不捕捉查询任务的输出,要用INSERT DIRECTORY系列语句将查询结果持久化,并作为output输出。看代码!INSERT OVERWRITE DIRECTORY +table名  可以把结果写入hdfs表 ,用LOCAL DIRECTORY的话可以写在本地。

4.关于requires函数中的 返回的类,可参考下面这样定义,和hdfs的有一些区别,hdfs的只要一个地址就行了。hive的:

class LogHiveFiles(luigi.ExternalTask):
date = luigi.DateParameter()
def output(self):
return luigi.hive.HivePartitionTarget(table='xxxs_xxx_log_xxx_daily',partition={'date': format_date(self.date)})

用的是HivePartitionTarget类。

luigi操作hive表的更多相关文章

  1. spark+hcatalog操作hive表及其数据

    package iie.hadoop.hcatalog.spark; import iie.udps.common.hcatalog.SerHCatInputFormat; import iie.ud ...

  2. spark使用Hive表操作

    spark Hive表操作 之前很长一段时间是通过hiveServer操作Hive表的,一旦hiveServer宕掉就无法进行操作. 比如说一个修改表分区的操作 一.使用HiveServer的方式 v ...

  3. SparkSQL On Yarn with Hive,操作和访问Hive表

    转载自:http://lxw1234.com/archives/2015/08/466.htm 本文将介绍以yarn-cluster模式运行SparkSQL应用程序,访问和操作Hive中的表,这个和在 ...

  4. 基于CDH5.x 下面使用eclipse 操作hive 。使用java通过jdbc连接HIVESERVICE 创建表

    基于CDH5.x 下面使用eclipse 操作hive .使用java通过jdbc连接HIVESERVICE 创建表 import java.sql.Connection; import java.s ...

  5. Hive基础之Hive表常用操作

    本案例使用的数据均来源于Oracle自带的emp和dept表 创建表 语法: CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name ...

  6. hive表信息查询:查看表结构、表操作等--转

    原文地址:http://www.aboutyun.com/forum.PHP?mod=viewthread&tid=8590&highlight=Hive 问题导读:1.如何查看hiv ...

  7. hive表信息查询:查看表结构、表操作等

    转自网友的,主要是自己备份下 有时候不记得! 问题导读:1.如何查看hive表结构?2.如何查看表结构信息?3.如何查看分区信息?4.哪个命令可以模糊搜索表 1.hive模糊搜索表 show tabl ...

  8. hive表分区相关操作

    Hive 表分区 Hive表的分区就是一个目录,分区字段不和表的字段重复 创建分区表: create table tb_partition(id string, name string) PARTIT ...

  9. Hive 表操作(HIVE的数据存储、数据库、表、分区、分桶)

    1.Hive的数据存储 Hive的数据存储基于Hadoop HDFS Hive没有专门的数据存储格式 存储结构主要包括:数据库.文件.表.试图 Hive默认可以直接加载文本文件(TextFile),还 ...

随机推荐

  1. 2017 计蒜之道 初赛 第五场 C. UCloud 的安全秘钥(中等)

    暴力. $O(m*n)$的算法可以通过此题,每次询问$O(m)$扫$S$数组,统计不同数字的个数,每次移动最多只会变化两个数字,如果不同数字个数为$0$,那么答案加$1$. #include < ...

  2. list容器详解

    首先说说STL ( STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件.STL现在是C++的一部分,因此不用额外安装什么.它被内建在你的编译器之内.因为STL的list是一个简单的容器, ...

  3. 5分钟掌握智联招聘网站爬取并保存到MongoDB数据库

    前言 本次主题分两篇文章来介绍: 一.数据采集 二.数据分析 第一篇先来介绍数据采集,即用python爬取网站数据. 1 运行环境和python库 先说下运行环境: python3.5 windows ...

  4. Bakery CodeForces - 707B (最短路的思路题)

    Masha wants to open her own bakery and bake muffins in one of the n cities numbered from 1 to n. The ...

  5. django配置templates、static、media和连接mysql数据库

    1.模板文件 # =======templates配置======= if os.path.exists(os.path.join(BASE_DIR, 'templates')) is False: ...

  6. os.path.dirname(__file__)使用

    os.path.dirname(__file__)使用 该测试脚本所在的位置:D:\第1层\第2层\第3层\第4层\第5层\test11.py test11.py import os #该文件所在位置 ...

  7. FastReport.Net使用:[5]主从表

    主从报表在日常生活中也很常用,譬如订单,班级学生报表等.下面以学生选课为例,以学生为主表,选课为从表做一学生选课报表. 绘制简单主从报表 1.绘制报表标题. 2.为数据区添加从表. ●可以直接右键数据 ...

  8. [BZOJ4012][HNOI2015]开店(动态点分治,树链剖分)

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2168  Solved: 947[Submit][Status] ...

  9. BZOJ1002: [FJOI2007]轮状病毒 (DP)

    标准做法似乎应该是计算生成树数量的基尔霍夫矩阵之类的.. 我看到的做法是一个神奇的高精度dp,当然以后这个blahblahblah矩阵还是要搞一下..   参考(抄袭)网址   这个dp的原理就是把环 ...

  10. Java解释执行和编译执行

    以前有句话说:“Java是解释执行的 ” .现在看来确实不是很准确,至于原因,在此简略解释: 首先,我们先解释一下在Java中解释执行和编译执行的区别. 解释执行:将编译好的字节码一行一行地翻译为机器 ...