メインコンテンツまでスキップ
メインコンテンツまでスキップ

タプル関数

tuple

複数のカラムをグループ化することを可能にする関数です。 カラム C1, C2, ... の型が T1, T2, ... の場合、Tuple(T1, T2, ...) を返します。設定 enable_named_columns_in_function_tuple が有効になっている場合、これらのカラムが一意の名前を持ち、引用符なしの識別子として扱える場合には、Tuple(C1 T1, C2 T2, ...) を返します。関数を実行するコストはありません。 タプルは通常、IN 演算子の引数としての中間値や、ラムダ関数の形式パラメータのリストを作成するために使用されます。タプルはテーブルに書き込むことはできません。

この関数は演算子 (x, y, ...) を実装しています。

構文

tuple(x, y, ...)

tupleElement

タプルからカラムを取得することを可能にする関数です。

第二引数が数値 index の場合、それはカラムのインデックスで、1から始まります。第二引数が文字列 name の場合、それは要素の名前を表します。さらに、第三のオプション引数を提供することができ、インデックスが範囲外または名前に対して要素が存在しない場合は、例外をスローする代わりにデフォルト値を返します。第二および第三の引数は、指定された場合、定数でなければなりません。関数を実行するコストはありません。

この関数は演算子 x.indexx.name を実装しています。

構文

tupleElement(tuple, index, [, default_value])
tupleElement(tuple, name, [, default_value])

untuple

呼び出し位置で tuple 要素の構文的置換を行います。

結果カラムの名前は実装に依存し、変更される可能性があります。untuple の後に特定のカラム名を仮定しないでください。

構文

untuple(x)

EXCEPT 式を使用してクエリの結果としてカラムをスキップすることができます。

引数

  • xtuple 関数、カラム、または要素のタプル。Tuple

返される値

  • なし。

入力テーブル:

┌─key─┬─v1─┬─v2─┬─v3─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 20 │ 40 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 65 │ 70 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 30 │ 20 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 12 │  7 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 50 │ 70 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴────┴────┴───────────┘

Tuple 型のカラムを untuple 関数パラメータとして使用する例:

クエリ:

SELECT untuple(v6) FROM kv;

結果:

┌─_ut_1─┬─_ut_2─┐
│    33 │ ab    │
│    44 │ cd    │
│    55 │ ef    │
│    66 │ gh    │
│    77 │ kl    │
└───────┴───────┘

EXCEPT 表現を使用する例:

クエリ:

SELECT untuple((* EXCEPT (v2, v3),)) FROM kv;

結果:

┌─key─┬─v1─┬─v4─┬─v5─┬─v6────────┐
│   1 │ 10 │ 30 │ 15 │ (33,'ab') │
│   2 │ 25 │ 40 │  6 │ (44,'cd') │
│   3 │ 57 │ 10 │  5 │ (55,'ef') │
│   4 │ 55 │ 80 │ 90 │ (66,'gh') │
│   5 │ 30 │ 25 │ 55 │ (77,'kl') │
└─────┴────┴────┴────┴───────────┘

参照

tupleHammingDistance

同じサイズの2つのタプル間の ハミング距離 を返します。

構文

tupleHammingDistance(tuple1, tuple2)

引数

  • tuple1 — 最初のタプル。Tuple
  • tuple2 — 第二のタプル。Tuple

タプルは同じ型の要素を持っている必要があります。

返される値

  • ハミング距離。
注記

結果の型は、入力タプルの要素数に基づいて 算術関数 の計算と同じ方法で計算されます。

SELECT
    toTypeName(tupleHammingDistance(tuple(0), tuple(0))) AS t1,
    toTypeName(tupleHammingDistance((0, 0), (0, 0))) AS t2,
    toTypeName(tupleHammingDistance((0, 0, 0), (0, 0, 0))) AS t3,
    toTypeName(tupleHammingDistance((0, 0, 0, 0), (0, 0, 0, 0))) AS t4,
    toTypeName(tupleHammingDistance((0, 0, 0, 0, 0), (0, 0, 0, 0, 0))) AS t5
┌─t1────┬─t2─────┬─t3─────┬─t4─────┬─t5─────┐
│ UInt8 │ UInt16 │ UInt32 │ UInt64 │ UInt64 │
└───────┴────────┴────────┴────────┴────────┘

クエリ:

SELECT tupleHammingDistance((1, 2, 3), (3, 2, 1)) AS HammingDistance;

結果:

┌─HammingDistance─┐
│               2 │
└─────────────────┘

MinHash 関数と共に、半重複文字列を検出するために使用できます:

