AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 323311
Accepted
Muhammad Gelbana
Muhammad Gelbana
Asked: 2023-02-10 02:52:25 +0800 CST2023-02-10 02:52:25 +0800 CST 2023-02-10 02:52:25 +0800 CST

如何使用 TPC-DS dsqgen 工具在单独的 SQL 文件中生成每个查询?

  • 772

我正在使用 TPC-DS dsqgen 将其模板转换为可运行的查询。

我尝试了以下参数变体以将每个查询保存在专用.sql文件中,但它们都将可运行查询保存在 中query_0.sql,即使我使用的模板不是query1.tpl!

$ ./dsqgen -v -out ../output/queries -dir ../query_templates -dialect netezza -input ../query_templates/templates.lst
qgen2 Query Generator (Version 3.2.0)
Copyright Transaction Processing Performance Council (TPC) 2001 - 2021
Warning: This scale factor is valid for QUALIFICATION ONLY
Parsed 99 templates

$ ls -ltrh ../output/queries
total 156K
-rw-rw-r-- 1 mgelbana mgelbana 156K Feb  9 20:42 query_0.sql

$ ./dsqgen -v -out ../output/queries -dir ../query_templates -dialect netezza -template ../query_templates/query2.tpl
qgen2 Query Generator (Version 3.2.0)
Copyright Transaction Processing Performance Council (TPC) 2001 - 2021
Parsed 1 templates

$ ls -ltrh ../output/queries
total 4.0K
-rw-rw-r-- 1 mgelbana mgelbana 2.1K Feb  9 20:44 query_0.sql

因此,无论我是选择一个特定的模板还是只选择处理所有模板,我仍然会每次都以完全相同的名称将输出写入一个文件中!

那么如何让这个工具将生成的可运行SQL查询输出到.sql关联模板后的专用文件名中呢?

benchmark
  • 1 1 个回答
  • 17 Views

