15友盟项目--资源文件工具类(resourceutil)sql执行工具类(execsqlutil)(代码片段)

star521 star521     2023-01-15     270

关键词:

资源文件工具类把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("--.*
", "") ;
        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 ;

 

javahutool(糊涂)工具类索引记录

前言有时候工具类太多,包括项目封装的,不知道用哪一个,在这里记录下目录,方便查找介绍Hutool是一个Java工具包,也只是一个工具包,它帮助我们简化每一行代码,减少每一个方法,让Java语言... 查看详情

androidapp打包流程

...成R.java文件,并为AndroidManifest.xml生成Manifest.java类。aidl把项目中自定义的aidl文件生成对应的java类。JavaCompiler把所有的Java源文件编译成class文件,包括:aapt生成的、aidl生成的、项目中自有的java源文件使用proguard混淆,并生成一... 查看详情

wpf添加resourcesdictionary资源一般类库项目中无法添加资源文件(resourcedictionary)

原文:WPF添加ResourcesDictionary资源一般类库项目中无法添加资源文件(ResourceDictionary)在文件夹或者项目右键->Add(添加),会弹出可以快捷添加的资源,但是你会发现没有ResourceDictionary资源可以选择。解决此问题方法:第一步:工... 查看详情

如何从多个项目访问公共资源文件

】如何从多个项目访问公共资源文件【英文标题】:Howtoaccesscommonresourcefilesfrommultipleprojects【发布时间】:2014-02-1410:28:28【问题描述】:在我的一个项目中,我将资源存储在/src/test/resources(典型的maven目录结构)中。存储在项目... 查看详情

jar 中的类路径资源

...jar【发布时间】:2010-12-2609:19:53【问题描述】:我有一个项目A,其中包含一些java文件和一个类路径资源R.txt。在项目中我使用ClassLoader.getSystemResource("R.txt");检索R.txt。然后我有一个项目B,其中包含项目A的jar文件。现在getSystemReso... 查看详情

02.友盟项目--原始日志数据生成(代码片段)

 友盟架构图1 友盟架构图2  日志生成类 packagecom.star.umeng.phone.domain;/***App日志的公共属性*/publicclassAppBaseLogprivateLongcreatedAtMs;//日志创建时间privateStringappId;//应用唯一标识privateStringtenantId; 查看详情

如何打开也是项目资源的 PDF 文件?

】如何打开也是项目资源的PDF文件?【英文标题】:HowtoopenaPDFfilethatisalsoaprojectresource?【发布时间】:2012-01-2610:12:15【问题描述】:我有一个PDF文件作为资源导入到我的项目中。该文件是一个帮助文档,因此我希望能够将它包含... 查看详情

qt入门教程项目篇rcc资源编译(代码片段)

RCC介绍rcc工具是将qrc文件转化,可以将qrc中所有的图片、文档等资源以二进制的形式存储到rcc文件中,且不受平台的限制。RCC使用1.进入D:\\Qt\\5.15.2\\mingw81_64\\bin目录2.执行rcc指令rcc-binaryresource.qrc-oQtLoadRcc.rcc3.初始化的时候... 查看详情

使用ant构建简单项目

 ApacheAnt主要用于Java项目的构建。为什么要使用Ant:  1)项目构建不是简单的编译,各种资源需要合理构建,例如有的类需要压缩成jar文件,有的文件需要放在指定位置,有时候需要使用配置文件。这些工作是繁杂琐... 查看详情

以编程方式添加 ODR 资源

...题描述】:我正在将文件列表作为ODR资源添加到我的Xcode项目中。当我创建新文件时,我必须再次将它们添加为带有ODR资源标签的ODR资源。我非常频繁地获取新文件,我一次又一次地添加它。有没有办法自动添加ODR资源?【问题... 查看详情

如何将新的占位符资源放入 Android Studio 项目(“工具:示例”资源)?

】如何将新的占位符资源放入AndroidStudio项目(“工具:示例”资源)?【英文标题】:HowtoputnewplaceholderresourcesintoAndroidStudioproject("tools:sample"resources)?【发布时间】:2018-02-2120:53:07【问题描述】:背景有时,您希望将一些... 查看详情

egret的config加载类,支持多个文件加载

ResUtils.ts/***Createdbyyangsongon15-2-11.*资源加载工具类,*支持多个resource.json文件加载*/classResUtils{privatestaticinstance:ResUtils;private_configs:Array<any>;private_onConfigComplete:Function;private_onCon 查看详情

java学习-加载.properties工具类(代码片段)

javaWeb项目,要加载xxx.properties或其它如.txt,.md后缀的文本文件文本内容有两种格式key:value或者key=value诸如Spring框架,Jfinal框架,都是使用java.util.Properties类来加载文本配置文件Poperties类是按行读取key和value,所以我们写配置文件时... 查看详情

十次方项目的环境搭建

参考技术A一:搭建父子工程maven项目,父项目只需pom文件中导入web、lombok依赖;二:公共项目tensquare_common继承父项目,实体类里面需要有返回信息类、分页结果类、返回码定义类,工具类里面需要有开源的twitter雪花算法(idWorker)... 查看详情

如何选择合适的小型项目管理工具?

小型项目通常是指工作量在三人至十几人之间的项目,这类项目一般是放任自流,少有管理,通常具有投资少、人员少、时间紧、需求不明确等特点。如借助小型项目管理工具,可以节省大量时间和避免资源浪费,提高项目效率... 查看详情

将资源文件夹目录从目标类更改为 Java 中的源

】将资源文件夹目录从目标类更改为Java中的源【英文标题】:ChangingresourcefolderdirectoryfromTargetclassestosourceinJava【发布时间】:2018-12-2816:15:32【问题描述】:我正在尝试在我的JavaWeb应用程序中从src/main/resources读取属性文件。问题... 查看详情

spring常用工具类

Spring框架下自带了丰富的工具类,在我们开发时可以简化很多工作:1.Resource访问文件资源:具体有:ResourceUtils.getFile(url);FileSystemResource();ClassPathResource();ServletContextResource(application,url);2.文件操作FileCopyUtils具体有:FileCopyUtils. 查看详情

androidkiller是啥软件

...,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作。主要功能... 查看详情