15 友盟项目--资源文件工具类(ResourceUtil)、sql执行工具类(ExecSQLUtil)

资源文件工具类把sql脚本转换为String字符串--->交给sql工具类ExecSQLUtil执行sql

1.资源文件工具类(ResourceUtil)

  把sql脚本转换为String字符串

/**
 * 资源文件工具类
 */
public class ResourceUtil {
    /**
     * 以String方式读取整个资源串
     */
    public static String readResourceAsString(String resource ,String charset) throws Exception {
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource) ;
        ByteArrayOutputStream baos = new ByteArrayOutputStream() ;

        byte[] buf = new byte[1024] ;
        int len = -1 ;
        while((len = input.read(buf)) != -1){
            baos.write(buf , 0 , len);
        }
        return new String(baos.toByteArray() , charset) ;
    }
    /**
     * 以String方式读取整个资源串
     */
    public static String readResourceAsString(String resource) throws Exception {
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource) ;
        ByteArrayOutputStream baos = new ByteArrayOutputStream() ;

        byte[] buf = new byte[1024] ;
        int len = -1 ;
        while((len = input.read(buf)) != -1){
            baos.write(buf , 0 , len);
        }
        String sql = new String(baos.toByteArray(), Charset.defaultCharset()) ;
        //替换掉注释
        sql = sql.replaceAll("--.*\r\n", "") ;
        return sql ;
    }

    /**
     * 将资源文件读取出来,形成list
     */
    public static List<String> readResourceAsList(String resource) throws Exception {
        List<String> list = new ArrayList<String>()  ;
        InputStream input = Thread.currentThread().getContextClassLoader().getResourceAsStream(resource);
        BufferedReader br = new BufferedReader(new InputStreamReader(input)) ;
        String line = null ;
        while((line = br.readLine()) != null){
            if(!line.trim().equals("")){
                list.add(line) ;
            }
        }
        return list ;
    }
}

ResourceUtil -资源文件工具类

2.sql执行工具类(ExecSQLUtil)

  执行sql

package com.oldboy.umeng.spark.stat;

import com.oldboy.umeng.common.util.ResourceUtil;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;

/**
 * 执行脚本工具类
 */
public class ExecSQLUtil {
    /**
     * 执行sql脚本
     */
    public static void execSQLScript(SparkSession sess, String sqlScript) throws Exception {
        //资源工具类   把sql脚本转化为String
        String sqls = ResourceUtil.readResourceAsString(sqlScript);
        String arr[] = sqls.split(";");
        for (String sql : arr) {
            if (!sql.trim().equals("")) {
                sess.sql(sql).show(1000, false);
            }
        }
    }

    /**
     * 执行sqlsStr
     */
    public static void execSQLString(SparkSession sess, String sqlString) throws Exception {
        String arr[] = sqlString.split(";");
        for (String sql : arr) {
            if (!sql.trim().equals("")) {
                sess.sql(sql).show(1000, false);
            }
        }
    }
    /**
     * 执行sqlsStr
     */
    public static Dataset<Row> execSQLString2(SparkSession sess, String sqlString) throws Exception {
        String arr[] = sqlString.split(";");
        for (int i = 0 ; i< arr.length ; i ++) {
            if (!arr[i].trim().equals("")) {
                if(i != arr.length - 1){
                    sess.sql(arr[i]).show(); ;
                }
                else{
                    return sess.sql(arr[i]) ;
                }
            }
        }
        return null ;
    }

    /**
     * 注册函数
     */
    public static void execRegisterFuncs(SparkSession sess) throws Exception {
        execSQLScript(sess, "funcs.sql");
    }

}

ExecSQLUtil 执行sql工具类

3.例如  清洗转储数据

/**
 * 清洗数据
 */
public class DataCleanJava {
    public static void main(String[] args) throws Exception {
        String log_sql_script_name = "data_clean_startup.sql" ;
        if(args != null && args.length > 0){
            log_sql_script_name = args[0] ;
        }
        SparkConf conf = new SparkConf();
        conf.setAppName("dataClean") ;
        conf.setMaster("local[4]") ;

        SparkSession sess = SparkSession.builder().config(conf).enableHiveSupport( ).getOrCreate();
        //先注册函数
        ExecSQLUtil.execRegisterFuncs(sess);
        //执行sql
        ExecSQLUtil.execSQLScript(sess , "data_clean_error.sql");

    }

}

SQL脚本

funcs.sql注册函数脚本

use big12_umeng ;
drop function if exists forkstartuplogs ;
drop function if exists forkeventlogs ;
drop function if exists forkerrorlogs ;
drop function if exists forkpagelogs ;
drop function if exists forkusagelogs ;
drop function if exists formatbyday ;
drop function if exists formatbyweek ;
drop function if exists formatbymonth ;
create TEMPORARY function forkstartuplogs as ‘com.oldboy.umeng.hive.udtf.ForkStartuplogsUDTF‘ ;
create TEMPORARY function forkeventlogs as ‘com.oldboy.umeng.hive.udtf.ForkEventlogsUDTF‘ ;
create TEMPORARY function forkerrorlogs as ‘com.oldboy.umeng.hive.udtf.ForkErrorlogsUDTF‘ ;
create TEMPORARY function forkpagelogs as ‘com.oldboy.umeng.hive.udtf.ForkPagelogsUDTF‘ ;
create TEMPORARY function forkusagelogs as ‘com.oldboy.umeng.hive.udtf.ForkUsagelogsUDTF‘ ;
create TEMPORARY function formatbyday as ‘com.oldboy.umeng.hive.udf.FormatByDayUDF‘ ;
create TEMPORARY function formatbyweek as ‘com.oldboy.umeng.hive.udf.FormatByWeekUDF‘ ;
create TEMPORARY function formatbymonth as ‘com.oldboy.umeng.hive.udf.FormatByMonthUDF‘ ;

