23 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/sql-reference/functions/tuple-functions | 180 | タプル |
tuple
複数のカラムをグループ化するための関数です。
タイプ T1, T2, ... を持つカラム C1, C2, ... に対して、それらの名前がユニークでアンコーテッド識別子として扱える場合、Tuple(C1 T1, C2 T2, ...)
型の名前付きタプルを返し、そうでない場合は Tuple(T1, T2, ...)
を返します。この関数を実行する際のコストはありません。
通常、タプルはIN演算子の引数としての中間値、またはラムダ関数の形式パラメータリストを作成するために使用されます。タプルはテーブルに書き込むことはできません。
この関数は演算子 (x, y, ...)
を実装しています。
構文
tuple(x, y, ...)
tupleElement
タプルからカラムを取得するための関数です。
第2引数が数値 index
の場合、それは1から始まるカラムインデックスです。第2引数が文字列 name
の場合、それは要素の名前を表します。また、第2引数が範囲外の場合や名前に対応する要素が存在しない場合にデフォルト値を返す第3のオプション引数を指定することができます。提供された場合、第2および第3の引数は定数でなければなりません。この関数を実行するコストはありません。
この関数はオペレータ x.index
および x.name
を実装しています。
構文
tupleElement(tuple, index, [, default_value])
tupleElement(tuple, name, [, default_value])
untuple
tuple要素を呼び出し位置での文法置換を行います。
結果のカラムの名前は実装固有であり、変更される可能性があります。untuple
の後に特定のカラム名を仮定しないでください。
構文
untuple(x)
EXCEPT
式を使用して、クエリの結果としてカラムをスキップすることができます。
引数
x
—tuple
関数、カラム、または要素のタプル。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)
引数
タプルは同様の型の要素を持たなければなりません。
返される値
- ハミング距離。
:::note 結果タイプは算術関数の場合と同様に、入力タプルの要素数に基づいて計算されます。 :::
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
名前付きタプルを(名前, 値)ペアの配列に変換します。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 型で、任意のタイプの値を持つ。
返される値
- 文字列の配列。
例
クエリ:
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
.
引数
返される値
- 合計のタプル。Tuple。
例
クエリ:
SELECT tuplePlus((1, 2), (2, 3));
結果:
┌─tuplePlus((1, 2), (2, 3))─┐
│ (3,5) │
└───────────────────────────┘
tupleMinus
同サイズの2つのタプルの対応する値から引き算した値を計算します。
構文
tupleMinus(tuple1, tuple2)
別名: vectorDifference
.
引数
返される値
- 引き算の結果のタプル。Tuple。
例
クエリ:
SELECT tupleMinus((1, 2), (2, 3));
結果:
┌─tupleMinus((1, 2), (2, 3))─┐
│ (-1,-1) │
└────────────────────────────┘
tupleMultiply
同サイズの2つのタプルの対応する値の掛け算を計算します。
構文
tupleMultiply(tuple1, tuple2)
引数
返される値
- 掛け算の結果のタプル。Tuple。
例
クエリ:
SELECT tupleMultiply((1, 2), (2, 3));
結果:
┌─tupleMultiply((1, 2), (2, 3))─┐
│ (2,6) │
└───────────────────────────────┘
tupleDivide
同サイズの2つのタプルの対応する値の割り算を計算します。ゼロでの割り算はinf
を返すことに注意してください。
構文
tupleDivide(tuple1, tuple2)
引数
返される値
- 割り算の結果のタプル。Tuple。
例
クエリ:
SELECT tupleDivide((1, 2), (2, 3));
結果:
┌─tupleDivide((1, 2), (2, 3))─┐
│ (0.5,0.6666666666666666) │
└─────────────────────────────┘
tupleNegate
タプルの値の否定を計算します。
構文
tupleNegate(tuple)
引数
tuple
— 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_div
の商のタプル。Tuple of integer values。
実装の詳細
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_div
の商のタプル。 Tuple of integer values。- 除数が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
とdiv
の商のタプル。 Tuple of integer values。
実装の詳細
tuple_num
またはdiv
のいずれかが非整数値を含む場合、結果は各非整数の分子または除数を最も近い整数に丸めて計算されます。- 0での除算にはエラーがスローされます。
例
クエリ:
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
とdiv
の商のタプル。 Tuple of integer values。- 除数が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_div
の余りのタプル。Tuple of non-zero integer values。- ゼロでの除算にはエラーがスローされます。
例
クエリ:
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
とdiv
の余りのタプル。Tuple of non-zero integer values。- ゼロでの除算にはエラーがスローされます。
例
クエリ:
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) │
└───────────────────────────┘
距離関数
すべてのサポートされている関数は距離関数のドキュメントで説明されています。