spark sql 查询hive表并写入到PG中

import java.sql.DriverManager
import java.util.Properties

import com.zhaopin.tools.{DateUtils, TextUtils}
import org.apache.log4j.{Level, Logger}
import org.apache.spark.sql.SparkSession

/**
  * Created by xiaoyan on 2018/5/21.
  */
object IhrDownloadPg {
  def main(args: Array[String]){
    //设置spark日志级别
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
    System.setProperty("HADOOP_USER_NAME","hive")
    val spark = SparkSession
      .builder()
      .master("local[*]")
      .appName("hive ->> ihr_oper_download")
      .config("spark.sql.warehouse.dir", "spark-warehouse")
      .config("hive.metastore.uris", "thrift://master:9083")
      .enableHiveSupport()
      .getOrCreate()
    import spark.sql

    val dt = if(!args.isEmpty) args(0) else "20180506"
    val yesterday = DateUtils.dateAdd(dt, -1)

    val url = "jdbc:postgresql://192.168.9.222:5432/safe_base"
    Class.forName("org.postgresql.Driver")
    val conn = DriverManager.getConnection(url,"secu_man","secu_man")
    val stmt = conn.createStatement()
    stmt.execute("delete from ihr_oper_download where dt = ‘" + yesterday+"‘")

    //查询RDD
    val re1 = sql("select oper_date, " +
      "       acct_id, " +
      "       acct_name, " +
      "       module_name, " +
      "       oper_desc, " +
      "       ip, " +
      "       dt"  +
      " from safe.fact_ihr_oper_download t " +
      " where t.dt > ‘20180320‘ and t.dt <"+yesterday+"");

    val connectionProperties = new Properties()
    //增加数据库的用户名(user)密码(password),指定postgresql驱动(driver)
    connectionProperties.put("user", "secu_man");
    connectionProperties.put("password", "secu_man");
    connectionProperties.put("driver", "org.postgresql.Driver");
    re1.toDF().write.mode("append").jdbc(url, "ihr_oper_download", connectionProperties);
    System.err.print("ihr_oper_download insert complete!! ");
  }
}

  注意:如果PG表不存在,默认会自动创建一张表,且字段类型为text

原文地址:https://www.cnblogs.com/qxyy/p/9073148.html

时间: 2024-07-29 09:17:45

spark sql 查询hive表并写入到PG中的相关文章

Spark SQL with Hive

前一篇文章是Spark SQL的入门篇Spark SQL初探,介绍了一些基础知识和API,但是离我们的日常使用还似乎差了一步之遥. 终结Shark的利用有2个: 1.和Spark程序的集成有诸多限制 2.Hive的优化器不是为Spark而设计的,计算模型的不同,使得Hive的优化器来优化Spark程序遇到了瓶颈. 这里看一下Spark SQL 的基础架构: Spark1.1发布后会支持Spark SQL CLI , Spark SQL的CLI会要求被连接到一个Hive Thrift Server

spark sql on hive初探

前一段时间由于shark项目停止更新,sql on spark拆分为两个方向,一个是spark sql on hive,另一个是hive on spark.hive on spark达到可用状态估计还要等很久的时间,所以打算试用下spark sql on hive,用来逐步替代目前mr on hive的工作. 当前试用的版本是spark1.0.0,如果要支持hive,必须重新进行编译,编译的命令有所变化 export MAVEN_OPTS="-Xmx2g -XX:MaxPermSize=512M

SQL 查询横表变竖表

SQL 查询横表变竖表 /*普通行列转换 假设有张学生成绩表(tb)如下:Name Subject Result张三 语文 74张三 数学 83张三 物理 93李四 语文 74李四 数学 84李四 物理 94*/ -------------------------------------------------------------------------/*想变成 姓名         语文        数学        物理          ---------- ----------

sql:查询创建表的结构

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

SQL查询某表是否存在及返回新增数据的ID

下面简单介绍了SQL查询某表是否存在以及返回新增数据的ID值. 1.查询表是否存在: 表名:"t_Demo", type = 'u'  查看是不是用户表 select * from sysobjects where id = object_id('t_Demo') and type = 'u' select * from sys.tables where name='t_Demo' and type = 'u' 2.查询字段是否存在: 表名:"t_Demo", 字段

Hibernate原生SQL查询多表关联,SQL语句要注意的问题

Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Question 和 Answer分别对应数据表 question 和answer. 并且表 question 和answer 的字段大部分都一样,字段数目也一样. 执行如下的操作: 1> 使用hibernate 使用原生SQL查询, Query q = session.createSQLQuery(sql).

kylin2.3版本启用jdbc数据源(可以直接通过sql生成hive表,省去手动导数据到hive,并建hive表的麻烦)

说明: jdbc数据源,本质上还是hive数据源. 由于数据库做大表关联方面性能还是不行.所以kylin的默认数据源仍然是hive,我觉得是非常合理的. 对应jdbc数据源,其实就是一种便利的方式.其基本原理就是通过连接数据库,选取所要用的表(或者sql查询). 通过sqoop并行的抽取数据,并按照表名生成对应的hive表.cube的构建就根据生成的hive表进行. 每次构建的时候都重新抽取数据,生成hive表,构建完成之后,就把这个hive表删除掉. 相当于是自动做了之前开发需要 自己做的数据

第57课:Spark SQL on Hive配置及实战

1,首先需要安装hive,参考http://lqding.blog.51cto.com/9123978/1750967 2,在spark的配置目录下添加配置文件,让Spark可以访问hive的metastore. [email protected]:/usr/local/spark/spark-1.6.0-bin-hadoop2.6/conf# vi hive-site.xml <configuration> <property>   <name>hive.metast

SQL查询一个表中类别字段中Max()最大值对应的记录

问题是: 数据库有一个表 code,里面有个点击量字段click_num和一个类别字段kind以及其它信息字段, 现在要搜出每个类别中点击量最大的那条记录,如果是10个类别,那么结果应该是10条记录, 如果最大点击量有两个相同的只要一条. 经过N次搜索,N次检测网上的解决SQL语句,终于找到个优雅的而且结果正确的SQL,这个是一个博客作者在Mysql的官方文档里面发现的. 禁不住收藏了,以备后用. select id,kind,click_num from code as a where  cl