原文地址:https://www.cnblogs.com/star521/p/9911891.html

时间: 2024-11-05 18:29:39

15 友盟项目--资源文件工具类(ResourceUtil)、sql执行工具类(ExecSQLUtil)的相关文章

【分享】小工具大智慧之Sql执行工具

工具概况 情况是这样的,以前我们公司有很多Sql用于完成一些很不起眼但又不得不完成的业务,出于方便就直接在Sql查询分析器里执行,按理说应该写一些专门的工具的,但是这些脚本很多,于是我就写了这样一个小工具,只要Sql可以解决的问题就能用到它了,那么它有什么优点呢 一.以前写好的Sql可以不用怎么更改,只需要将参数部分提取出来按照定好的规范改成一个模版即可,使用工具加载模版时,工具会自动将模块要求的参数提供给用户填写. 二.模版文件里可以配置好连接字符串,这样不用每次都连接数据库,也避免连接错误的

项目资源文件配置

项目资源文件配置 学习如何使用资源文件配置. 本指南将引导您完成在本地开发时如何使用Jetty容器做web测试. How to complete this guide 你可以从头开始并完成每一个步骤,或者您可以绕过你已经熟悉的基本设置步骤.无论哪种方式,你最终都可以得到可工作的代码. 单环境 配置文件存放目录src/main/resources/app.properties,测试&生产环境都使用该资源配件 多环境 配置文件存放目录src/main/resources/app.properties

02.友盟项目--原始日志数据生成

友盟架构图1 友盟架构图2 日志生成类 package com.star.umeng.phone.domain; /** * App日志的公共属性 */ public class AppBaseLog { private Long createdAtMs; //日志创建时间 private String appId; //应用唯一标识 private String tenantId; //租户唯一标识,企业用户 private String deviceId; //设备唯一标识 private

01.友盟项目--nginx服务器配置

Nginx实现反向代理 openresty-nginx增强版(现在使用的) localhost  反向代理到 s102--s104 http://openresty.org/cn/ 1.windows下 安装openresty,并修改nginx.conf配置文件 nginx.conf配置文件 #使用指定用户 #user root; #使用的处理器进程数 worker_processes 4; #错误日志文件 #error_log logs/error.log; #日志文件与日志级别 #error

12 友盟项目--配置nginx的日志滚动

配置nginx的日志滚动-------------------------- 使用linux的crod调度器,周期性生成新文件. [编写滚动脚本 /usr/local/bin/umeng_roll_log.sh]     chmod  777     修改可执行权限 #!/bin/bash dateStr=`date '+%Y-%m-%d-%H-%M'` mv /usr/local/openresty/nginx/logs/access.log /usr/local/openresty/ngin

22 友盟项目--sparkstreaming对接kafka、集成redis--从redis中查询月留存率

 实时存储到redis,更新用户使用时间的最大.最小值-->来求留存率  避免全表扫描问题 1.spark 对接kafka 消费者   解析json 2.concat(appid,'#',appversion,'#',brand,'#',appplatform,'#',devicestyle,'#',ostype,'#',deviceid) ---> 作为key  各个维度 3.选出用户使用app的最小时间戳min , 最大时间戳max  -->作为value 4.存储到redis 依赖

转:C#制作ORM映射学习笔记二 配置类及Sql语句生成类

在正式开始实现ORM之前还有一点准备工作需要完成,第一是实现一个配置类,这个很简单的就是通过静态变量来保存数据库的一些连接信息,等同于.net项目中的web.config的功能:第二需要设计实现一个sql语句的生成类来帮助生成sql语句,当前如果不实现这个类也不会影响orm的制作,之所以要做这么一个类主要有几个目的,1.减少sql语句中拼写错误的发生.2.统一解决防sql注入的问题. 下面分别说明一下这两个类的实现方式: 1.配置类DbConfig using System; using Sys

.net 根据匿名类生成实体类,根据datatable生成实体类,根据sql生成实体类

在开发中可能会遇到这几种情况 1.EF或LINQ查询出来的匿名对象在其它地方调用不方便,又懒的手动建实体类 2.通过datatable反射实体需要先建一个类 ,头痛 3.通过SQL语句返回的实体也需要先建一个类 ,头痛 4.如果通过代码生成器要写模版,需要安装或者不想生成一堆不用的类 为了解决上面的不便之处,我封装了一个实体生成类,可以扔到程序里面任意调用 封装类: 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

关于C#资源文件操作的总结

// 在这里,我来总结一下关于资源文件的相关操作. //1. 比较常见的有获取资源文件对应的文件流,然后转换到相对应的文件 // 比较典型的做法是通过代码程序集加载指定资源 // 如下通过Assembly 的静态方法GetExecutingAssembly() 得到程序集 // 还有很多方式可以得到代码程序集 C#代码                           System.Reflection.Assembly asm = System.Reflection.Assembly.Get