Skip to main content
Version: 0.2.0

Others

MACNumToString​

Syntax


MACNumToString(num)

Accepts a UInt64 number. Interprets it as a MAC address in big endian. Returns a string containing the corresponding MAC address in the format AA:BB:CC:DD:EE:FF (colon-separated numbers in hexadecimal form).

MACStringToNum​

Syntax


MACNumToString(num)

The inverse function of MACNumToString. If the MAC address has an invalid format, it returns 0.

MACStringToOUI​

Syntax


MACStringToOUI(s)

Accepts a MAC address in the format AA:BB:CC:DD:EE:FF (colon-separated numbers in hexadecimal form). Returns the first three octets as a UInt64 number. If the MAC address has an invalid format, it returns 0.

auc​

Calculate AUC (Area Under the Curve, which is a concept in machine learning, see more details: https://en.wikipedia.org/wiki/Receiver_operating_characteristic#Area_under_the_curve ).

Syntax


arrayAUC(arr_scores, arr_labels)

Arguments

  • arr_scores — scores prediction model gives.

  • arr_labels — labels of samples, usually 1 for positive sample and 0 for negtive sample.

Returned value

Returns AUC value with type Float64.

Example

Query:


select arrayAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1]);

Result:


┌─arrayAUC([0.1, 0.4, 0.35, 0.8], [0, 0, 1, 1])─┐

│ 0.75 │

└───────────────────────────────────────────────┘

bar​

Syntax


bar(x, min, max, width)

Allows building a unicode-art diagram.

bar(x, min, max, width) draws a band with a width proportional to (x - min) and equal to width characters when x = max .

Arguments

  • x — Size to display.

  • min, max — Integer constants. The value must fit in Int64 .

  • width — Constant, positive integer, can be fractional.

The band is drawn with accuracy to one eighth of a symbol.

Example:


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 │ █████████████▎ │

└────┴────────┴────────────────────┘

blockNumber​

Returns the sequence number of the data block where the row is located.

blockSize​

Gets the size of the block.

Syntax


blockSize()

In ByConity, queries are always run on blocks (sets of column parts). This function allows getting the size of the block that you called it for.

currentDatabase​

Syntax


currentDatabase()

Returns the name of the current database.

You can use this function in table engine parameters in a CREATE TABLE query where you need to specify the database.

defaultValueOfArgumentType​

Outputs the default value for the data type. Does not include default values for custom columns set by the user.

Syntax


defaultValueOfArgumentType(expression)

Arguments:

  • expression — Arbitrary type of value or an expression that results in a value of an arbitrary type.

Returned values

  • 0 for numbers.

  • Empty string for strings.

  • ᴺᵁᴸᴸ for Nullable .

Example


SELECT defaultValueOfArgumentType( CAST(1 AS Int8) )


┌─defaultValueOfArgumentType(CAST(1, 'Int8'))─┐

│ 0 │

└─────────────────────────────────────────────┘


SELECT defaultValueOfArgumentType( CAST(1 AS Nullable(Int8) ) )


┌─defaultValueOfArgumentType(CAST(1, 'Nullable(Int8)'))─┐

│ ᴺᵁᴸᴸ │

└───────────────────────────────────────────────────────┘

dumpColumnStructure​

Outputs a detailed description of data structures in RAM

Syntax


dumpColumnStructure(value)

Arguments:

  • value — Any type of value.

Returned values

  • A string describing the structure that is used for representing the value data type in RAM.

Example


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)) │

└──────────────────────────────────────────────────────────────┘

filesystemAvailable​

Returns amount of remaining space on the filesystem where the files of the databases located. It is always smaller than total free space ( filesystemFree ) because some space is reserved for OS.

Syntax


filesystemAvailable()

Returned value

  • The amount of remaining space available in bytes.

Type: UInt64 .

Example

Query:


SELECT formatReadableSize(filesystemAvailable()) AS "Available space", toTypeName(filesystemAvailable()) AS "Type";