SELECT tupleHammingDistance(wordShingleMinHash(string), wordShingleMinHashCaseInsensitive(string)) AS HammingDistance
FROM (SELECT 'ClickHouse is a column-oriented database management system for online analytical processing of queries.' AS string);

結果:

┌─HammingDistance─┐
│               2 │
└─────────────────┘

tupleToNameValuePairs

名前付きタプルを (name, value) ペアの配列に変換します。Tuple(a T, b T, ..., c T) の場合、Array(Tuple(String, T), ...) を返します。 ここで、Strings はタプルの名前付きフィールドを表し、T はこれらの名前に関連する値です。タプル内のすべての値は同じ型である必要があります。

構文

tupleToNameValuePairs(tuple)

引数

  • tuple — 名前付きタプル。Tuple で、任意の型の値を持つ。

返される値

クエリ:

CREATE TABLE tupletest (col Tuple(user_ID UInt64, session_ID UInt64)) ENGINE = Memory;

INSERT INTO tupletest VALUES (tuple( 100, 2502)), (tuple(1,100));

SELECT tupleToNameValuePairs(col) FROM tupletest;

結果:

┌─tupleToNameValuePairs(col)────────────┐
│ [('user_ID',100),('session_ID',2502)] │
│ [('user_ID',1),('session_ID',100)]    │
└───────────────────────────────────────┘

この関数を使用してカラムを行に変換することができます:

CREATE TABLE tupletest (col Tuple(CPU Float64, Memory Float64, Disk Float64)) ENGINE = Memory;

INSERT INTO tupletest VALUES(tuple(3.3, 5.5, 6.6));

SELECT arrayJoin(tupleToNameValuePairs(col)) FROM tupletest;

結果:

┌─arrayJoin(tupleToNameValuePairs(col))─┐
│ ('CPU',3.3)                           │
│ ('Memory',5.5)                        │
│ ('Disk',6.6)                          │
└───────────────────────────────────────┘

関数に単純なタプルを渡すと、ClickHouse は値のインデックスを名前として使用します:

SELECT tupleToNameValuePairs(tuple(3, 2, 1));

結果:

┌─tupleToNameValuePairs(tuple(3, 2, 1))─┐
│ [('1',3),('2',2),('3',1)]             │
└───────────────────────────────────────┘

tupleNames

タプルをカラム名の配列に変換します。Tuple(a T, b T, ...) 形式のタプルの場合、タプルの名前付きカラムを表す文字列の配列を返します。タプル要素に明示的な名前がない場合は、そのインデックスがカラム名として使用されます。

構文

tupleNames(tuple)

引数

  • tuple — 名前付きタプル。Tuple で、任意の型の値を持つ。

返される値

  • 文字列の配列。

タイプ: Array(Tuple(String, ...))。

クエリ:

CREATE TABLE tupletest (col Tuple(user_ID UInt64, session_ID UInt64)) ENGINE = Memory;

INSERT INTO tupletest VALUES (tuple(1, 2));

SELECT tupleNames(col) FROM tupletest;

結果:

┌─tupleNames(col)──────────┐
│ ['user_ID','session_ID'] │
└──────────────────────────┘

関数に単純なタプルを渡すと、ClickHouse はカラムのインデックスを名前として使用します:

SELECT tupleNames(tuple(3, 2, 1));

結果:

┌─tupleNames((3, 2, 1))─┐
│ ['1','2','3']         │
└───────────────────────┘

tuplePlus

同じサイズの2つのタプルの対応する値の合計を計算します。

構文

tuplePlus(tuple1, tuple2)

エイリアス: vectorSum

引数

  • tuple1 — 最初のタプル。Tuple
  • tuple2 — 第二のタプル。Tuple

返される値

  • 合計のタプル。Tuple

クエリ:

SELECT tuplePlus((1, 2), (2, 3));

結果:

┌─tuplePlus((1, 2), (2, 3))─┐
│ (3,5)                     │
└───────────────────────────┘

tupleMinus

同じサイズの2つのタプルの対応する値の減算を計算します。

構文

tupleMinus(tuple1, tuple2)

エイリアス: vectorDifference

引数

  • tuple1 — 最初のタプル。Tuple
  • tuple2 — 第二のタプル。Tuple

返される値

  • 減算結果のタプル。Tuple

クエリ:

SELECT tupleMinus((1, 2), (2, 3));

結果:

┌─tupleMinus((1, 2), (2, 3))─┐
│ (-1,-1)                    │
└────────────────────────────┘

tupleMultiply

同じサイズの2つのタプルの対応する値の乗算を計算します。

