zoukankan      html  css  js  c++  java
  • Saiku数据库迁移后的刷新脚本-Shell脚本读取数据库中的数据(二十三)

    Saiku数据库迁移后的刷新脚本

    之前有谈过对saiku中的数据进行刷新,因为saiku默认会从缓存中查询数据,但是配置不使用缓存又会效率低下...

    所以这里就需要做一个数据刷新,每次ETL之后都需要执行一遍数据刷新脚本。

    刷新脚本主要分为两部分

    1.使用shell命令从数据库中读取已有的用户信息 (因为已经做过数据迁移,数据库已经从h2转为我们自己的mysql)

    saikuRefresh.sh

    #!/bin/bash
    
    #数据库连接信息
    HOSTNAME="10.11.22.33"  #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="root"
    DBNAME="saiku"  #数据库名称
    TABLENAME="users" #数据库中表的名称
    
    #查詢數據
    select_sql="select username from ${TABLENAME}"
    mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"
    

     使用命令 sh  saikuRefresh.sh 执行脚本,即会看到已有的用户信息

    2. 循环取出用户信息,然后分别对每个用户执行刷新缓存命令 (以下便是完整的 saikuRefresh.sh 脚本信息)

    >>> 接收shell脚本查询数据库的查询结果:  query_result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"`    #注意这个` `符号不要丢哦

    >>> shell判断文件是否存在:

     if [ -f  '/app/Saiku/saiku_rfresh.txt' ] ; then

      echo 'exists!!!.'
    fi

    >>> shell判断字符串是否相等:

    if [ "hello" != "hello" ] ; then
      echo 'equals!!!'
    fi

    >>>shell循环取出数据:

    for currusername in $query_result;
    do
      echo $currusername
    done;

    #!/bin/bash
    
    #数据库连接信息
    HOSTNAME="10.22.33.44"  #数据库信息
    PORT="3306"
    USERNAME="root"
    PASSWORD="root"
    DBNAME="report"  #数据库名称
    TABLENAME="users" #数据库中表的名称
    
    #cookies存储文件相关信息
    dir=`pwd` #得到当前目录
    filename=/saikuUserCookie.txt
    filePath=${dir}${filename}
    
    #查詢數據
    select_sql="select username from ${TABLENAME}"
    mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"
    
    #使用变量query_result接收查询结果 所有用户名
    query_result=`mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} -p${PASSWORD} ${DBNAME} -e "${select_sql}"`
    
    #根据用户名进行统一刷新当前用户
    for currusername in $query_result;
    do
        if [ -f $filePath ] ; then
            rm -rf $filePath
            echo 'The saikuUserCookie.txt exists,old saikuUserCookie.txt is removed.'
        fi
      	
        if [ $currusername != "username" ] ; then
            echo 'Begin to get new Cookie into saikuUserCookie.txt.'
    	curl -c ./saikuUserCookie.txt -d "language=zh&password=password124&username=$currusername" http://10.22.33.44:8080/saiku/rest/saiku/session
    	curl -b ./saikuUserCookie.txt "http://10.22.33.44:8080/saiku/rest/saiku/$currusername/discover/refresh" 1>saiku_refresh_data.txt
    	echo $currusername ' refresh OK............' 1>>saiku_refresh_data.txt
    	echo '---------------------' $currusername 'refresh finished! ---------------------'
        fi
    done;
    

      

  • 相关阅读:
    使用goto跳转到switch的某个case 拓荒者
    sql server 跨服务器查询 拓荒者
    [转]ASP.NET 缓存:方法和最佳实践 拓荒者
    asp.net gridview 和 repeater 模板代码示例 拓荒者
    【转】配置子目录Web.config使其消除继承,用虚拟目录创建多个网站的方法 拓荒者
    PostSharp Thread Dispatching(GUI多线程)
    Silverlight获取WebHost配置信息WebClient和XmlSerializer模拟
    Google Chrome 語音辨識
    MSBuild + MSILInect实现编译时AOP之预览
    Silverlight DataGrid行背景分组着色
  • 原文地址:https://www.cnblogs.com/DFX339/p/10712204.html
Copyright © 2011-2022 走看看