fix: add read-in-order config (#4918)

This commit is contained in:
Nityananda Gohain 2024-05-06 15:01:53 +05:30 committed by GitHub
parent 967aa16f21
commit 3957d91a9b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 20 additions and 0 deletions

View File

@ -163,12 +163,24 @@ func NewReaderFromClickhouseConnection(
os.Exit(1) os.Exit(1)
} }
regex := os.Getenv("ClickHouseOptimizeReadInOrderRegex")
var regexCompiled *regexp.Regexp
if regex != "" {
regexCompiled, err = regexp.Compile(regex)
if err != nil {
zap.L().Error("Incorrect regex for ClickHouseOptimizeReadInOrderRegex")
os.Exit(1)
}
}
wrap := clickhouseConnWrapper{ wrap := clickhouseConnWrapper{
conn: db, conn: db,
settings: ClickhouseQuerySettings{ settings: ClickhouseQuerySettings{
MaxExecutionTimeLeaf: os.Getenv("ClickHouseMaxExecutionTimeLeaf"), MaxExecutionTimeLeaf: os.Getenv("ClickHouseMaxExecutionTimeLeaf"),
TimeoutBeforeCheckingExecutionSpeed: os.Getenv("ClickHouseTimeoutBeforeCheckingExecutionSpeed"), TimeoutBeforeCheckingExecutionSpeed: os.Getenv("ClickHouseTimeoutBeforeCheckingExecutionSpeed"),
MaxBytesToRead: os.Getenv("ClickHouseMaxBytesToRead"), MaxBytesToRead: os.Getenv("ClickHouseMaxBytesToRead"),
OptimizeReadInOrderRegex: os.Getenv("ClickHouseOptimizeReadInOrderRegex"),
OptimizeReadInOrderRegexCompiled: regexCompiled,
}, },
} }

View File

@ -3,6 +3,7 @@ package clickhouseReader
import ( import (
"context" "context"
"encoding/json" "encoding/json"
"regexp"
"strings" "strings"
"github.com/ClickHouse/clickhouse-go/v2" "github.com/ClickHouse/clickhouse-go/v2"
@ -13,6 +14,8 @@ type ClickhouseQuerySettings struct {
MaxExecutionTimeLeaf string MaxExecutionTimeLeaf string
TimeoutBeforeCheckingExecutionSpeed string TimeoutBeforeCheckingExecutionSpeed string
MaxBytesToRead string MaxBytesToRead string
OptimizeReadInOrderRegex string
OptimizeReadInOrderRegexCompiled *regexp.Regexp
} }
type clickhouseConnWrapper struct { type clickhouseConnWrapper struct {
@ -58,6 +61,11 @@ func (c clickhouseConnWrapper) addClickHouseSettings(ctx context.Context, query
settings["timeout_before_checking_execution_speed"] = c.settings.TimeoutBeforeCheckingExecutionSpeed settings["timeout_before_checking_execution_speed"] = c.settings.TimeoutBeforeCheckingExecutionSpeed
} }
// only list queries of
if c.settings.OptimizeReadInOrderRegex != "" && c.settings.OptimizeReadInOrderRegexCompiled.Match([]byte(query)) {
settings["optimize_read_in_order"] = 0
}
ctx = clickhouse.Context(ctx, clickhouse.WithSettings(settings)) ctx = clickhouse.Context(ctx, clickhouse.WithSettings(settings))
return ctx return ctx
} }