構文

tupleMultiply(tuple1, tuple2)

引数

  • tuple1 — 最初のタプル。Tuple
  • tuple2 — 第二のタプル。Tuple

返される値

  • 乗算のタプル。Tuple

クエリ:

SELECT tupleMultiply((1, 2), (2, 3));

結果:

┌─tupleMultiply((1, 2), (2, 3))─┐
│ (2,6)                         │
└───────────────────────────────┘

tupleDivide

同じサイズの2つのタプルの対応する値の除算を計算します。ゼロでの除算は inf を返します。

構文

tupleDivide(tuple1, tuple2)

引数

  • tuple1 — 最初のタプル。Tuple
  • tuple2 — 第二のタプル。Tuple

返される値

  • 除算結果のタプル。Tuple

クエリ:

SELECT tupleDivide((1, 2), (2, 3));

結果:

┌─tupleDivide((1, 2), (2, 3))─┐
│ (0.5,0.6666666666666666)    │
└─────────────────────────────┘

tupleNegate

タプルの値の否定を計算します。

構文

tupleNegate(tuple)

引数

返される値

  • 否定結果のタプル。Tuple

クエリ:

SELECT tupleNegate((1,  2));

結果:

┌─tupleNegate((1, 2))─┐
│ (-1,-2)             │
└─────────────────────┘

tupleMultiplyByNumber

すべての値を数値で乗算したタプルを返します。

構文

tupleMultiplyByNumber(tuple, number)

引数

返される値

  • 乗算された値のタプル。Tuple

クエリ:

SELECT tupleMultiplyByNumber((1, 2), -2.1);

結果:

┌─tupleMultiplyByNumber((1, 2), -2.1)─┐
│ (-2.1,-4.2)                         │
└─────────────────────────────────────┘

tupleDivideByNumber

すべての値を数値で除算したタプルを返します。ゼロでの除算は inf を返します。

構文

tupleDivideByNumber(tuple, number)

引数

返される値

  • 除算された値のタプル。Tuple

クエリ:

SELECT tupleDivideByNumber((1, 2), 0.5);

結果:

┌─tupleDivideByNumber((1, 2), 0.5)─┐
│ (2,4)                            │
└──────────────────────────────────┘

tupleConcat

引数として渡されたタプルを結合します。

tupleConcat(tuples)

引数

  • tuples – 任意の数の Tuple 型の引数。

SELECT tupleConcat((1, 2), (3, 4), (true, false)) AS res
┌─res──────────────────┐
│ (1,2,3,4,true,false) │
└──────────────────────┘

tupleIntDiv

分子のタプルと分母のタプルの整数除算を行い、商のタプルを返します。

構文

tupleIntDiv(tuple_num, tuple_div)

パラメータ

  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • tuple_div: 除数の値のタプル。Tuple の数値型。

返される値

  • tuple_numtuple_div の商のタプル。Tuple の整数値。

実装の詳細

  • tuple_num または tuple_div のいずれかに非整数値が含まれている場合、各非整数分子または除数を最も近い整数に丸めて結果が計算されます。
  • ゼロでの除算の場合、エラーが発生します。

クエリ:

SELECT tupleIntDiv((15, 10, 5), (5, 5, 5));

結果:

┌─tupleIntDiv((15, 10, 5), (5, 5, 5))─┐
│ (3,2,1)                             │
└─────────────────────────────────────┘

クエリ:

SELECT tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5));

結果:

┌─tupleIntDiv((15, 10, 5), (5.5, 5.5, 5.5))─┐
│ (2,1,0)                                   │
└───────────────────────────────────────────┘

tupleIntDivOrZero

tupleIntDiv と同様に、分子のタプルと分母のタプルの整数除算を行い、商のタプルを返します。0 の除数に対してはエラーをスローせず、商を 0 として返します。

構文

tupleIntDivOrZero(tuple_num, tuple_div)
  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • tuple_div: 除数の値のタプル。Tuple の数値型。

返される値

  • tuple_numtuple_div の商のタプル。Tuple の整数値。
  • 除数が 0 の場合は商を 0 として返します。

実装の詳細

  • tuple_num または tuple_div のいずれかに非整数値が含まれている場合、tupleIntDiv と同様に、各非整数分子または除数を最も近い整数に丸めて結果が計算されます。

クエリ:

SELECT tupleIntDivOrZero((5, 10, 15), (0, 0, 0));

結果:

┌─tupleIntDivOrZero((5, 10, 15), (0, 0, 0))─┐
│ (0,0,0)                                   │
└───────────────────────────────────────────┘

tupleIntDivByNumber