Result:


┌─Available space─┬─Type───┐

│ 30.75 GiB │ UInt64 │

└─────────────────┴────────┘

filesystemCapacity​

Returns the capacity of the filesystem in bytes. For evaluation, the path to the data directory must be configured.

Syntax


filesystemCapacity()

Returned value

  • Capacity information of the filesystem in bytes.

Type: UInt64 .

Example

Query:


SELECT formatReadableSize(filesystemCapacity()) AS "Capacity", toTypeName(filesystemCapacity()) AS "Type"

Result:


┌─Capacity──┬─Type───┐

│ 39.32 GiB │ UInt64 │

└───────────┴────────┘

filesystemFree​

Returns total amount of the free space on the filesystem where the files of the databases located. See also filesystemAvailable

Syntax


filesystemFree()

Returned value

  • Amount of free space in bytes.

Type: UInt64 .

Example

Query:


SELECT formatReadableSize(filesystemFree()) AS "Free space", toTypeName(filesystemFree()) AS "Type";

Result:


┌─Free space─┬─Type───┐

│ 32.39 GiB │ UInt64 │

└────────────┴────────┘

finalizeAggregation​

Takes state of aggregate function. Returns result of aggregation (or finalized state when using -State combinator).

Syntax


finalizeAggregation(state)

Arguments

Returned value(s)

  • Value/values that was aggregated.

Type: Value of any types that was aggregated.

Examples

Query:


SELECT finalizeAggregation(( SELECT countState(number) FROM numbers(10)));

Result:


┌─finalizeAggregation(_subquery16)─┐

│ 10 │

└──────────────────────────────────┘

Query:


SELECT finalizeAggregation(( SELECT sumState(number) FROM numbers(10)));

Result:


┌─finalizeAggregation(_subquery20)─┐

│ 45 │

└──────────────────────────────────┘

Note that NULL values are ignored.

Query:


SELECT finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]));

Result:


┌─finalizeAggregation(arrayReduce('anyState', [NULL, 2, 3]))─┐

│ 2 │

└────────────────────────────────────────────────────────────┘

Combined example:

Query:


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);

Result:


┌─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 │

└────────┴─────────────┴────────────────┘

See Also

formatReadableSize(x)​

formatReadableSize(x) Accepts the size (number of bytes). Returns a rounded size with a suffix (KiB, MiB, etc.) as a string.

Example:

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 │
└────────────────┴────────────┘
​```## getSizeOfEnumType


Returns the number of fields in [Enum](https://bytedance.feishu.cn/sql-reference/data-types/enum.md) .

**Syntax**

​```sql

getSizeOfEnumType(value)

Arguments:

  • value — Value of type Enum .

Returned values

  • The number of fields with Enum input values.

  • An exception is thrown if the type is not Enum .

Example


SELECT getSizeOfEnumType( CAST('a' AS Enum8('a' = 1, 'b' = 2) ) ) AS x


┌─x─┐

│ 2 │

└───┘

globalIn​

