remove sleep and make tests more deterministic

This commit is contained in:
Mikhail Filimonov 2020-10-21 09:10:40 +02:00
parent d7ea9b6d93
commit 9ffa7bd0b6
No known key found for this signature in database
GPG Key ID: 6E49C2E9AF1220BE
2 changed files with 28 additions and 45 deletions

View File

@ -1,16 +1,8 @@
202001_1_1_0 1 2020-01-01 String
202001_4_4_0 1 2020-01-01 String
202002_2_2_0 2 2020-02-02 Another string
202002_5_5_0 2 2020-02-02 Another string
202003_3_3_0 3 2020-03-03 One more string
202003_6_6_0 3 2020-03-03 One more string
202001_1_1_0 4 2020-01-02 String for first partition
202001_4_4_0 4 2020-01-02 String for first partition
202001_1_4_1 1 2020-01-01 String
202001_1_4_1 1 2020-01-01 String
202002_2_5_1 2 2020-02-02 Another string
202002_2_5_1 2 2020-02-02 Another string
202003_3_6_1 3 2020-03-03 One more string
202003_3_6_1 3 2020-03-03 One more string
202001_1_4_1 4 2020-01-02 String for first partition
202001_1_4_1 4 2020-01-02 String for first partition
1 2020-01-01 String
2 2020-02-02 Another string
3 2020-03-03 One more string
4 2020-01-02 String for first partition
1 2020-01-01 String
2 2020-02-02 Another string
3 2020-03-03 One more string
4 2020-01-02 String for first partition

View File

@ -3,13 +3,18 @@
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
. "$CURDIR"/../shell_config.sh
WORKING_FOLDER="${CLICKHOUSE_TMP}/01527_clickhouse_local_optimize"
WORKING_FOLDER_01527="${CLICKHOUSE_TMP}/01527_clickhouse_local_optimize"
rm -rf "${WORKING_FOLDER}"
mkdir -p "${WORKING_FOLDER}/metadata/local/"
rm -rf "${WORKING_FOLDER_01527}"
mkdir -p "${WORKING_FOLDER_01527}/metadata/local/"
# OPTIMIZE was crashing due to lack of temporary volume in local
${CLICKHOUSE_LOCAL} --query "drop database if exists d; create database d; create table d.t engine MergeTree order by a as select 1 a; optimize table d.t final" -- --path="${WORKING_FOLDER_01527}"
# Some extra (unrealted) scenarios of clickhouse-local usage.
## 1. Imagine we want to process this file:
cat <<EOF > "${WORKING_FOLDER}/data.csv"
cat <<EOF > "${WORKING_FOLDER_01527}/data.csv"
1,2020-01-01,"String"
2,2020-02-02,"Another string"
3,2020-03-03,"One more string"
@ -19,42 +24,28 @@ EOF
## 2. that is the metadata for the table we want to fill
## schema should match the schema of the table from server
## (the easiest way is just to copy it from the server)
## I've added sleepEachRow(0.5) here just to mimic slow insert
cat <<EOF > "${WORKING_FOLDER}/metadata/local/test.sql"
ATTACH TABLE local.test (id UInt64, d Date, s String, x MATERIALIZED sleepEachRow(0.5)) Engine=MergeTree ORDER BY id PARTITION BY toYYYYMM(d);
cat <<EOF > "${WORKING_FOLDER_01527}/metadata/local/test.sql"
ATTACH TABLE local.test (id UInt64, d Date, s String) Engine=MergeTree ORDER BY id PARTITION BY toYYYYMM(d);
EOF
## 3a. that is the metadata for the input file we want to read
## it should match the structure of source file
## use stdin to read from pipe
cat <<EOF > "${WORKING_FOLDER}/metadata/local/stdin.sql"
cat <<EOF > "${WORKING_FOLDER_01527}/metadata/local/stdin.sql"
ATTACH TABLE local.stdin (id UInt64, d Date, s String) Engine=File(CSV, stdin);
EOF
## 3b. Instead of stdin you can use file path
cat <<EOF > "${WORKING_FOLDER}/metadata/local/data_csv.sql"
ATTACH TABLE local.data_csv (id UInt64, d Date, s String) Engine=File(CSV, '${WORKING_FOLDER}/data.csv');
cat <<EOF > "${WORKING_FOLDER_01527}/metadata/local/data_csv.sql"
ATTACH TABLE local.data_csv (id UInt64, d Date, s String) Engine=File(CSV, '${WORKING_FOLDER_01527}/data.csv');
EOF
## All preparations done,
## the rest is simple:
## All preparations done, the rest is simple:
# option a (if 3a used) with pipe / reading stdin
cat "${WORKING_FOLDER}/data.csv" | ${CLICKHOUSE_LOCAL} --query "INSERT INTO local.test SELECT * FROM local.stdin" -- --path="${WORKING_FOLDER}"
# option a (if 3a used) with pipe / reading stdin (truncate was added for the test)
cat "${WORKING_FOLDER_01527}/data.csv" | ${CLICKHOUSE_LOCAL} --query "INSERT INTO local.test SELECT * FROM local.stdin; SELECT * FROM local.test ORDER BY id; TRUNCATE TABLE local.test;" -- --path="${WORKING_FOLDER_01527}"
# option b (if 3b used) 0 with filepath
${CLICKHOUSE_LOCAL} --query "INSERT INTO local.test SELECT * FROM local.data_csv" -- --path="${WORKING_FOLDER}"
# option b (if 3b used) 0 with filepath (truncate was added for the test)
${CLICKHOUSE_LOCAL} --query "INSERT INTO local.test SELECT * FROM local.data_csv; SELECT * FROM local.test ORDER BY id; TRUNCATE TABLE local.test;" -- --path="${WORKING_FOLDER_01527}"
# now you can check what was inserted (i did both options so i have doubled data)
${CLICKHOUSE_LOCAL} --query "SELECT _part,* FROM local.test ORDER BY id, _part" -- --path="${WORKING_FOLDER}"
# But you can't do OPTIMIZE (local will die with coredump) :) That would be too good
clickhouse-local --query "OPTIMIZE TABLE local.test FINAL" -- --path="${WORKING_FOLDER}"
# now you can check what was inserted (i did both options so i have doubled data)
${CLICKHOUSE_LOCAL} --query "SELECT _part,* FROM local.test ORDER BY id, _part" -- --path="${WORKING_FOLDER}"
## now you can upload those parts to a server (in detached subfolder) and attach them.
rm -rf "${WORKING_FOLDER}"
rm -rf "${WORKING_FOLDER_01527}"