指定された除数で分子のタプルの整数除算を行い、商のタプルを返します。

構文

tupleIntDivByNumber(tuple_num, div)

パラメータ

  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • div: 除数の値。Numeric 型。

返される値

  • tuple_numdiv の商のタプル。Tuple の整数値。

実装の詳細

  • tuple_num または div に非整数値が含まれている場合、各非整数分子または除数を最も近い整数に丸めて結果を計算します。
  • ゼロでの除算の場合、エラーが発生します。

クエリ:

SELECT tupleIntDivByNumber((15, 10, 5), 5);

結果:

┌─tupleIntDivByNumber((15, 10, 5), 5)─┐
│ (3,2,1)                             │
└─────────────────────────────────────┘

クエリ:

SELECT tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8);

結果:

┌─tupleIntDivByNumber((15.2, 10.7, 5.5), 5.8)─┐
│ (2,1,0)                                     │
└─────────────────────────────────────────────┘

tupleIntDivOrZeroByNumber

tupleIntDivByNumber と同様に、指定された除数で分子のタプルの整数除算を行い、商のタプルを返します。0 の除数に対してはエラーをスローせず、商を 0 として返します。

構文

tupleIntDivOrZeroByNumber(tuple_num, div)

パラメータ

  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • div: 除数の値。Numeric 型。

返される値

  • tuple_numdiv の商のタプル。Tuple の整数値。
  • 除数が 0 の場合は商を 0 として返します。

実装の詳細

  • tuple_num または div に非整数値が含まれている場合、tupleIntDivByNumber と同様に、各非整数分子または除数を最も近い整数に丸めて結果を計算します。

クエリ:

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 5);

結果:

┌─tupleIntDivOrZeroByNumber((15, 10, 5), 5)─┐
│ (3,2,1)                                   │
└───────────────────────────────────────────┘

クエリ:

SELECT tupleIntDivOrZeroByNumber((15, 10, 5), 0)

結果:

┌─tupleIntDivOrZeroByNumber((15, 10, 5), 0)─┐
│ (0,0,0)                                   │
└───────────────────────────────────────────┘

tupleModulo

2つのタプルの除算操作の剰余(余り)のタプルを返します。

構文

tupleModulo(tuple_num, tuple_mod)

パラメータ

  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • tuple_div: 除数の値のタプル。Tuple の数値型。

返される値

  • tuple_numtuple_div の剰余のタプル。Tuple の非ゼロ整数値。
  • ゼロでの除算に対してエラーがスローされます。

クエリ:

SELECT tupleModulo((15, 10, 5), (5, 3, 2));

結果:

┌─tupleModulo((15, 10, 5), (5, 3, 2))─┐
│ (0,1,1)                             │
└─────────────────────────────────────┘

tupleModuloByNumber

タプルと指定された除数の除算操作の剰余(余り)のタプルを返します。

構文

tupleModuloByNumber(tuple_num, div)

パラメータ

  • tuple_num: 分子の値のタプル。Tuple の数値型。
  • div: 除数の値。Numeric 型。

返される値

  • tuple_numdiv の剰余のタプル。Tuple の非ゼロ整数値。
  • ゼロでの除算に対してエラーがスローされます。

クエリ:

SELECT tupleModuloByNumber((15, 10, 5), 2);

結果:

┌─tupleModuloByNumber((15, 10, 5), 2)─┐
│ (1,0,1)                             │
└─────────────────────────────────────┘

flattenTuple

ネストされた名付き input タプルから平坦な output タプルを返します。output タプルの要素は、元の input タプルからのパスです。例えば: Tuple(a Int, Tuple(b Int, c Int)) -> Tuple(a Int, b Int, c Int)flattenTuple は、型 Object からのすべてのパスを個別のカラムとして選択するために使用できます。

構文

flattenTuple(input)

パラメータ

  • input: 平坦化するネストされた名付きタプル。Tuple

返される値

  • 元の input からのパスを持つ output タプル。Tuple

クエリ:

CREATE TABLE t_flatten_tuple(t Tuple(t1 Nested(a UInt32, s String), b UInt32, t2 Tuple(k String, v UInt32))) ENGINE = Memory;
INSERT INTO t_flatten_tuple VALUES (([(1, 'a'), (2, 'b')], 3, ('c', 4)));
SELECT flattenTuple(t) FROM t_flatten_tuple;

結果:

┌─flattenTuple(t)───────────┐
│ ([1,2],['a','b'],3,'c',4) │
└───────────────────────────┘

Distance functions

すべてのサポートされている関数は distance functions documentation に記載されています。