Важно: Данный раздел актуален для Платформы данных в Публичном облаке и On-Premise.
Предсказание с использованием подобранных регрессионных моделей.
Агрегатная функция stochasticLinearRegression реализует стохастический градиентный спуск, использую линейную модель и функцию потерь MSE.
Агрегатная функция stochasticLogisticRegression реализует стохастический градиентный спуск для задачи бинарной классификации.
Сравнивает тестовые группы (варианты) и для каждой группы рассчитывает вероятность того, что эта группа окажется лучшей. Первая из перечисленных групп считается контрольной.
Синтаксис:
bayesAB(distribution_name, higher_is_better, variant_names, x, y)
Параметры
Замечание: Все три массива должны иметь одинаковый размер. Все значения x и y должны быть неотрицательными числами (константами). Значение y не может превышать соответствующее значение x.
Возвращаемые значения:
Для каждого варианта рассчитываются:
Тип: JSON.
Пример:
Запрос:
SELECT bayesAB('beta', 1, ['Control', 'A', 'B'], [3000., 3000., 3000.], [100., 90., 110.]) FORMAT PrettySpace;
Результат:
{
"data":[
{
"variant_name":"Control",
"x":3000,
"y":100,
"beats_control":0,
"to_be_best":0.22619
},
{
"variant_name":"A",
"x":3000,
"y":90,
"beats_control":0.23469,
"to_be_best":0.04671
},
{
"variant_name":"B",
"x":3000,
"y":110,
"beats_control":0.7580899999999999,
"to_be_best":0.7271
}
]
}
Функции из этого раздела могут использоваться для интроспекции ELF и DWARF в целях профилирования запросов.
Предупреждение
Эти функции выполняются медленно и могут приводить к нежелательным последствиям в плане безопасности.
Для правильной работы функций интроспекции:
Из соображений безопасности данные функции отключены по умолчанию.
RT.WideStore сохраняет отчеты профилировщика в журнал трассировки в системной таблице. Убедитесь, что таблица и профилировщик настроены правильно.
Преобразует адрес виртуальной памяти внутри процесса сервера RT.WideStore в имя файла и номер строки в исходном коде RT.WideStore.
Если вы используете официальные пакеты RT.WideStore, вам необходимо установить следующий пакеты: widestore-common-static-dbg.
Синтаксис:
addressToLine(address_of_binary_instruction)
Параметры:
Возвращаемое значение:
Например, `/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199`, где `199` – номер строки.
Тип: String.
Пример:
Включение функций самоанализа:
SET allow_introspection_functions=1
Выбор первой строки из списка trace_log системная таблица:
SELECT * FROM system.trace_log LIMIT 1 \G
Row 1:
──────
event_date: 2019-11-19
event_time: 2019-11-19 18:57:23
revision: 54429
timer_type: Real
thread_number: 48
query_id: 421b6855-1858-45a5-8f37-f383409d6d72
trace: [140658411141617,94784174532828,94784076370703,94784076372094,94784076361020,94784175007680,140658411116251,140658403895439]
То trace поле содержит трассировку стека в момент выборки.
Получение имени файла исходного кода и номера строки для одного адреса:
SELECT addressToLine(94784076370703) \G
Row 1:
──────
addressToLine(94784076370703): /build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199
Применение функции ко всему стектрейсу:
SELECT
arrayStringConcat(arrayMap(x -> addressToLine(x), trace), '\n') AS trace_source_code_lines
FROM system.trace_log
LIMIT 1
\G
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace с помощью функции addressToLine. Результат этой обработки вы видите в виде trace_source_code_lines колонки выходных данных.
Row 1:
──────
trace_source_code_lines: /lib/x86_64-linux-gnu/libpthread-2.27.so
/usr/lib/debug/usr/bin/widestore
/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.cpp:199
/build/obj-x86_64-linux-gnu/../src/Common/ThreadPool.h:155
/usr/include/c++/9/bits/atomic_base.h:551
/usr/lib/debug/usr/bin/widestore
/lib/x86_64-linux-gnu/libpthread-2.27.so
/build/glibc-OTsEL5/glibc-2.27/misc/../sysdeps/unix/sysv/linux/x86_64/clone.S:97
Преобразует адрес виртуальной памяти внутри серверного процесса RT.WideStore в символ из объектных файлов RT.WideStore.
Синтаксис:
addressToSymbol(address_of_binary_instruction)
Параметры
Возвращаемое значение:
Тип: String.
Пример:
Включение функций самоанализа:
SET allow_introspection_functions=1
Выбор первой строки из списка trace_log системная таблица:
SELECT * FROM system.trace_log LIMIT 1 \G
Row 1:
──────
event_date: 2019-11-20
event_time: 2019-11-20 16:57:59
revision: 54429
timer_type: Real
thread_number: 48
query_id: 724028bf-f550-45aa-910d-2af6212b94ac
trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,
94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,
94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583]
То trace поле содержит трассировку стека в момент выборки.
Получение символа для одного адреса:
SELECT addressToSymbol(94138803686098) \G
Row 1:
──────
addressToSymbol(94138803686098): _ZNK2DB24IAggregateFunctionHelperINS_20AggregateFunctionSumImmNS_24AggregateFunctionSumDataImEEEEE19addBatchSinglePlaceEmPcPPKNS_7IColumnEPNS_5ArenaE
Применение функции ко всей трассировке стека:
SELECT
arrayStringConcat(arrayMap(x -> addressToSymbol(x), trace), '\n') AS trace_symbols
FROM system.trace_log
LIMIT 1
\G
То arrayMap функция позволяет обрабатывать каждый отдельный элемент системы. trace массив по типу addressToSymbols функция. Результат этой обработки вы видите в виде trace_symbols колонка выходных данных.
Row 1:
──────
trace_symbols: _ZNK2DB24IAggregateFunctionHelperINS_20AggregateFunctionSumImmNS_24AggregateFunctionSumDataImEEEEE19addBatchSinglePlaceEmPcPPKNS_7IColumnEPNS_5ArenaE
_ZNK2DB10Aggregator21executeWithoutKeyImplERPcmPNS0_28AggregateFunctionInstructionEPNS_5ArenaE
_ZN2DB10Aggregator14executeOnBlockESt6vectorIN3COWINS_7IColumnEE13immutable_ptrIS3_EESaIS6_EEmRNS_22AggregatedDataVariantsERS1_IPKS3_SaISC_EERS1_ISE_SaISE_EERb
_ZN2DB10Aggregator14executeOnBlockERKNS_5BlockERNS_22AggregatedDataVariantsERSt6vectorIPKNS_7IColumnESaIS9_EERS6_ISB_SaISB_EERb
_ZN2DB10Aggregator7executeERKSt10shared_ptrINS_17IBlockInputStreamEERNS_22AggregatedDataVariantsE
_ZN2DB27AggregatingBlockInputStream8readImplEv
_ZN2DB17IBlockInputStream4readEv
_ZN2DB26ExpressionBlockInputStream8readImplEv
_ZN2DB17IBlockInputStream4readEv
_ZN2DB26ExpressionBlockInputStream8readImplEv
_ZN2DB17IBlockInputStream4readEv
_ZN2DB28AsynchronousBlockInputStream9calculateEv
_ZNSt17_Function_handlerIFvvEZN2DB28AsynchronousBlockInputStream4nextEvEUlvE_E9_M_invokeERKSt9_Any_data
_ZN14ThreadPoolImplI20ThreadFromGlobalPoolE6workerESt14_List_iteratorIS0_E
_ZZN20ThreadFromGlobalPoolC4IZN14ThreadPoolImplIS_E12scheduleImplIvEET_St8functionIFvvEEiSt8optionalImEEUlvE1_JEEEOS4_DpOT0_ENKUlvE_clEv
_ZN14ThreadPoolImplISt6threadE6workerESt14_List_iteratorIS0_E
execute_native_thread_routine
start_thread
clone
Преобразует символ, который вы можете получить с помощью addressstosymbol функция имя функции C++.
Синтаксис:
demangle(symbol)
Параметры:
Возвращаемое значение:
Тип: String.
Пример:
Включение функций самоанализа:
SET allow_introspection_functions=1
Выбор первой строки из списка trace_log системная таблица:
SELECT * FROM system.trace_log LIMIT 1 \G
Row 1:
──────
event_date: 2019-11-20
event_time: 2019-11-20 16:57:59
revision: 54429
timer_type: Real
thread_number: 48
query_id: 724028bf-f550-45aa-910d-2af6212b94ac
trace: [94138803686098,94138815010911,94138815096522,94138815101224,94138815102091,94138814222988,
94138806823642,94138814457211,94138806823642,94138814457211,94138806823642,94138806795179,94138806796144,
94138753770094,94138753771646,94138753760572,94138852407232,140399185266395,140399178045583]
То trace поле содержит трассировку стека в момент выборки.
Получение имени функции для одного адреса:
SELECT demangle(addressToSymbol(94138803686098)) \G
Row 1:
──────
demangle(addressToSymbol(94138803686098)):
DB::IAggregateFunctionHelper<DB::AggregateFunctionSum<unsigned long, unsigned long,
DB::AggregateFunctionSumData<unsigned long> > >::addBatchSinglePlace(unsigned long, char*,
DB::IColumn const**, DB::Arena*) const
Применение функции ко всему стектрейсу:
SELECT
arrayStringConcat(arrayMap(x -> demangle(addressToSymbol(x)), trace), '\n') AS trace_functions
FROM system.trace_log
LIMIT 1
\G
Функция arrayMap позволяет обрабатывать каждый отдельный элемент массива trace с помощью функции demangle.
Row 1:
──────
trace_functions: DB::IAggregateFunctionHelper<DB::AggregateFunctionSum<unsigned long, unsigned long, DB::AggregateFunctionSumData<unsigned long> > >::addBatchSinglePlace(unsigned long, char*, DB::IColumn const**, DB::Arena*) const
DB::Aggregator::executeWithoutKeyImpl(char*&, unsigned long, DB::Aggregator::AggregateFunctionInstruction*, DB::Arena*) const
DB::Aggregator::executeOnBlock(std::vector<COW<DB::IColumn>::immutable_ptr<DB::IColumn>, std::allocator<COW<DB::IColumn>::immutable_ptr<DB::IColumn> > >, unsigned long, DB::AggregatedDataVariants&, std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >&, std::vector<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >, std::allocator<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> > > >&, bool&)
DB::Aggregator::executeOnBlock(DB::Block const&, DB::AggregatedDataVariants&, std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >&, std::vector<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> >, std::allocator<std::vector<DB::IColumn const*, std::allocator<DB::IColumn const*> > > >&, bool&)
DB::Aggregator::execute(std::shared_ptr<DB::IBlockInputStream> const&, DB::AggregatedDataVariants&)
DB::AggregatingBlockInputStream::readImpl()
DB::IBlockInputStream::read()
DB::ExpressionBlockInputStream::readImpl()
DB::IBlockInputStream::read()
DB::ExpressionBlockInputStream::readImpl()
DB::IBlockInputStream::read()
DB::AsynchronousBlockInputStream::calculate()
std::_Function_handler<void (), DB::AsynchronousBlockInputStream::next()::{lambda()#1}>::_M_invoke(std::_Any_data const&)
ThreadPoolImpl<ThreadFromGlobalPool>::worker(std::_List_iterator<ThreadFromGlobalPool>)
ThreadFromGlobalPool::ThreadFromGlobalPool<ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}>(ThreadPoolImpl<ThreadFromGlobalPool>::scheduleImpl<void>(std::function<void ()>, int, std::optional<unsigned long>)::{lambda()#3}&&)::{lambda()#1}::operator()() const
ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)
execute_native_thread_routine
start_thread
clone
Возвращает id потока, в котором обрабатывается текущий Block.
Синтаксис:
tid()
Возвращаемое значение:
Пример:
Запрос:
SELECT tid();
Результат:
┌─tid()─┐
│ 3878 │
└────────┘
Выводит сообщение в лог сервера для каждого Block.
Синтаксис:
logTrace('message')
Параметры
Возвращаемое значение:
Пример:
Запрос:
SELECT logTrace('logTrace message');
Результат:
┌─logTrace('logTrace message')─┐
│ 0 │
└─────────────────────────────────┘
Возвращает строку - имя хоста, на котором эта функция была выполнена. При распределённой обработке запроса, это будет имя хоста удалённого сервера, если функция выполняется на удалённом сервере.
Возвращает именованное значение из секции macros конфигурации сервера.
Синтаксис:
getMacro(name);
Параметры:
Возвращаемое значение:
Тип: String.
Пример:
Пример секции macros в конфигурационном файле сервера:
<macros>
<test>Value</test>
</macros>
Запрос:
SELECT getMacro('test');
Результат:
┌─getMacro('test')─┐
│ Value │
└────────────────────┘
Альтернативный способ получения значения:
SELECT * FROM system.macros
WHERE macro = 'test'
┌─macro─┬─substitution─┐
│ test │ Value │
└────────┴───────────────┘
Возвращает полное имя домена.
Синтаксис:
fqdn();
Эта функция регистронезависимая.
Возвращаемое значение:
Тип: String.
Пример:
Запрос:
SELECT FQDN();
Ответ:
┌─FQDN()────────────────────────────┐
│ widestore.ru-central1.internal │
└────────────────────────────────────┘
Извлекает конечную часть строки после последнего слэша или бэкслэша. Функция часто используется для извлечения имени файла из пути.
Синтаксис:
basename( expr )
Параметры:
Возвращаемое значение:
Строка, содержащая:
Если входная строка содержит путь, заканчивающийся слэшем или бэкслэшем, например, `/` или
`с:\`, функция возвращает пустую строку.
Пример:
SELECT 'some/long/path/to/file' AS a, basename(a)
┌─a────────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└──────────────────────────┴────────────────────────────────────────────┘
SELECT 'some\\long\\path\\to\\file' AS a, basename(a)
┌─a────────────────────────┬─basename('some\\long\\path\\to\\file')─┐
│ some\long\path\to\file │ file │
└──────────────────────────┴────────────────────────────────────────────┘
SELECT 'some-file-name' AS a, basename(a)
┌─a───────────────┬─basename('some-file-name')─┐
│ some-file-name │ some-file-name │
└─────────────────┴───────────────────────────────┘
Вычисляет приблизительную ширину при выводе значения в текстовом (tab-separated) виде на консоль.
Функция используется системой для реализации Pretty форматов.
NULL представляется как строка, соответствующая отображению NULL в форматах Pretty.
SELECT visibleWidth(NULL)
┌─visibleWidth(NULL)─┐
│ 4 │
└──────────────────────┘
Возвращает строку, содержащую имя типа переданного аргумента.
Если на вход функции передать NULL, то она вернёт тип Nullable(Nothing), что соответствует внутреннему представлению NULL в RT.WideStore.
Получить размер блока.
В RT.WideStore выполнение запроса всегда идёт по блокам (наборам кусочков столбцов). Функция позволяет получить размер блока, для которого её вызвали.
Возвращает оценку в байтах размера аргументов в памяти в несжатом виде.
Синтаксис:
byteSize(argument [, ...])
Параметры:
Возвращаемое значение:
Тип: UInt64.
Примеры:
Для аргументов типа String функция возвращает длину строки + 9 (нуль-терминатор + длина).
Запрос:
SELECT byteSize('string');
Результат:
┌─byteSize('string')─┐
│ 15 │
└──────────────────────┘
Запрос:
CREATE TABLE test
(
`key` Int32,
`u8` UInt8,
`u16` UInt16,
`u32` UInt32,
`u64` UInt64,
`i8` Int8,
`i16` Int16,
`i32` Int32,
`i64` Int64,
`f32` Float32,
`f64` Float64
)
ENGINE = MergeTree
ORDER BY key;
INSERT INTO test VALUES(1, 8, 16, 32, 64, -8, -16, -32, -64, 32.32, 64.64);
SELECT key, byteSize(u8) AS `byteSize(UInt8)`, byteSize(u16) AS `byteSize(UInt16)`,
byteSize(u32) AS `byteSize(UInt32)`, byteSize(u64) AS `byteSize(UInt64)`, byteSize(i8) AS
`byteSize(Int8)`, byteSize(i16) AS `byteSize(Int16)`, byteSize(i32) AS `byteSize(Int32)`,
byteSize(i64) AS `byteSize(Int64)`, byteSize(f32) AS `byteSize(Float32)`, byteSize(f64) AS
`byteSize(Float64)` FROM test ORDER BY key ASC FORMAT Vertical;
Если функция принимает несколько аргументов, то она возвращает их совокупный размер в байтах.
Запрос:
SELECT byteSize(NULL, 1, 0.3, '');
Результат:
┌─byteSize(NULL, 1, 0.3, '')─┐
│ 19 │
└───────────────────────────────┘
Превращает константу в полноценный столбец, содержащий только одно значение.
В RT.WideStore полноценные столбцы и константы представлены в памяти по-разному. Функции по-разному работают для аргументов-констант и обычных аргументов (выполняется разный код), хотя результат почти всегда должен быть одинаковым. Эта функция предназначена для отладки такого поведения.
Принимает любые аргументы, в т.ч. NULL, всегда возвращает 0.
При этом, аргумент всё равно вычисляется. Это может использоваться для бенчмарков.
Спит seconds секунд на каждый блок данных. Можно указать как целое число, так и число с плавающей запятой.
Возвращает имя текущей базы данных.
Эта функция может использоваться в параметрах движка таблицы в запросе CREATE TABLE там, где нужно указать базу данных.
Возвращает логин текущего пользователя. При распределенном запросе, возвращается имя пользователя, инициировавшего запрос.
Синтаксис:
SELECT currentUser();
Алиас: user(), USER().
Возвращаемые значения:
Тип: String.
Пример:
Запрос:
SELECT currentUser();
Ответ:
┌─currentUser()─┐
│ default │
└────────────────┘
Проверяет, является ли аргумент константным выражением.
Константное выражение – это выражение, результат которого известен на момент анализа запроса (до его выполнения). Например, выражения над литералами являются константными.
Используется в целях разработки, отладки или демонстрирования.
Синтаксис:
isConstant(x)
Параметры:
Возвращаемые значения:
Тип: UInt8.
Примеры:
Запрос:
SELECT isConstant(x + 1) FROM (SELECT 43 AS x)
Результат:
┌─isConstant(plus(x, 1))─┐
│ 1 │
└──────────────────────────┘
Запрос:
WITH 3.14 AS pi SELECT isConstant(cos(pi))
Результат:
┌─isConstant(cos(pi))─┐
│ 1 │
└───────────────────────┘
Запрос:
SELECT isConstant(number) FROM numbers(1)
Результат:
┌─isConstant(number)─┐
│ 0 │
└──────────────────────┘
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент не бесконечный и не NaN, иначе 0.
Проверяет, является ли значение дробного числа с плавающей точкой конечным.
Синтаксис:
ifNotFinite(x,y)
Параметры:
Возвращаемые значения:
Пример:
Запрос:
SELECT 1/0 as infimum, ifNotFinite(infimum,42)
Результат:
┌─infimum─┬─ifNotFinite(divide(1, 0), 42)─┐
│ inf │ 42 │
└──────────┴──────────────────────────────────┘
Аналогичный результат можно получить с помощью тернарного оператора isFinite(x) ? x : y.
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент бесконечный, иначе 0. Отметим, что в случае NaN возвращается 0.
Принимает Float32 или Float64 и возвращает UInt8, равный 1, если аргумент является NaN, иначе 0.
Принимает константные строки - имя базы данных, имя таблицы и название столбца. Возвращает константное выражение типа UInt8, равное 1,
если есть столбец, иначе 0. Если задан параметр hostname, проверка будет выполнена на удалённом сервере.
Функция кидает исключение, если таблица не существует.
Для элементов вложенной структуры данных функция проверяет существование столбца. Для самой же вложенной структуры данных функция возвращает 0.
Позволяет построить unicode-art диаграмму.
bar(x, min, max, width) рисует полосу ширины пропорциональной (x - min) и равной width символов при x = max.
Параметры:
Полоса рисуется с точностью до одной восьмой символа.
Пример:
SELECT
toHour(EventTime) AS h,
count() AS c,
bar(c, 0, 600000, 20) AS bar
FROM test.hits
GROUP BY h
ORDER BY h ASC
┌──h─┬──────c─┬─bar───────────────────┐
│ 0 │ 292907 │ █████████▋ │
│ 1 │ 180563 │ ██████ │
│ 2 │ 114861 │ ███▋ │
│ 3 │ 85069 │ ██▋ │
│ 4 │ 68543 │ ██▎ │
│ 5 │ 78116 │ ██▌ │
│ 6 │ 113474 │ ███▋ │
│ 7 │ 170678 │ █████▋ │
│ 8 │ 278380 │ █████████▎ │
│ 9 │ 391053 │ █████████████ │
│ 10 │ 457681 │ ███████████████▎ │
│ 11 │ 493667 │ ████████████████▍ │
│ 12 │ 509641 │ ████████████████▊ │
│ 13 │ 522947 │ █████████████████▍ │
│ 14 │ 539954 │ █████████████████▊ │
│ 15 │ 528460 │ █████████████████▌ │
│ 16 │ 539201 │ █████████████████▊ │
│ 17 │ 523539 │ █████████████████▍ │
│ 18 │ 506467 │ ████████████████▊ │
│ 19 │ 520915 │ █████████████████▎ │
│ 20 │ 521665 │ █████████████████▍ │
│ 21 │ 542078 │ ██████████████████ │
│ 22 │ 493642 │ ████████████████▍ │
│ 23 │ 400397 │ █████████████▎ │
└────┴─────────┴──────────────────────┘
Преобразовать значение согласно явно указанному отображению, одних элементов на другие.
Имеется два варианта функции:
x – что преобразовывать.
array_from – константный массив значений для преобразования.
array_to – константный массив значений, в которые должны быть преобразованы значения из from.
default – какое значение использовать, если x не равен ни одному из значений во from.
array_from и array_to – массивы одинаковых размеров.
Типы:
transform(T, Array(T), Array(U), U) -> U
T и U – могут быть числовыми, строковыми, или Date или DateTime типами.
При этом, где обозначена одна и та же буква (T или U), могут быть, в случае числовых типов, не совпадающие типы, а типы, для которых есть общий тип.
Например, первый аргумент может иметь тип Int64, а второй – Array(UInt16).
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает default. Если имеется несколько совпадающих элементов в array_from, то возвращает какой-нибудь из соответствующих.
Пример:
SELECT
transform(SearchEngineID, [2, 3], ['Yandex', 'Google'], 'Other') AS title,
count() AS c
FROM test.hits
WHERE SearchEngineID != 0
GROUP BY title
ORDER BY c DESC
┌─title──────┬──────c─┐
│ Yandex │ 498635 │
│ Google │ 229872 │
│ Other │ 104472 │
└────────────┴────────┘
Отличается от первого варианта отсутствующим аргументом default.
Если значение x равно одному из элементов массива array_from, то возвращает соответствующий (такой же по номеру) элемент массива array_to; иначе возвращает x.
Типы:
transform(T, Array(T), Array(T)) -> T
Пример:
SELECT
transform(domain(Referer), ['yandex.ru', 'google.ru', 'vk.com'], ['www.yandex', 'example.com']) AS s,
count() AS c
FROM test.hits
GROUP BY domain(Referer)
ORDER BY count() DESC
LIMIT 10
┌─s───────────────┬────────c─┐
│ │ 2906259 │
│ www.yandex │ 867767 │
│ ███████.ru │ 313599 │
│ mail.yandex.ru │ 107147 │
│ ██████.ru │ 100355 │
│ █████████.ru │ 65040 │
│ news.yandex.ru │ 64515 │
│ ██████.net │ 59141 │
│ example.com │ 57316 │
└─────────────────┴──────────┘
Принимает размер (число байт). Возвращает округленный размер с суффиксом (KiB, MiB и т.д.) в виде строки.
Пример:
SELECT
arrayJoin([1, 1024, 1024*1024, 192851925]) AS filesize_bytes,
formatReadableSize(filesize_bytes) AS filesize
┌─filesize_bytes─┬─filesize───┐
│ 1 │ 1.00 B │
│ 1024 │ 1.00 KiB │
│ 1048576 │ 1.00 MiB │
│ 192851925 │ 183.92 MiB │
└─────────────────┴─────────────┘
Принимает число. Возвращает округленное число с суффиксом (thousand, million, billion и т.д.) в виде строки.
Облегчает визуальное восприятие больших чисел живым человеком.
Пример:
SELECT
arrayJoin([1024, 1234 * 1000, (4567 * 1000) * 1000, 98765432101234]) AS number,
formatReadableQuantity(number) AS number_for_humans
┌──────────number─┬─number_for_humans─┐
│ 1024 │ 1.02 thousand │
│ 1234000 │ 1.23 million │
│ 4567000000 │ 4.57 billion │
│ 98765432101234 │ 98.77 trillion │
└──────────────────┴────────────────────┘
Возвращает наименьшее значение из a и b.
Возвращает наибольшее значение из a и b.
Возвращает аптайм сервера в секундах.
Возвращает версию сервера в виде строки.
Возвращает порядковый номер строки в блоке данных. Для каждого блока данных нумерация начинается с 0.
Возвращает порядковый номер строки в блоке данных. Функция учитывает только задействованные блоки данных.
Функция позволяет получить доступ к значению в столбце column, находящемуся на смещении offset относительно текущей строки. Является частичной реализацией оконных функций LEAD() и LAG().
Синтаксис:
neighbor(column, offset[, default_value])
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Предупреждение: Функция может получить доступ к значению в столбце соседней строки только внутри обрабатываемого в данный момент блока данных.
Порядок строк, используемый при вычислении функции neighbor, может отличаться от порядка строк, возвращаемых пользователю.
Чтобы этого не случилось, вы можете сделать подзапрос с ORDER BY и вызвать функцию из не подзапроса.
Параметры:
Возвращаемое значение:
Тип: зависит от данных в column или переданного значения по умолчанию в default_value.
Пример:
Запрос:
SELECT number, neighbor(number, 2) FROM system.numbers LIMIT 10;
Ответ:
┌─number─┬─neighbor(number, 2)─┐
│ 0 │ 2 │
│ 1 │ 3 │
│ 2 │ 4 │
│ 3 │ 5 │
│ 4 │ 6 │
│ 5 │ 7 │
│ 6 │ 8 │
│ 7 │ 9 │
│ 8 │ 0 │
│ 9 │ 0 │
└─────────┴──────────────────────┘
Запрос:
SELECT number, neighbor(number, 2, 999) FROM system.numbers LIMIT 10;
Ответ:
┌─number─┬─neighbor(number, 2, 999)─┐
│ 0 │ 2 │
│ 1 │ 3 │
│ 2 │ 4 │
│ 3 │ 5 │
│ 4 │ 6 │
│ 5 │ 7 │
│ 6 │ 8 │
│ 7 │ 9 │
│ 8 │ 999 │
│ 9 │ 999 │
└─────────┴────────────────────────────┘
Эта функция может использоваться для оценки year-over-year значение показателя:
Запрос:
WITH toDate('2018-01-01') AS start_date
SELECT
toStartOfMonth(start_date + (number * 32)) AS month,
toInt32(month) % 100 AS money,
neighbor(money, -12) AS prev_year,
round(prev_year / money, 2) AS year_over_year
FROM numbers(16)
Ответ:
┌──────month─┬──money─┬─prev_year─┬─year_over_year─┐
│ 2018-01-01 │ 32 │ 0 │ 0 │
│ 2018-02-01 │ 63 │ 0 │ 0 │
│ 2018-03-01 │ 91 │ 0 │ 0 │
│ 2018-04-01 │ 22 │ 0 │ 0 │
│ 2018-05-01 │ 52 │ 0 │ 0 │
│ 2018-06-01 │ 83 │ 0 │ 0 │
│ 2018-07-01 │ 13 │ 0 │ 0 │
│ 2018-08-01 │ 44 │ 0 │ 0 │
│ 2018-09-01 │ 75 │ 0 │ 0 │
│ 2018-10-01 │ 5 │ 0 │ 0 │
│ 2018-11-01 │ 36 │ 0 │ 0 │
│ 2018-12-01 │ 66 │ 0 │ 0 │
│ 2019-01-01 │ 97 │ 32 │ 0.33 │
│ 2019-02-01 │ 28 │ 63 │ 2.25 │
│ 2019-03-01 │ 56 │ 91 │ 1.62 │
│ 2019-04-01 │ 87 │ 22 │ 0.25 │
└─────────────┴────────┴────────────┴─────────────────┘
Считает разницу между последовательными значениями строк в блоке данных.
Возвращает 0 для первой строки и разницу с предыдущей строкой для каждой последующей строки.
Предупреждение: Функция может взять значение предыдущей строки только внутри текущего обработанного блока данных.
Результат функции зависит от затронутых блоков данных и порядка данных в блоке.
Порядок строк, используемый при вычислении функции runningDifference, может отличаться от порядка строк, возвращаемых пользователю.
Чтобы этого не случилось, вы можете сделать подзапрос с ORDER BY и вызвать функцию извне подзапроса.
Пример:
SELECT
EventID,
EventTime,
runningDifference(EventTime) AS delta
FROM
(
SELECT
EventID,
EventTime
FROM events
WHERE EventDate = '2016-11-24'
ORDER BY EventTime ASC
LIMIT 5
)
┌─EventID─┬────────────EventTime─┬─delta─┐
│ 1106 │ 2016-11-24 00:00:04 │ 0 │
│ 1107 │ 2016-11-24 00:00:05 │ 1 │
│ 1108 │ 2016-11-24 00:00:05 │ 0 │
│ 1109 │ 2016-11-24 00:00:09 │ 4 │
│ 1110 │ 2016-11-24 00:00:10 │ 1 │
└──────────┴───────────────────────┴───────┘
Обратите внимание – размер блока влияет на результат. С каждым новым блоком состояние runningDifference сбрасывается:
SELECT
number,
runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
┌─number─┬─diff─┐
│ 0 │ 0 │
└─────────┴──────┘
┌─number─┬─diff─┐
│ 65536 │ 0 │
└─────────┴──────┘
set max_block_size=100000 -- по умолчанию 65536!
SELECT
number,
runningDifference(number + 1) AS diff
FROM numbers(100000)
WHERE diff != 1
┌─number─┬─diff─┐
│ 0 │ 0 │
└─────────┴──────┘
То же, что и runningDifference (см. функцию выше), но в первой строке возвращается значение первой строки, а не ноль.
Принимает число типа UInt64. Интерпретирует его, как MAC-адрес в big endian. Возвращает строку, содержащую соответствующий MAC-адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие).
Функция, обратная к MACNumToString. Если MAC адрес в неправильном формате, то возвращает 0.
Принимает MAC адрес в формате AA:BB:CC:DD:EE:FF (числа в шестнадцатеричной форме через двоеточие). Возвращает первые три октета как число в формате UInt64. Если MAC адрес в неправильном формате, то возвращает 0.
Возвращает количество полей в Enum.
Синтаксис:
getSizeOfEnumType(value)
Параметры:
Возвращаемые значения:
Пример:
SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x
┌─x─┐
│ 2 │
└───┘
Возвращает размер на диске (без учета сжатия).
Синтаксис:
blockSerializedSize(value[, value[, ...]])
Параметры:
Возвращаемые значения:
Пример:
Запрос:
SELECT blockSerializedSize(maxState(1)) as x
Ответ:
┌─x─┐
│ 2 │
└───┘
Возвращает имя класса, которым представлен тип данных столбца в оперативной памяти.
Синтаксис:
toColumnTypeName(value)
Параметры:
Возвращаемые значения:
Пример разницы между toTypeName и toColumnTypeName:
SELECT toTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
┌─toTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime │
└──────────────────────────────────────────────────────────┘
SELECT toColumnTypeName(CAST('2018-01-01 01:02:03' AS DateTime))
┌─toColumnTypeName(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ Const(UInt32) │
└────────────────────────────────────────────────────────────────┘
В примере видно, что тип данных DateTime хранится в памяти как Const(UInt32).
Выводит развернутое описание структур данных в оперативной памяти.
Синтаксис:
dumpColumnStructure(value)
Параметры:
Возвращаемые значения:
Пример:
SELECT dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))
┌─dumpColumnStructure(CAST('2018-01-01 01:02:03', 'DateTime'))─┐
│ DateTime, Const(size = 1, UInt32(size = 1)) │
└───────────────────────────────────────────────────────────────────┘
Выводит значение по умолчанию для типа данных.
Не учитывает значения по умолчанию для столбцов, заданные пользователем.
Синтаксис:
defaultValueOfArgumentType(expression)
Параметры:
Возвращаемые значения:
Пример:
SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )
┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐
│ 0 │
└─────────────────────────────────────────────────┘
SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )
┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐
│ ᴺᵁᴸᴸ │
└────────────────────────────────────────────────────────────┘
Выводит значение по умолчанию для указанного типа данных.
Не включает значения по умолчанию для настраиваемых столбцов, установленных пользователем.
Синтаксис:
defaultValueOfTypeName(type)
Параметры:
Возвращаемое значение:
Пример:
SELECT defaultValueOfTypeName('Int8')
┌─defaultValueOfTypeName('Int8')─┐
│ 0 │
└───────────────────────────────────┘
SELECT defaultValueOfTypeName('Nullable(Int8)')
┌─defaultValueOfTypeName('Nullable(Int8)')─┐
│ ᴺᵁᴸᴸ │
└─────────────────────────────────────────────┘
Создает массив, заполненный одним значением.
Используется для внутренней реализации arrayJoin.
Синтаксис:
SELECT replicate(x, arr);
Параметры:
Возвращаемое значение:
Тип: Array.
Пример:
Запрос:
SELECT replicate(1, ['a', 'b', 'c']);
Ответ:
┌─replicate(1, ['a', 'b', 'c'])─┐
│ [1,1,1] │
└──────────────────────────────────┘
Возвращает объём доступного для записи данных места на файловой системе. Он всегда меньше общего свободного места (filesystemFree), потому что некоторое пространство зарезервировано для нужд операционной системы.
Синтаксис:
filesystemAvailable()
Возвращаемое значение:
Тип: UInt64.
Пример:
Запрос:
SELECT formatReadableSize(filesystemAvailable()) AS "Available space", toTypeName(filesystemAvailable()) AS "Type";
Ответ:
┌─Available space─┬─Type───┐
│ 30.75 GiB │ UInt64 │
└───────────────────┴────────┘
Возвращает объём свободного места на файловой системе. Смотрите также filesystemAvailable.
Синтаксис:
filesystemFree()
Возвращаемое значение:
Тип: UInt64.
Пример:
Запрос:
SELECT formatReadableSize(filesystemFree()) AS "Free space", toTypeName(filesystemFree()) AS "Type";
Ответ:
┌─Free space─┬─Type───┐
│ 32.39 GiB │ UInt64 │
└─────────────┴─────────┘
Возвращает информацию о ёмкости файловой системы в байтах. Для оценки должен быть настроен путь к каталогу с данными.
Синтаксис:
filesystemCapacity()
Возвращаемое значение:
Тип: UInt64.
Пример:
Запрос:
SELECT formatReadableSize(filesystemCapacity()) AS "Capacity", toTypeName(filesystemCapacity()) AS "Type"
Ответ:
┌─Capacity──┬─Type───┐
│ 39.32 GiB │ UInt64 │
└────────────┴─────────┘
Вычисляет результат агрегатной функции для каждой строки. Предназначена для инициализации агрегатных функций с комбинатором -State. Может быть полезна для создания состояний агрегатных функций для последующей их вставки в столбцы типа AggregateFunction или использования в качестве значений по-умолчанию.
Синтаксис
initializeAggregation (aggregate_function, arg1, arg2, ..., argN)
Аргументы:
aggregate_function
— название агрегатной функции, состояние которой нужно создать. String.arg
— аргументы, которые передаются в агрегатную функцию.Возвращаемое значение:
Тип возвращаемого значения такой же, как и у функции, переданной первым аргументом.
Пример:
Запрос:
SELECT uniqMerge(state) FROM (SELECT initializeAggregation('uniqState', number % 3) AS state FROM numbers(10000));
Результат:
┌─uniqMerge(state)─┐
│ 3 │
└───────────────────┘
Запрос:
SELECT finalizeAggregation(state), toTypeName(state)
FROM (SELECT initializeAggregation('sumState', number % 3) AS state FROM numbers(5));
Результат:
┌─finalizeAggregation(state)─┬─toTypeName(state)──────────────┐
│ 0 │ AggregateFunction(sum, UInt8) │
│ 1 │ AggregateFunction(sum, UInt8) │
│ 2 │ AggregateFunction(sum, UInt8) │
│ 0 │ AggregateFunction(sum, UInt8) │
│ 1 │ AggregateFunction(sum, UInt8) │
└───────────────────────────────┴─────────────────────────────────┘
Пример с движком таблиц AggregatingMergeTree
и столбцом типа AggregateFunction
:
CREATE TABLE metrics
(
key UInt64,
value AggregateFunction(sum, UInt64) DEFAULT initializeAggregation('sumState', toUInt64(0))
)
ENGINE = AggregatingMergeTree
ORDER BY key
INSERT INTO metrics VALUES (0, initializeAggregation('sumState', toUInt64(42)))
Смотрите также:
Принимает состояние агрегатной функции. Возвращает результат агрегирования (или конечное состояние при использовании комбинатора -State).
Синтаксис:
finalizeAggregation(state)
Параметры:
Возвращаемые значения:
Тип: соответствует типу агрегируемых значений.
Примеры:
Запрос:
SELECT finalizeAggregation(( SELECT countState(number) FROM numbers(10)));
Результат:
┌─finalizeAggregation(_subquery16)─┐
│ 10 │
└─────────────────────────────────────┘
Запрос:
SELECT finalizeAggregation(( SELECT sumState(number) FROM numbers(10)));
Результат:
┌─finalizeAggregation(_subquery20)─┐
│ 45 │
└─────────────────────────────────────┘
Обратите внимание, что значения NULL игнорируются.
Запрос:
SELECT finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]));
Результат:
┌─finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]))─┐
│ 2 │
└─────────────────────────────────────────────────────────────────┘
Комбинированный пример:
Запрос:
WITH initializeAggregation('sumState', number) AS one_row_sum_state
SELECT
number,
finalizeAggregation(one_row_sum_state) AS one_row_sum,
runningAccumulate(one_row_sum_state) AS cumulative_sum
FROM numbers(10);
Результат:
┌─number─┬─one_row_sum─┬─cumulative_sum─┐
│ 0 │ 0 │ 0 │
│ 1 │ 1 │ 1 │
│ 2 │ 2 │ 3 │
│ 3 │ 3 │ 6 │
│ 4 │ 4 │ 10 │
│ 5 │ 5 │ 15 │
│ 6 │ 6 │ 21 │
│ 7 │ 7 │ 28 │
│ 8 │ 8 │ 36 │
│ 9 │ 9 │ 45 │
└─────────┴──────────────┴─────────────────┘
Смотрите также:
Накапливает состояния агрегатной функции для каждой строки блока данных.
Функция обнуляет состояние для каждого нового блока.
Синтаксис:
runningAccumulate(agg_state[, grouping]);
Параметры:
Возвращаемое значение:
Тип зависит от используемой агрегатной функции.
Примеры:
Рассмотрим примеры использования runningAccumulate для нахождения кумулятивной суммы чисел без и с группировкой.
Запрос:
SELECT k, runningAccumulate(sum_k) AS res FROM (SELECT number as k, sumState(k) AS sum_k FROM numbers(10) GROUP BY k ORDER BY k);
Результат:
┌─k─┬─res─┐
│ 0 │ 0 │
│ 1 │ 1 │
│ 2 │ 3 │
│ 3 │ 6 │
│ 4 │ 10 │
│ 5 │ 15 │
│ 6 │ 21 │
│ 7 │ 28 │
│ 8 │ 36 │
│ 9 │ 45 │
└───┴──────┘
Подзапрос формирует sumState для каждого числа от 0 до 9. sumState возвращает состояние функции sum, содержащее сумму одного числа.
Весь запрос делает следующее:
В следующем примере показано использование параметра grouping:
Запрос:
SELECT
grouping,
item,
runningAccumulate(state, grouping) AS res
FROM
(
SELECT
toInt8(number / 4) AS grouping,
number AS item,
sumState(number) AS state
FROM numbers(15)
GROUP BY item
ORDER BY item ASC
);
Результат:
┌─grouping─┬─item─┬─res─┐
│ 0 │ 0 │ 0 │
│ 0 │ 1 │ 1 │
│ 0 │ 2 │ 3 │
│ 0 │ 3 │ 6 │
│ 1 │ 4 │ 4 │
│ 1 │ 5 │ 9 │
│ 1 │ 6 │ 15 │
│ 1 │ 7 │ 22 │
│ 2 │ 8 │ 8 │
│ 2 │ 9 │ 17 │
│ 2 │ 10 │ 27 │
│ 2 │ 11 │ 38 │
│ 3 │ 12 │ 12 │
│ 3 │ 13 │ 25 │
│ 3 │ 14 │ 39 │
└───────────┴──────┴──────┘
Как вы можете видеть, runningAccumulate объединяет состояния для каждой группы строк отдельно.
Функция позволяет извлекать данные из таблицы таким же образом как из словаря.
Получает данные из таблиц Join по ключу.
Поддерживаются только таблицы, созданные с ENGINE = Join(ANY, LEFT, <join_keys>).
Синтаксис:
joinGet(join_storage_table_name, `value_column`, join_keys)
Параметры:
Возвращаемое значение:
Если значения не существует в исходной таблице, вернется 0 или null в соответствии с настройками join_use_nulls.
Подробнее о настройке join_use_nulls в операциях Join.
Пример:
Входная таблица:
CREATE DATABASE db_test
CREATE TABLE db_test.id_val(`id` UInt32, `val` UInt32) ENGINE = Join(ANY, LEFT, id) SETTINGS join_use_nulls = 1
INSERT INTO db_test.id_val VALUES (1,11)(2,12)(4,13)
┌─id─┬─val─┐
│ 4 │ 13 │
│ 2 │ 12 │
│ 1 │ 11 │
└────┴──────┘
Запрос:
SELECT joinGet(db_test.id_val,'val',toUInt32(number)) from numbers(4) SETTINGS join_use_nulls = 1
Результат:
┌─joinGet(db_test.id_val, 'val', toUInt32(number))─┐
│ 0 │
│ 11 │
│ 12 │
│ 0 │
└──────────────────────────────────────────────────────┘
Оценивает внешнюю модель.
Принимает на вход имя и аргументы модели. Возвращает Float64.
Бросает исключение, если аргумент не равен нулю.
custom_message – необязательный параметр, константная строка, задает текст сообщения об ошибке.
SELECT throwIf(number = 3, 'Too many') FROM numbers(10);
↙ Progress: 0.00 rows, 0.00 B (0.00 rows/s., 0.00 B/s.) Received exception from server (version 19.14.1):
Code: 395. DB::Exception: Received from localhost:9000. DB::Exception: Too many.
Возвращает свой аргумент. Используется для отладки и тестирования, позволяет отменить использование индекса, и получить результат и производительность полного сканирования таблицы. Это работает, потому что оптимизатор запросов не может «заглянуть» внутрь функции identity.
Синтаксис:
identity(x)
Пример:
Запрос:
SELECT identity(42)
Результат:
┌─identity(42)─┐
│ 42 │
└───────────────┘
Генерирует строку со случайным набором печатных символов ASCII.
Синтаксис:
randomPrintableASCII(length)
Параметры:
Если передать `length < 0`, то поведение функции не определено.
Возвращаемое значение:
Тип: String.
Пример:
SELECT number, randomPrintableASCII(30) as str, length(str) FROM system.numbers LIMIT 3
┌─number─┬─str───────────────────────────────┬─length(randomPrintableASCII(30))─┐
│ 0 │ SuiCOSTvC0csfABSw=UcSzp2.`rv8x │ 30 │
│ 1 │ 1Ag NlJ &RCN:*>HVPG;PE-nO"SUFD │ 30 │
│ 2 │ /"+<"wUTh:=LjJ Vm!c&hI*m#XTfzz │ 30 │
└────────┴────────────────────────────────────┴─────────────────────────────────────┘
Генерирует бинарную строку заданной длины, заполненную случайными байтами (в том числе нулевыми).
Синтаксис:
randomString(length)
Параметры:
Возвращаемое значение:
Type: String.
Пример:
Запрос:
SELECT randomString(30) AS str, length(str) AS len FROM numbers(2) FORMAT Vertical;
Ответ:
Row 1:
──────
str: 3 G : pT ?w тi k aV f6
len: 30
Row 2:
──────
str: 9 ,] ^ ) ]?? 8
len: 30
Смотрите также:
Генерирует бинарную строку заданной длины, заполненную случайными байтами, включая нулевые.
Синтаксис:
randomFixedString(length);
Параметры:
Возвращаемое значение:
Тип: FixedString.
Пример:
Запрос:
SELECT randomFixedString(13) as rnd, toTypeName(rnd)
Результат:
┌─rnd────────┬─toTypeName(randomFixedString(13))─┐
│ j▒h㋖HɨZ'▒ │ FixedString(13) │
└────────────┴───────────────────────────────────────┘
Генерирует строку заданной длины со случайными символами в кодировке UTF-8.
Синтаксис:
randomStringUTF8(length);
Параметры:
Возвращаемое значение:
Тип: String.
Пример:
Запрос:
SELECT randomStringUTF8(13)
Результат:
┌─randomStringUTF8(13)─┐
│ 𘤗д兠庇 │
└────────────────────────┘
Возвращает текущее значение пользовательской настройки.
Синтаксис:
getSetting('custom_setting');
Параметр:
Возвращаемое значение
Пример:
SET custom_a = 123;
SELECT getSetting('custom_a');
Результат:
123
См. также:
Проверяет, находится ли число Decimal вне собственной (или заданной) области значений.
Синтаксис:
isDecimalOverflow(d, [p])
Параметры:
Возвращаемое значение:
Пример:
Запрос:
SELECT isDecimalOverflow(toDecimal32(1000000000, 0), 9),
isDecimalOverflow(toDecimal32(1000000000, 0)),
isDecimalOverflow(toDecimal32(-1000000000, 0), 9),
isDecimalOverflow(toDecimal32(-1000000000, 0));
Результат:
1 1 1 1
Возвращает количество десятичных цифр, необходимых для представления значения.
Синтаксис:
countDigits(x)
Параметры:
Возвращаемое значение:
Тип: UInt8.
Для Decimal значений учитывается их масштаб: вычисляется результат по базовому целочисленному типу, полученному как (value * scale). Например: countDigits(42) = 2, countDigits(42.000) = 5, countDigits(0.04200) = 4. То есть вы можете проверить десятичное переполнение для Decimal64 с помощью countDecimal(x) > 18. Это медленный вариант isDecimalOverflow.
Пример:
Запрос:
SELECT countDigits(toDecimal32(1, 9)), countDigits(toDecimal32(-1, 9)),
countDigits(toDecimal64(1, 18)), countDigits(toDecimal64(-1, 18)),
countDigits(toDecimal128(1, 38)), countDigits(toDecimal128(-1, 38));
Результат:
10 10 19 19 39 39
Возвращаемое значение:
Тип: LowCardinality(String).
Синтаксис:
errorCodeToName(1)
Результат:
UNSUPPORTED_METHOD
Возвращает номер TCP порта, который использует сервер для нативного протокола.
Синтаксис:
tcpPort()
Параметры:
Возвращаемое значение:
Тип: UInt16.
Пример:
Запрос:
SELECT tcpPort();
Результат:
┌─tcpPort()─┐
│ 9000 │
└────────────┘