in, notIn, globalIn, globalNotIn {#in-functions}

See the section IN operators .

globalNotIn​

in, notIn, globalIn, globalNotIn {#in-functions}

See the section IN operators .

has​

has(arr, elem)

Checks whether the ‘arr’ array has the ‘elem’ element.

Returns 0 if the element is not in the array, or 1 if it is.

NULL is processed as a value.


SELECT has([1, 2, NULL], NULL)


┌─has([1, 2, NULL], NULL)─┐

│ 1 │

└─────────────────────────┘

hasColumnInTable​

hasColumnInTable([‘hostname’[, ‘username’[, ‘password’]],] ‘database’, ‘table’, ‘column’) {#hascolumnintablehostname-username-password-database-table-column}

Accepts constant strings: database name, table name, and column name. Returns a UInt8 constant expression equal to 1 if there is a column, otherwise 0. If the hostname parameter is set, the test will run on a remote server.

The function throws an exception if the table does not exist.

For elements in a nested data structure, the function checks for the existence of a column. For the nested data structure itself, the function returns 0.

hostName​

hostName()

Returns a string with the name of the host that this function was performed on. For distributed processing, this is the name of the remote server host, if the function is performed on a remote server.

identity​

Returns the same value that was used as its argument. Used for debugging and testing, allows to cancel using index, and get the query performance of a full scan. When query is analyzed for possible use of index, the analyzer does not look inside identity functions. Also constant folding is not applied too.

Syntax


identity(x)

Example

Query:


SELECT identity(42)

Result:


┌─identity(42)─┐

│ 42 │

└──────────────┘

if​

Controls conditional branching. Unlike most systems, ByConity always evaluate both expressions then and else .

Syntax


SELECT if(cond, then, else)

If the condition cond evaluates to a non-zero value, returns the result of the expression then , and the result of the expression else , if present, is skipped. If the cond is zero or NULL , then the result of the then expression is skipped and the result of the else expression, if present, is returned.

Arguments

  • cond – The condition for evaluation that can be zero or not. The type is UInt8, Nullable(UInt8) or NULL.

  • then – The expression to return if condition is met.

  • else – The expression to return if condition is not met.

Returned values

The function executes then and else expressions and returns its result, depending on whether the condition cond ended up being zero or not.

Example

Query:


SELECT if(1, plus(2, 2), plus(2, 6));

Result:


┌─plus(2, 2)─┐

│ 4 │

└────────────┘

Query:


SELECT if(0, plus(2, 2), plus(2, 6));

Result:


┌─plus(2, 6)─┐

│ 8 │

└────────────┘

  • then and else must have the lowest common type.

Example:

Take this LEFT_RIGHT table:


SELECT *

FROM LEFT_RIGHT



┌─left─┬─right─┐

│ ᴺᵁᴸᴸ │ 4 │

│ 1 │ 3 │

│ 2 │ 2 │

│ 3 │ 1 │

│ 4 │ ᴺᵁᴸᴸ │

└──────┴───────┘

The following query compares left and right values:


SELECT

left,

right,

if(left < right, 'left is smaller than right', 'right is greater or equal than left') AS is_smaller

FROM LEFT_RIGHT

WHERE isNotNull(left) AND isNotNull(right)



┌─left─┬─right─┬─is_smaller──────────────────────────┐

│ 1 │ 3 │ left is smaller than right │

│ 2 │ 2 │ right is greater or equal than left │

│ 3 │ 1 │ right is greater or equal than left │

└──────┴───────┴─────────────────────────────────────┘

Note: NULL values are not used in this example, check NULL values in conditionals section.

ignore​

Syntax


ignore(…)

Accepts any arguments, including NULL . Always returns 0.

However, the argument is still evaluated. This can be used for benchmarks.

indexHint​

The function is intended for debugging and introspection purposes. The function ignores it's argument and always returns 1. Arguments are not even evaluated.

But for the purpose of index analysis, the argument of this function is analyzed as if it was present directly without being wrapped inside indexHint function. This allows to select data in index ranges by the corresponding condition but without further filtering by this condition. The index in ByConity is sparse and using indexHint will yield more data than specifying the same condition directly.

Syntax


SELECT * FROM table WHERE indexHint(<expression>)

Returned value

  1. Type: Uint8 .

Example

Here is the example of test data from the table ontime .

Input table:


SELECT count() FROM ontime


┌─count()─┐

│ 4276457 │

└─────────┘

The table has indexes on the fields (FlightDate, (Year, FlightDate)) .

Create a query, where the index is not used.

Query:


SELECT FlightDate AS k, count() FROM ontime GROUP BY k ORDER BY k

ByConity processed the entire table ( Processed 4.28 million rows ).

Result:


┌──────────k─┬─count()─┐

│ 2017-01-01 │ 13970 │

│ 2017-01-02 │ 15882 │

........................

│ 2017-09-28 │ 16411 │

│ 2017-09-29 │ 16384 │

│ 2017-09-30 │ 12520 │

└────────────┴─────────┘

To apply the index, select a specific date.

Query:


SELECT FlightDate AS k, count() FROM ontime WHERE k = '2017-09-15' GROUP BY k ORDER BY k

By using the index, ByConity processed a significantly smaller number of rows ( Processed 32.74 thousand rows ).

Result:


┌──────────k─┬─count()─┐

│ 2017-09-15 │ 16428 │

└────────────┴─────────┘

Now wrap the expression k = '2017-09-15' into indexHint function.

Query:


SELECT

FlightDate AS k,

count()

FROM ontime

WHERE indexHint(k = '2017-09-15')

GROUP BY k

ORDER BY k ASC

ByConity used the index in the same way as the previous time ( Processed 32.74 thousand rows ).

The expression k = '2017-09-15' was not used when generating the result.

In examle the indexHint function allows to see adjacent dates.

Result:


┌──────────k─┬─count()─┐

│ 2017-09-14 │ 7071 │

│ 2017-09-15 │ 16428 │

│ 2017-09-16 │ 1077 │

│ 2017-09-30 │ 8167 │

└────────────┴─────────┘

isFinite​

isFinite(x)

Syntax


isFinite(x)

Accepts Float32 and Float64 and returns UInt8 equal to 1 if the argument is not infinite and not a NaN, otherwise 0.

isInfinite​

isInfinite(x)

Syntax


isInfinite(x)

Accepts Float32 and Float64 and returns UInt8 equal to 1 if the argument is infinite, otherwise 0. Note that 0 is returned for a NaN.

isNaN​

isNaN(x)

Syntax


isNaN(x)

Accepts Float32 and Float64 and returns UInt8 equal to 1 if the argument is a NaN, otherwise 0.

joinGet​

The function lets you extract data from the table the same way as from a dictionary .

Gets data from Join tables using the specified join key.

Only supports tables created with the ENGINE = Join(ANY, LEFT, <join_keys>) statement.

Syntax


joinGet(join_storage_table_name, `value_column`, join_keys)

Arguments

  • join_storage_table_name — an identifier indicates where search is performed. The identifier is searched in the default database (see parameter default_database in the config file). To override the default database, use the USE db_name or specify the database and the table through the separator db_name.db_table , see the example.

  • value_column — name of the column of the table that contains required data.

  • join_keys — list of keys.

Returned value

Returns list of values corresponded to list of keys.

If certain does not exist in source table then 0 or null will be returned based on join_use_nulls setting.

More info about join_use_nulls in Join operation .

Example

Input table:


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 │

└────┴─────┘

Query:


SELECT joinGet(db_test.id_val,'val',toUInt32(number)) from numbers(4) SETTINGS join_use_nulls = 1

Result:


┌─joinGet(db_test.id_val, 'val', toUInt32(number))─┐

│ 0 │

│ 11 │

│ 12 │

│ 0 │

└──────────────────────────────────────────────────┘

least​

least(a, b)

Returns the smallest value from a and b.

log​

log(x)

Accepts a numeric argument and returns a Float64 number close to the natural logarithm of the argument.

materialize​

materialize(x)

Turns a constant into a full column containing just one value.

In ByConity, full columns and constants are represented differently in memory. Functions work differently for constant arguments and normal arguments (different code is executed), although the result is almost always the same. This function is for debugging this behavior.

modelEvaluate​

Evaluate external model.

Syntax


modelEvaluate(model_name, …)

Accepts a model name and model arguments. Returns Float64.

regionHierarchy​

regionHierarchy(id[, geobase]) {#regionhierarchyid-geobase}

Accepts a UInt32 number – the region ID from the Yandex geobase. Returns an array of region IDs consisting of the passed region and all parents along the chain.

Example: regionHierarchy(toUInt32(213)) = [213,1,3,225,10001,10000] .

regionIn​

regionIn(lhs, rhs[, geobase]) {#regioninlhs-rhs-geobase}

Checks whether a ‘lhs’ region belongs to a ‘rhs’ region. Returns a UInt8 number equal to 1 if it belongs, or 0 if it does not belong.

The relationship is reflexive – any region also belongs to itself.

regionToArea​

regionToArea(id[, geobase])

Converts a region to an area (type 5 in the geobase). In every other way, this function is the same as ‘regionToCity’.


SELECT DISTINCT regionToName(regionToArea(toUInt32(number), 'ua'))

FROM system.numbers

LIMIT 15


┌─regionToName(regionToArea(toUInt32(number), \'ua\'))─┐

│ │

│ Moscow and Moscow region │

│ St. Petersburg and Leningrad region │

│ Belgorod region │

│ Ivanovsk region │

│ Kaluga region │

│ Kostroma region │

│ Kursk region │

│ Lipetsk region │

│ Orlov region │

│ Ryazan region │

│ Smolensk region │

│ Tambov region │

│ Tver region │

│ Tula region │

└──────────────────────────────────────────────────────┘

regionToCity​

regionToCity(id[, geobase])

Accepts a UInt32 number – the region ID from the Yandex geobase. If this region is a city or part of a city, it returns the region ID for the appropriate city. Otherwise, returns 0.

regionToContinent​

regionToContinent(id[, geobase])

Converts a region to a continent. In every other way, this function is the same as ‘regionToCity’.

Example: regionToContinent(toUInt32(213)) = 10001 converts Moscow (213) to Eurasia (10001).

regionToCountry​

regionToCountry(id[, geobase])

Converts a region to a country. In every other way, this function is the same as ‘regionToCity’.

Example: regionToCountry(toUInt32(213)) = 225 converts Moscow (213) to Russia (225).

regionToDistrict​

regionToDistrict(id[, geobase])

Converts a region to a federal district (type 4 in the geobase). In every other way, this function is the same as ‘regionToCity’.


SELECT DISTINCT regionToName(regionToDistrict(toUInt32(number), 'ua'))

FROM system.numbers

LIMIT 15


┌─regionToName(regionToDistrict(toUInt32(number), \'ua\'))─┐

│ │

│ Central federal district │

│ Northwest federal district │

│ South federal district │

│ North Caucases federal district │

│ Privolga federal district │

│ Ural federal district │

│ Siberian federal district │

│ Far East federal district │

│ Scotland │

│ Faroe Islands │

│ Flemish region │

│ Brussels capital region │

│ Wallonia │

│ Federation of Bosnia and Herzegovina │

└──────────────────────────────────────────────────────────┘

regionToName​

regionToName(id[, lang])

Accepts a UInt32 number – the region ID from the Yandex geobase. A string with the name of the language can be passed as a second argument. Supported languages are: ru, en, ua, uk, by, kz, tr. If the second argument is omitted, the language ‘ru’ is used. If the language is not supported, an exception is thrown. Returns a string – the name of the region in the corresponding language. If the region with the specified ID does not exist, an empty string is returned.

ua and uk both mean Ukrainian.

regionToPopulation​

regionToPopulation(id[, geobase])

Gets the population for a region.

The population can be recorded in files with the geobase. See the section “External dictionaries”.

If the population is not recorded for the region, it returns 0.

In the Yandex geobase, the population might be recorded for child regions, but not for parent regions.

regionToTopContinent​

regionToTopContinent(id[, geobase])

Finds the highest continent in the hierarchy for the region.

Syntax


regionToTopContinent(id[, geobase])

Arguments

Returned value

  • Identifier of the top level continent (the latter when you climb the hierarchy of regions).

  • 0, if there is none.

Type: UInt32 .

replicate​

Creates an array with a single value.

Used for internal implementation of arrayJoin .


SELECT replicate(x, arr);

Arguments:

  • arr — Original array. ByConity creates a new array of the same length as the original and fills it with the value x .

  • x — The value that the resulting array will be filled with.

Returned value

An array filled with the value x .

Type: Array .

Example

Query:


SELECT replicate(1, ['a', 'b', 'c'])

Result:


┌─replicate(1, ['a', 'b', 'c'])─┐

│ [1,1,1] │

└───────────────────────────────┘

rowNumberInAllBlocks​

rowNumberInAllBlocks()

Returns the ordinal number of the row in the data block. This function only considers the affected data blocks.

rowNumberInBlock​

Returns the ordinal number of the row in the data block. Different data blocks are always recalculated.

runningAccumulate​

Accumulates states of an aggregate function for each row of a data block.

Warning

The state is reset for each new data block.

Syntax


runningAccumulate(agg_state[, grouping]);

Arguments

  • agg_state — State of the aggregate function. AggregateFunction .

  • grouping — Grouping key. Optional. The state of the function is reset if the grouping value is changed. It can be any of the supported data types for which the equality operator is defined.

Returned value

  • Each resulting row contains a result of the aggregate function, accumulated for all the input rows from 0 to the current position. runningAccumulate resets states for each new data block or when the grouping value changes.

Type depends on the aggregate function used.

Examples

Consider how you can use runningAccumulate to find the cumulative sum of numbers without and with grouping.

Query:


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);

Result:


┌─k─┬─res─┐

│ 0 │ 0 │

│ 1 │ 1 │

│ 2 │ 3 │

│ 3 │ 6 │

│ 4 │ 10 │

│ 5 │ 15 │

│ 6 │ 21 │

│ 7 │ 28 │

│ 8 │ 36 │

│ 9 │ 45 │

└───┴─────┘

The subquery generates sumState for every number from 0 to 9 . sumState returns the state of the sum function that contains the sum of a single number.

The whole query does the following:

  1. For the first row, runningAccumulate takes sumState(0) and returns 0 .

  2. For the second row, the function merges sumState(0) and sumState(1) resulting in sumState(0 + 1) , and returns 1 as a result.

  3. For the third row, the function merges sumState(0 + 1) and sumState(2) resulting in sumState(0 + 1 + 2) , and returns 3 as a result.

  4. The actions are repeated until the block ends.

The following example shows the groupping parameter usage:

Query:


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

);

Result:


┌─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 │

└──────────┴──────┴─────┘

As you can see, runningAccumulate merges states for each group of rows separately.

runningDifference​

Syntax


runningDifference(x)

Calculates the difference between successive row values in the data block.

Returns 0 for the first row and the difference from the previous row for each subsequent row.

Warning:

It can reach the previous row only inside the currently processed data block.

The result of the function depends on the affected data blocks and the order of data in the block.

The rows order used during the calculation of runningDifference can differ from the order of rows returned to the user.

To prevent that you can make a subquery with ORDER BY and call the function from outside the subquery.

Example:


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 │

└─────────┴─────────────────────┴───────┘

Please note - block size affects the result. With each new block, the runningDifference state is reset.


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 -- default value is 65536!



SELECT

number,

runningDifference(number + 1) AS diff

FROM numbers(100000)

WHERE diff != 1


┌─number─┬─diff─┐

│ 0 │ 0 │

└────────┴──────┘

runningDifferenceStartingWithFirstValue​

Same as for runningDifference , the difference is the value of the first row, returned the value of the first row, and each subsequent row returns the difference from the previous row.

sleep​

Syntax


sleep(seconds)

Sleeps ‘seconds’ seconds on each data block. You can specify an integer or a floating-point number.

sleepEachRow​

sleepEachRow(seconds)

Sleeps ‘seconds’ seconds on each row. You can specify an integer or a floating-point number.

throwIf​

throwIf(x[, custom_message])

Throw an exception if the argument is non zero.

custom_message - is an optional parameter: a constant string, provides an error 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](http://localhost:9000/). DB::Exception: Too many.

toColumnTypeName​

Returns the name of the class that represents the data type of the column in RAM.


toColumnTypeName(value)

Arguments:

  • value — Any type of value.

Returned values

  • A string with the name of the class that is used for representing the value data type in RAM.

Example of the difference between **toTypeName ' and ' 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) │

└───────────────────────────────────────────────────────────┘

The example shows that the DateTime data type is stored in memory as Const(UInt32) .

toTypeName​

toTypeName(x)

Returns a string containing the type name of the passed argument.

If NULL is passed to the function as input, then it returns the Nullable(Nothing) type, which corresponds to an internal NULL representation in ByConity.

transform​

Syntax


transform(x, array_from, array_to)

Differs from the first variation in that the ‘default’ argument is omitted.

If the ‘x’ value is equal to one of the elements in the ‘array_from’ array, it returns the matching element (that is numbered the same) from the ‘array_to’ array. Otherwise, it returns ‘x’.

Types:

transform(T, Array(T), Array(T)) -> T

Example:


SELECT

transform(domain(Referer), ['[yandex.ru](http://yandex.ru/)', '[google.ru](http://google.ru/)', '[vk.com](http://vk.com/)'], ['www.yandex', '[example.com](http://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](http://mail.yandex.ru/) │ 107147 │

│ ██████.ru │ 100355 │

│ █████████.ru │ 65040 │

│ [news.yandex.ru](http://news.yandex.ru/) │ 64515 │

│ ██████.net │ 59141 │

│ [example.com](http://example.com/) │ 57316 │

└────────────────┴─────────┘

transformx-array-from-array-to-default

Syntax


transform(x, array_from, array_to, default)

Argument

x – What to transform.

array_from – Constant array of values for converting.

array_to – Constant array of values to convert the values in ‘from’ to.

default – Which value to use if ‘x’ is not equal to any of the values in ‘from’.

array_from and array_to – Arrays of the same size.

Types:

transform(T, Array(T), Array(U), U) -> U

T and U can be numeric, string, or Date or DateTime types.

Where the same letter is indicated (T or U), for numeric types these might not be matching types, but types that have a common type.

For example, the first argument can have the Int64 type, while the second has the Array(UInt16) type.

If the ‘x’ value is equal to one of the elements in the ‘array_from’ array, it returns the existing element (that is numbered the same) from the ‘array_to’ array. Otherwise, it returns ‘default’. If there are multiple matching elements in ‘array_from’, it returns one of the matches.

Example :


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 │

└───────────┴────────┘

transformx-array-from-array-to

Syntax


transform(x, array_from, array_to)

Differs from the first variation in that the ‘default’ argument is omitted.

If the ‘x’ value is equal to one of the elements in the ‘array_from’ array, it returns the matching element (that is numbered the same) from the ‘array_to’ array. Otherwise, it returns ‘x’.

Types :

transform(T, Array(T), Array(T)) -> T

Example :


SELECT

transform(domain(Referer), ['[yandex.ru](http://yandex.ru/)', '[google.ru](http://google.ru/)', '[vk.com](http://vk.com/)'], ['www.yandex', '[example.com](http://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](http://mail.yandex.ru/) │ 107147 │

│ ██████.ru │ 100355 │

│ █████████.ru │ 65040 │

│ [news.yandex.ru](http://news.yandex.ru/) │ 64515 │

│ ██████.net │ 59141 │

│ [example.com](http://example.com/) │ 57316 │

└────────────────┴─────────┘

uptime​

uptime()

Returns the server’s uptime in seconds.

version​

Syntax


version()

Returns the version of the server as a string.

visibleWidth​

visibleWidth(x)

Calculates the approximate width when outputting values to the console in text format (tab-separated).

This function is used by the system for implementing Pretty formats.

NULL is represented as a string corresponding to NULL in Pretty formats.


SELECT visibleWidth(NULL)


┌─visibleWidth(NULL)─┐

│ 4 │

└────────────────────┘