1 个回答

  • Voted
  1. Best Answer
    Amalendu
    2023-02-10T04:50:08+08:002023-02-10T04:50:08+08:00

    我用过 tpc-ds v3.2.0 有几个 bug。其中之一是您在上面提到的问题(生成对同一文件的查询!)。为了节省您的时间,这里提供了完整的 bash 脚本,用于从模板以及 Netezza 的变体生成查询。您需要编辑脚本来设置一些变量/路径,仅此而已。让我知道是否有任何问题。祝你好运!

    #! /bin/bash
    
    function usage
    {
        echo "$0 <scale>"
        echo "    scale in GB is one of 100, 300, 1000, 3000, 10000, 30000, 100000"
        echo ""
        exit
    } # end function usage
    
    function fix_query_template
    {
        # add following line to beginning of each query template file
        #define _END = "";
        for file in $(find $TEMPLATEDIR -name "query*.tpl")
        do
            echo Processing $file
            # Remove line if exists
            sed -i '/^define _END = "";/d' $file
            # Add line to beginning
            sed -i '1s/^/define _END = "";\n/' $file
        done
    } # end function fix_query_template
    
    function fix_netezza_template
    {
        # append 'define _END = "";' to netezza.tpl
        file="$TEMPLATEDIR/netezza.tpl"
        echo Processing $file
        # Remove line if exists
        sed -i '/^define _END = "";/d' $file
        # Append line to file
        echo 'define _END = "";' >> $file
    } # end function fix_netezza_template
    
    function gen_query_alt
    {
        # Generate queries from template for given scale
        for i in `seq 1 99`
        do
            j=$(printf "%03d" $i) #i=1 j=001
    
            cmd="echo query${i}.tpl > $TEMPLATEDIR/templates_${i}.lst"
            echo "$cmd"; eval "$cmd"
    
            cmd="$TOOLSDIR/dsqgen -directory $TEMPLATEDIR -input $TEMPLATEDIR/templates_${i}.lst -distributions $TOOLSDIR/tpcds.idx -verbose y -qualify y -scale $SCALE -dialect netezza -output_dir $OUTDIR -rngseed $SEED"
            echo "$cmd"; eval "$cmd"
    
            cmd="mv $MV_OPTION $OUTDIR/query_0.sql $OUTDIR/query${j}.sql"
            echo "$cmd"; eval "$cmd"
            echo ""
        done
    } # end function gen_query_alt
    
    function gen_query
    {
        # Generate queries from template for given scale
        pushd $TOOLSDIR
        for fullfile in `ls $TEMPLATEDIR/query*.tpl`
        do
            echo $fullfile
            filename=$(basename -- "$fullfile")
            filename="${filename%.*}"
            i=`echo "$filename"|cut -c 6-`
    
            j=$(printf "%03d" $i)
            # filename=query9 i=9 j=009
            #echo $filename $i $j
    
            \rm -f $OUTDIR/query_0.sql
            #cmd="./dsqgen -directory ../query_templates -template query${i}.tpl -distributions $TOOLSDIR/tpcds.idx -verbose y -qualify y -scale $SCALE -dialect netezza -output_dir $OUTDIR -rngseed $SEED"
            cmd="./dsqgen -directory ../query_templates -template query${i}.tpl -verbose y -scale $SCALE -dialect netezza -output_dir $OUTDIR -rngseed $SEED"
            echo "$cmd"; eval "$cmd"
    
            cmd="mv $MV_OPTION $OUTDIR/query_0.sql $OUTDIR/query${j}.sql"
            echo "$cmd"; eval "$cmd"
            echo ""
        done
        popd
    } # end function gen_query
    
    function gen_query_variant
    {
        # Generate query variants from template for given scale
        pushd $TOOLSDIR
        \cp $TEMPLATEDIR/netezza.tpl $TEMPLATEVARIANTDIR/netezza.tpl
        for fullfile in `ls $TEMPLATEVARIANTDIR/query*.tpl`
        do
            echo $fullfile
            filename=$(basename -- "$fullfile")
            filename="${filename%.*}"
            lastchar=`echo "${filename: -1}"`
            i=`echo "$filename"|rev|cut -c 2-|rev|cut -c 6-`
            j=$(printf "%03d" $i)
            # filename=query10a i=10 j=010 lastchar=a
            #echo $filename $i $j $lastchar
    
            cmd="./dsqgen -directory ../query_variants -template query${i}${lastchar}.tpl -verbose y -scale $SCALE -dialect netezza -output_dir $OUTDIR -rngseed $SEED"
            echo "$cmd"; eval "$cmd"
    
            cmd="mv $MV_OPTION $OUTDIR/query_0.sql $OUTDIR/query${j}${lastchar}.sql"
            echo "$cmd"; eval "$cmd"
            echo ""
        done
        popd
    } # end function gen_query_variant
    
    function fix_query
    {
        # Generate queries from template for given scale
        for f in `ls $OUTDIR/*.sql`
        do
            # Change file in-place
            # Match lines that don't have 'interval'
            # Search for pattern '(one or more space)(one or more digits)(one or more space)days'
            # Replace with " interval '(digits matched) days'"
            # e.g. change "  14 days" to  "interval '14 days'"
            # query030.sql has an error, c_last_review_date_sk should be c_last_review_date
            cmd="sed -i -E -e \"/interval/!s/([ ]+)([0-9]+)([ ]+)days/ interval '\2 days'/gi\" -e \"s/c_last_review_date_sk/c_last_review_date/gi\" $f"
            echo "$cmd"
            eval "$cmd"
    
            cmd="chmod 444 $f"
            echo "$cmd"
            eval "$cmd"
        done
    } # end function fix_query
    
    #-----------------------------------------------
    # Main
    #-----------------------------------------------
    
    if [ "$#" != 1 ] || [ "$1" == "-h" ]
    then
        usage
    fi
    
    SCALE="$1" # in GB
    case $SCALE in
        100 | 300 | 1000 | 3000 | 10000 | 30000 | 100000) ;;
        *) usage ;;
    esac
    
    SCRIPTDIR=$PWD
    BASEDIR="$SCRIPTDIR/.."
    TOOLSDIR="$BASEDIR/DSGen-software-code-3.2.0rc1/tools"
    TEMPLATEDIR="$BASEDIR/DSGen-software-code-3.2.0rc1/query_templates"
    TEMPLATEVARIANTDIR="$BASEDIR/DSGen-software-code-3.2.0rc1/query_variants"
    OUTDIR="$BASEDIR/sql/$SCALE"
    OVERWRITE=yes
    MV_OPTION=" -n " # no clobber
    
    if [ ! -d "$TOOLSDIR" ]
    then
        echo "Error: $TOOLSDIR is missing"
        exit
    fi
    
    if [ ! -d "$TEMPLATEDIR" ]
    then
        echo "Error: $TEMPLATEDIR is missing"
        exit
    fi
    
    if [ "$OVERWRITE" = "yes" ]
    then
        MV_OPTION=" -f "
    else
        MV_OPTION=" -n " # no clobber
        if [ -d "$OUTDIR" ]
        then
            echo "Error: $OUTDIR already exists, I won't overwrite"
            exit
        fi
    fi
    
    mkdir -p $OUTDIR
    
    # Default value for rngseed in qgen_params.h and params.h in
    # tpc-ds_v3.2.0_compiled/DSGen-software-code-3.2.0rc1/tools
    SEED="19620718"
    
    # -----------------------------
    # Don't run these
    # -----------------------------
    # No need to fix each query template, instead just fix netezza template
    #fix_query_template
    #gen_query_alt # Alternative to gen_query
    
    # -----------------------------
    # Run these
    # -----------------------------
    # echo "We should not be running these because we have already generated the queries! Hence exiting." && exit
    fix_netezza_template
    gen_query
    gen_query_variant
    fix_query
    
    • 1

相关问题

  • 以 0.00 NOTPM 运行 DBT2 测试结果

  • 如何对 PostgreSQL 查询进行基准测试?

  • mysqlslap 在特定计算机上运行速度非常慢

  • 如何使用 psql 对 SQL 查询进行计时?

  • 是否有任何 MySQL 基准测试工具?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve