TPCDS

Инструкция по созданию набора данных TPCDS на MacOS и Linux

Установка

  1. Клонировать репозиторий с GitHub,
  2. Установить зависимости для сборки.
    • MacOS: xcode-select --install
    • Linux:
      • sudo apt-get install gcc make flex bison byacc git
      • `sudo yum install gcc make flex bison byacc git
  3. cd tpcds-kit/tools
  4. Сборка
    • make OS=MACOS
    • make OS=LINUX

Версия gcc в Linux

Для того чтобы сборка прошла в Ubuntu 24.04 мне потребовалось установить более старую версию gcc и её собрать с дополнительными ключами.

sudo apt install gcc-9
make CC=gcc-9 OS=LINUX

Генерация

./dsdgen -DIR /Users/maksim/tmp/data -SCALE 2 -VERBOSE Y

Где:

  • директория уже должна быть создана

Параллельная генерация данных

Since dsdgen generates 200-300GB/hour serially on a 2-3GHz x86 processor, it is useful to run multiple parallel streams when generating large amounts of data.

Example:generating 1 GB with 4 parallel streams simultaneously

SCALE=1
TPCDS_DIR=/tmp/dsdgen/${SCALE}
mkdir -p ${TPCDS_DIR}
dsdgen -scale ${SCALE} -f -dir ${TPCDS_DIR} -parallel 4 -child 1 &
dsdgen -scale ${SCALE} -f -dir ${TPCDS_DIR} -parallel 4 -child 2 &
dsdgen -scale ${SCALE} -f -dir ${TPCDS_DIR} -parallel 4 -child 3 &
dsdgen -scale ${SCALE} -f -dir ${TPCDS_DIR} -parallel 4 -child 4 &

Загрузка данных

  1. Создать таблицы скриптом, что лежит в папке tools: psql -h 10.73.152.23 -U tpcds -d tpcds -f tpcds.sql
  2. Выполнить скрипт ниже для загрузки данных:
for i in `ls *.dat`; do
  table=${i/.dat/}
  echo "Loading $table..."
  sed 's/|$//' $i > /tmp/$i
  psql -U tpcds -h 10.73.152.23 tpcds -q -c "TRUNCATE $table"
  psql -U tpcds -h 10.73.152.23 tpcds -c "\\copy $table FROM '/tmp/$i' CSV DELIMITER '|'"
done

Генерация запросов

dsqgen \
-DIRECTORY ../query_templates \
-INPUT ../query_templates/templates.lst \
-VERBOSE Y \
-QUALIFY Y \
-SCALE 10000 \
-DIALECT netezza \
-OUTPUT_DIR /tmp