91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive -f如何封裝支持傳參數

發布時間:2021-12-10 10:13:11 來源:億速云 閱讀:272 作者:小新 欄目:云計算

這篇文章給大家分享的是有關Hive -f如何封裝支持傳參數的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

需求

}Hive    -f 

}hiveF  封裝hive –f    aa.sql

}支持傳任意多個參數,實現shell腳本和sql文件的分離

}Java  類名  *.sql  -date  “2013-01-01”  ….

分析

對一下sql中的分區字段${date} 進行hiveF的封裝,讓date字段傳值和sql文件分離

create table tmp_test1 as 
select session_id,
       url,
       getcmsid(url)
 from page_views where dt='{$date}' and url like '%topicId%';

java代碼如下

main.java

package hive.hiveF;
import java.io.File;
public class Main {
    /**
     * 
     * @param ../*.sql -date "2013-01-01"
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
//        args = new String[5];
//        args[0] ="c:/test.sql";
//        args[1] = "-date";
//        args[2] = "2013-01-01";
//        args[3] = "-date1";vi hi
//        args[4] = "2013-11-11";
        
        
        ParseArgs parse = new ParseArgs(args);
        String sql = Utils.getSql(new File(args[0]));
        System.out.println(Utils.parse(sql, parse.getMap()));
//        System.out.println(parse.getMap().get("date"));
//       System.out.println("select * from t1 limit 2");    
    }
}

ParesArgs.java(將shell腳本中的-date "$date" 中的date值分離出來,以便傳到sql文件中執行,見hive_test.sh,hive_test.hql)

package hive.hiveF;

import java.util.HashMap;
import java.util.Map;

public class ParseArgs {
    private Map<String,String> map = null;
    public ParseArgs(String[] args){
        map = new HashMap<String, String>();
        if(args.length == 0){
            return ;
        }
        int i=0;
        while(i<args.length){
            String par = args[i].trim();
            if(par.startsWith("-")){
                String key = par.substring(1).trim();//key是date value是下一個參數。i++
                i++;
                String value = null;
                if(args.length > i){
                    value = args[i].trim();
                    if(value.startsWith("\"") || value.startsWith("\'")){
                        value = value.substring(1,value.length()-1).trim();
                    }
                }
                
                map.put(key, value);
                i++;
            }else{
                i++;    
            }
            
        }
        
    }
    
    public Map<String, String> getMap() {
        return map;
    }
    
}

Utils.java

package hive.hiveF;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Map;

public class Utils {
    public static final String BEGIN ="{$";
    public static final String END ="}";
    
    public static  String getSql(File file) throws Exception{
        BufferedReader bf = new BufferedReader(new FileReader(file));
        StringBuffer sqlBuffer = new StringBuffer();
        String temp = null;
        while((temp = bf.readLine())!=null){
            String tmp = temp.trim();
            if(tmp.length() == 0 || tmp.startsWith("#") || tmp.startsWith("--")){
                continue;
            }
            sqlBuffer.append(tmp+" ");
        }
        bf.close();
    
        return sqlBuffer.toString();
    }
    /**
     *把SQL里的參數引用,替換為map里的value 
     * @param sql
     * @param map
     */
    public static String parse(String sql , Map<String, String> map ){
        int begin = sql.indexOf(BEGIN);
        while(begin !=-1){
            String suffix = sql.substring(begin + BEGIN.length()); //data}
            int end = begin + BEGIN.length() + suffix.indexOf(END);
            String key = sql.substring(begin+BEGIN.length(),end).trim();
            if(map!=null && map.get(key)!=null){
                sql = sql.substring(0,begin) + map.get(key) + sql.substring(end+1,sql.length());
                
            }else{
                throw new RuntimeException("Incalid Expression...");
            }
            begin = sql.indexOf(BEGIN);
            
        }
        return sql ;
    }

}

   

準備

1、在hive中創建表page_views

create table page_views (
             sessionid string,
             url string  ) partitioed by (dt string) 
             row format delimited fields terminated by '\t' ;

2、在root目錄下創建文件vi pageviews

1       http://www.baidu.com/topicId=123123

2       http://www.baidu.com/topicId=14325245

3       http://www.baidu.com/topicId=432w32452

4       http://www.baidu.com/topicId=542351

4       http://www.baidu.com/topicId=5423e

5       http://www.baidu.com/topicId=54325342

6       http://www.baidu.com/topicId=2452

3       http://www.baidu.com/topicId=543222

3、加載數據到page_views中

load data local inpath '/root/pageviews' into table page_views partition (dt='2013-08-08');

4、向/usr/hiveF/lib中導入一個做好的udf(getCmsId)參考UDF和UDAF開發

操作

1、在Linux文件中創建目錄hiveF/lib、HiveF/bin 分別存放jar包,和shell文件

2、將以上三個java程序打成hiveF3.jar包上傳到HiveF/lib文件中

3、進入HiveF/bin目錄下創建兩個文件hive_test.sh,hive_test.hql,hiveF

vi hiveF

. /etc/profile     
sql=`java -jar /usr/hiveF/lib/hiveF3.jar $*`      
echo "$sql"      
hive -e "$sql"

vi hive_test.hql 

add jar /usr/hiveF/getId.jar; 
create temporary function getcmsid as 'hive.GetCmsID';

drop table tmp_test1;

create table tmp_test1 as 
select sessionid,
       url,
       getcmsid(url)
 from page_views where dt='{$date}' and url like '%topicId%';

vi hive_test.sh

#!/bin/bash

#set -x
. /etc/profile

cd /opt/beifeng
begin=`date -d -1days +%Y-%m-%d`

begin="2013-08-08"


#hive -f ./hive_test.hql

hiveF3 /usr/hiveF/bin/hive_test.hql -date "$begin"

4、在/etc/profile 中將/usr/hiveF/bin添加到Path中保存退出

   source /etc/profile

5、執行shell腳本 ./hive_test.sh 完成后

Hive -f如何封裝支持傳參數

感謝各位的閱讀!關于“Hive -f如何封裝支持傳參數”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節
推薦閱讀:
  1. hive 安裝
  2. Hive怎樣調優

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

夏津县| 韶山市| 革吉县| 瑞金市| 平谷区| 雅安市| 宣汉县| 防城港市| 阳山县| 桃江县| 子洲县| 修武县| 舞阳县| 明星| 高雄县| 道孚县| 龙门县| 寿阳县| 拉萨市| 霍邱县| 镇巴县| 青海省| 肥西县| 南溪县| 神木县| 汉阴县| 米易县| 正定县| 榆中县| 莲花县| 绥棱县| 文成县| 连云港市| 正安县| 阳信县| 新野县| 农安县| 涞水县| 西昌市| 普兰店市| 武定县|