mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-14 02:12:21 +00:00
3107 lines
80 KiB
Markdown
3107 lines
80 KiB
Markdown
---
|
||
slug: /ja/sql-reference/functions/array-functions
|
||
sidebar_position: 10
|
||
sidebar_label: Arrays
|
||
---
|
||
|
||
# Array Functions
|
||
|
||
## empty {#empty}
|
||
|
||
入力配列が空であるかをチェックします。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
empty([x])
|
||
```
|
||
|
||
配列は、要素が含まれていない場合に空とみなされます。
|
||
|
||
:::note
|
||
[`optimize_functions_to_subcolumns` 設定](../../operations/settings/settings.md#optimize-functions-to-subcolumns) を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、この関数は配列全体のカラムを読み込んで処理するのではなく、[size0](../data-types/array.md#array-size) サブカラムのみを読み込みます。クエリ `SELECT empty(arr) FROM TABLE;` は `SELECT arr.size0 = 0 FROM TABLE;` に変換されます。
|
||
:::
|
||
|
||
この関数は、[文字列](string-functions.md#empty)や[UUID](uuid-functions.md#empty)に対しても動作します。
|
||
|
||
**引数**
|
||
|
||
- `[x]` — 入力配列。 [Array](../data-types/array.md)。
|
||
|
||
**戻り値**
|
||
|
||
- 空の配列には `1`、非空の配列には `0` を返します。 [UInt8](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT empty([]);
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─empty(array())─┐
|
||
│ 1 │
|
||
└────────────────┘
|
||
```
|
||
|
||
## notEmpty {#notempty}
|
||
|
||
入力配列が空でないかをチェックします。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
notEmpty([x])
|
||
```
|
||
|
||
配列は、少なくとも1つの要素が含まれている場合に空でないとみなされます。
|
||
|
||
:::note
|
||
[optimize_functions_to_subcolumns](../../operations/settings/settings.md#optimize-functions-to-subcolumns) 設定を有効にすることで最適化できます。`optimize_functions_to_subcolumns = 1` の場合、この関数は配列全体のカラムを読み込んで処理するのではなく、[size0](../data-types/array.md#array-size) サブカラムのみを読み込みます。クエリ `SELECT notEmpty(arr) FROM table` は `SELECT arr.size0 != 0 FROM TABLE;` に変換されます。
|
||
:::
|
||
|
||
この関数は、[文字列](string-functions.md#notempty)や[UUID](uuid-functions.md#notempty)に対しても動作します。
|
||
|
||
**引数**
|
||
|
||
- `[x]` — 入力配列。 [Array](../data-types/array.md)。
|
||
|
||
**戻り値**
|
||
|
||
- 非空の配列には `1`、空の配列には `0` を返します。 [UInt8](../data-types/int-uint.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT notEmpty([1,2]);
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─notEmpty([1, 2])─┐
|
||
│ 1 │
|
||
└──────────────────┘
|
||
```
|
||
|
||
## length
|
||
|
||
配列の項目数を返します。
|
||
結果の型は UInt64 です。
|
||
文字列でも動作します。
|
||
|
||
`optimize_functions_to_subcolumns` 設定を有効にすると、配列全体のカラムを読み込んで処理する代わりに、[size0](../data-types/array.md#array-size) サブカラムのみを読み込みます。クエリ `SELECT length(arr) FROM table` は `SELECT arr.size0 FROM TABLE` に変換されます。
|
||
|
||
エイリアス: `OCTET_LENGTH`
|
||
|
||
## emptyArrayUInt8
|
||
|
||
空の UInt8 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayUInt8()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayUInt8();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayUInt16
|
||
|
||
空の UInt16 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayUInt16()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayUInt16();
|
||
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayUInt32
|
||
|
||
空の UInt32 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayUInt32()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayUInt32();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayUInt64
|
||
|
||
空の UInt64 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayUInt64()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayUInt64();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayInt8
|
||
|
||
空の Int8 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayInt8()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayInt8();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayInt16
|
||
|
||
空の Int16 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayInt16()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayInt16();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayInt32
|
||
|
||
空の Int32 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayInt32()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayInt32();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayInt64
|
||
|
||
空の Int64 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayInt64()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayInt64();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayFloat32
|
||
|
||
空の Float32 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayFloat32()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayFloat32();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayFloat64
|
||
|
||
空の Float64 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayFloat64()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayFloat64();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayDate
|
||
|
||
空の Date 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayDate()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayDate();
|
||
```
|
||
|
||
## emptyArrayDateTime
|
||
|
||
空の DateTime 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
[]
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayDateTime();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayString
|
||
|
||
空の String 配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
emptyArrayString()
|
||
```
|
||
|
||
**引数**
|
||
|
||
なし。
|
||
|
||
**戻り値**
|
||
|
||
空の配列。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT emptyArrayString();
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[]
|
||
```
|
||
|
||
## emptyArrayToSingle
|
||
|
||
空の配列を受け取り、デフォルト値と等しい1要素の配列を返します。
|
||
|
||
## range(end), range(\[start, \] end \[, step\])
|
||
|
||
`start`から`end - 1`までの数値を`step`で増加する配列を返します。サポートされる型は[UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64](../data-types/int-uint.md)です。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
range([start, ] end [, step])
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `start` — 配列の最初の要素。`step`を使用する場合は必須です。デフォルト値: 0。
|
||
- `end` — 配列が構築される前の数。必須。
|
||
- `step` — 配列内の各要素間の増加ステップを決定する。オプション。デフォルト値: 1。
|
||
|
||
**戻り値**
|
||
|
||
- `start`から`end - 1`までの数値を`step`で増加する配列。
|
||
|
||
**実装の詳細**
|
||
|
||
- すべての引数`start`、`end`、`step`は以下のデータ型でなければなりません: `UInt8`, `UInt16`, `UInt32`, `UInt64`,`Int8`, `Int16`, `Int32`, `Int64`。返される配列の要素の型はすべての引数のスーパー型です。
|
||
- クエリが[function_range_max_elements_in_block](../../operations/settings/settings.md#function_range_max_elements_in_block)設定で指定された以上の要素数の配列を返す場合、例外がスローされます。
|
||
- 任意の引数がNullable(Nothing)型の場合、`NULL`を返します。任意の引数がNull値を持つ場合は例外をスローします(Nullable(T)型)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT range(5), range(1, 5), range(1, 5, 2), range(-1, 5, 2);
|
||
```
|
||
|
||
結果:
|
||
|
||
```txt
|
||
┌─range(5)────┬─range(1, 5)─┬─range(1, 5, 2)─┬─range(-1, 5, 2)─┐
|
||
│ [0,1,2,3,4] │ [1,2,3,4] │ [1,3] │ [-1,1,3] │
|
||
└─────────────┴─────────────┴────────────────┴─────────────────┘
|
||
```
|
||
|
||
## array(x1, ...), operator \[x1, ...\]
|
||
|
||
関数の引数から配列を作成します。
|
||
引数は定数であり、すべての共通の型を持つタイプでなければなりません。どのタイプの配列を作成すべきか不明なため、少なくとも1つの引数を渡す必要があります。つまり、この関数を使用して空の配列を作成することはできません(上記で説明された 'emptyArray\*' 関数を使用してください)。
|
||
‘Array(T)’ 型の結果を返します。ここで ‘T’ は渡された引数の最小共通型です。
|
||
|
||
## arrayWithConstant(length, elem)
|
||
|
||
長さ `length` の配列を生成し、定数 `elem` で満たします。
|
||
|
||
## arrayConcat
|
||
|
||
引数として渡された配列を結合します。
|
||
|
||
``` sql
|
||
arrayConcat(arrays)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arrays` – 任意の数の [Array](../data-types/array.md) 型の引数。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayConcat([1, 2], [3, 4], [5, 6]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [1,2,3,4,5,6] │
|
||
└───────────────┘
|
||
```
|
||
|
||
## arrayElement(arr, n), operator arr\[n\]
|
||
|
||
配列 `arr` のインデックス `n` の要素を取得します。`n` は任意の整数型である必要があります。
|
||
配列のインデックスは1から始まります。
|
||
|
||
負のインデックスもサポートされています。この場合、配列の末尾から対応する要素を選択します。たとえば、`arr[-1]` は配列の最後の項目です。
|
||
|
||
インデックスが配列の範囲外になる場合、非定数配列と定数インデックス0の場合を除いて、デフォルト値(数値の場合は0、文字列の場合は空文字列など)が返されます(この場合、「Array indices are 1-based」というエラーが発生します)。
|
||
|
||
## has(arr, elem)
|
||
|
||
`arr` 配列が `elem` 要素を持っているかをチェックします。
|
||
配列に要素がない場合は0、ある場合は1を返します。
|
||
|
||
`NULL`は値として処理されます。
|
||
|
||
``` sql
|
||
SELECT has([1, 2, NULL], NULL)
|
||
```
|
||
|
||
``` text
|
||
┌─has([1, 2, NULL], NULL)─┐
|
||
│ 1 │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
## arrayElementOrNull(arr, n)
|
||
|
||
配列 `arr` のインデックス `n` の要素を取得します。`n` は任意の整数型である必要があります。
|
||
配列のインデックスは1から始まります。
|
||
|
||
負のインデックスもサポートされており、この場合、配列の末尾から対応する要素を選択します。たとえば、`arr[-1]` は配列の最後の項目です。
|
||
|
||
インデックスが配列の範囲外になる場合、デフォルト値の代わりに `NULL` を返します。
|
||
|
||
### 例
|
||
|
||
``` sql
|
||
SELECT arrayElementOrNull([1, 2, 3], 2), arrayElementOrNull([1, 2, 3], 4)
|
||
```
|
||
|
||
``` text
|
||
┌─arrayElementOrNull([1, 2, 3], 2)─┬─arrayElementOrNull([1, 2, 3], 4)─┐
|
||
│ 2 │ ᴺᵁᴸᴸ │
|
||
└──────────────────────────────────┴──────────────────────────────────┘
|
||
```
|
||
|
||
## hasAll {#hasall}
|
||
|
||
ある配列が別の配列の部分集合であるかをチェックします。
|
||
|
||
``` sql
|
||
hasAll(set, subset)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `set` – 要素のセットを持つ任意のタイプの配列。
|
||
- `subset` – `set`との共通スーパータイプを共有する要素を持つ任意のタイプの配列で、`set` の部分集合であることがテストされるべき要素を含んでいます。
|
||
|
||
**戻り値**
|
||
|
||
- `subset` のすべての要素が `set` に含まれている場合は`1`を返します。
|
||
- それ以外の場合は`0`を返します。
|
||
|
||
集合と部分集合の要素が共通スーパータイプを持たない場合、例外 `NO_COMMON_TYPE` が発生します。
|
||
|
||
**特殊特性**
|
||
|
||
- 空の配列は任意の配列の部分集合です。
|
||
- `Null`は値として処理されます。
|
||
- 両方の配列における値の順序は関係ありません。
|
||
|
||
**例**
|
||
|
||
`SELECT hasAll([], [])` は1を返します。
|
||
|
||
`SELECT hasAll([1, Null], [Null])` は1を返します。
|
||
|
||
`SELECT hasAll([1.0, 2, 3, 4], [1, 3])` は1を返します。
|
||
|
||
`SELECT hasAll(['a', 'b'], ['a'])` は1を返します。
|
||
|
||
`SELECT hasAll([1], ['a'])` は`NO_COMMON_TYPE`例外を発生させます。
|
||
|
||
`SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [3, 5]])` は0を返します。
|
||
|
||
## hasAny {#hasany}
|
||
|
||
2つの配列がいくつかの要素で交差しているかをチェックします。
|
||
|
||
``` sql
|
||
hasAny(array1, array2)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array1` – 要素のセットを持つ任意のタイプの配列。
|
||
- `array2` – `array1`との共通スーパータイプを共有する任意のタイプの配列。
|
||
|
||
**戻り値**
|
||
|
||
- `array1` と `array2` の間に少なくとも一つの共通要素がある場合、`1`を返します。
|
||
- それ以外の場合は`0`を返します。
|
||
|
||
`array1` と `array2` の要素が共通スーパータイプを共有しない場合、例外 `NO_COMMON_TYPE` が発生します。
|
||
|
||
**特殊特性**
|
||
|
||
- `Null`は値として処理されます。
|
||
- 両方の配列における値の順序は関係ありません。
|
||
|
||
**例**
|
||
|
||
`SELECT hasAny([1], [])` は `0` を返します。
|
||
|
||
`SELECT hasAny([Null], [Null, 1])` は `1` を返します。
|
||
|
||
`SELECT hasAny([-128, 1., 512], [1])` は `1` を返します。
|
||
|
||
`SELECT hasAny([[1, 2], [3, 4]], ['a', 'c'])` は `NO_COMMON_TYPE` 例外を発生させます。
|
||
|
||
`SELECT hasAll([[1, 2], [3, 4]], [[1, 2], [1, 2]])` は `1` を返します。
|
||
|
||
## hasSubstr
|
||
|
||
array2 の全要素が array1 に同じ順序で現れるかを確認します。したがって、関数は、かつ `array1 = prefix + array2 + suffix` である場合にのみ 1 を返します。
|
||
|
||
``` sql
|
||
hasSubstr(array1, array2)
|
||
```
|
||
|
||
言い換えれば、関数は`array2`のすべての要素が`array1`に含まれているかをチェックします。この場合、`hasAll` 関数のように、`array1` と `array2` の両方における要素は同じ順序にある必要があります。
|
||
|
||
例:
|
||
|
||
- `hasSubstr([1,2,3,4], [2,3])` は1を返しますが、`hasSubstr([1,2,3,4], [3,2])` は`0`を返します。
|
||
- `hasSubstr([1,2,3,4], [1,2,3])` は1を返しますが、`hasSubstr([1,2,3,4], [1,2,4])` は`0`を返します。
|
||
|
||
**引数**
|
||
|
||
- `array1` – 要素のセットを持つ任意のタイプの配列。
|
||
- `array2` – 任意のタイプの配列。
|
||
|
||
**戻り値**
|
||
|
||
- `array1` が `array2` を含む場合、`1`を返します。
|
||
- それ以外の場合は`0`を返します。
|
||
|
||
`array1` と `array2` の要素が共通スーパータイプを共有しない場合、例外 `NO_COMMON_TYPE` が発生します。
|
||
|
||
**特殊特性**
|
||
|
||
- 関数は `array2` が空の場合、`1` を返します。
|
||
- `Null`は値として処理されます。たとえば、`hasSubstr([1, 2, NULL, 3, 4], [2,3])` は `0` を返しますが、`hasSubstr([1, 2, NULL, 3, 4], [2,NULL,3])` は `1` を返します。
|
||
- 両配列の値の順序は重要です。
|
||
|
||
**例**
|
||
|
||
`SELECT hasSubstr([], [])` returns 1.
|
||
|
||
`SELECT hasSubstr([1, Null], [Null])` returns 1.
|
||
|
||
`SELECT hasSubstr([1.0, 2, 3, 4], [1, 3])` returns 0.
|
||
|
||
`SELECT hasSubstr(['a', 'b'], ['a'])` returns 1.
|
||
|
||
`SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'b'])` returns 1.
|
||
|
||
`SELECT hasSubstr(['a', 'b' , 'c'], ['a', 'c'])` returns 0.
|
||
|
||
`SELECT hasSubstr([[1, 2], [3, 4], [5, 6]], [[1, 2], [3, 4]])` returns 1.
|
||
|
||
`SELECT hasSubstr([1, 2, NULL, 3, 4], ['a'])` raises a `NO_COMMON_TYPE` exception.
|
||
|
||
|
||
## indexOf(arr, x)
|
||
|
||
配列に'x'要素が含まれる場合、その最初のインデックスを返し、そうでない場合は0を返します。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT indexOf([1, 3, NULL, NULL], NULL)
|
||
```
|
||
|
||
``` text
|
||
┌─indexOf([1, 3, NULL, NULL], NULL)─┐
|
||
│ 3 │
|
||
└───────────────────────────────────┘
|
||
```
|
||
|
||
`NULL` に設定された要素は通常の値として扱われます。
|
||
|
||
## arrayCount(\[func,\] arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外の値を返す要素の数を返します。`func` が指定されていない場合、配列内の0以外の要素の数を返します。
|
||
|
||
`arrayCount`は[高次関数](../../sql-reference/functions/index.md#higher-order-functions)です。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
## arrayDotProduct
|
||
|
||
2つの配列のドット積を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayDotProduct(vector1, vector2)
|
||
```
|
||
|
||
エイリアス: `scalarProduct`, `dotProduct`
|
||
|
||
**パラメータ**
|
||
|
||
- `vector1`: 最初のベクトル。 [Array](../data-types/array.md) または [Tuple](../data-types/tuple.md) の数値値。
|
||
- `vector2`: 二番目のベクトル。[Array](../data-types/array.md) または [Tuple](../data-types/tuple.md) の数値値。
|
||
|
||
:::note
|
||
2つのベクトルのサイズは等しくなければなりません。配列とタプルは混在した要素タイプを含んでいることもあります。
|
||
:::
|
||
|
||
**戻り値**
|
||
|
||
- 2つのベクトルのドット積。 [Numeric](https://clickhouse.com/docs/ja/native-protocol/columns#numeric-types)。
|
||
|
||
:::note
|
||
戻りの型は引数の型によって決まります。配列またはタプルが混在した要素タイプを含む場合、結果の型はスーパータイプです。
|
||
:::
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayDotProduct([1, 2, 3], [4, 5, 6]) AS res, toTypeName(res);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
32 UInt16
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT dotProduct((1::UInt16, 2::UInt8, 3::Float32),(4::Int16, 5::Float32, 6::UInt8)) AS res, toTypeName(res);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
32 Float64
|
||
```
|
||
|
||
## countEqual(arr, x)
|
||
|
||
配列内のxと等しい要素の数を返します。`arrayCount (elem -> elem = x, arr)`と等価です。
|
||
|
||
`NULL`要素は別の値として扱われます。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT countEqual([1, 2, NULL, NULL], NULL)
|
||
```
|
||
|
||
``` text
|
||
┌─countEqual([1, 2, NULL, NULL], NULL)─┐
|
||
│ 2 │
|
||
└──────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayEnumerate(arr)
|
||
|
||
配列\[1, 2, 3, ..., length (arr)\]を返します。
|
||
|
||
この関数は通常、ARRAY JOIN で使用されます。それは ARRAY JOIN を適用した後に各配列に対してちょうど一度何かをカウントすることを可能にします。例:
|
||
|
||
``` sql
|
||
SELECT
|
||
count() AS Reaches,
|
||
countIf(num = 1) AS Hits
|
||
FROM test.hits
|
||
ARRAY JOIN
|
||
GoalsReached,
|
||
arrayEnumerate(GoalsReached) AS num
|
||
WHERE CounterID = 160656
|
||
LIMIT 10
|
||
```
|
||
|
||
``` text
|
||
┌─Reaches─┬──Hits─┐
|
||
│ 95606 │ 31406 │
|
||
└─────────┴───────┘
|
||
```
|
||
|
||
この例では、Reaches はコンバージョンの数(ARRAY JOIN を適用した後に受け取った文字列)、Hits はページビューの数(ARRAY JOIN の前の文字列)です。この特定のケースでは、次の簡単な方法で同じ結果を得ることができます:
|
||
|
||
``` sql
|
||
SELECT
|
||
sum(length(GoalsReached)) AS Reaches,
|
||
count() AS Hits
|
||
FROM test.hits
|
||
WHERE (CounterID = 160656) AND notEmpty(GoalsReached)
|
||
```
|
||
|
||
``` text
|
||
┌─Reaches─┬──Hits─┐
|
||
│ 95606 │ 31406 │
|
||
└─────────┴───────┘
|
||
```
|
||
|
||
この関数は高次関数でも使用できます。例えば、条件に一致する要素の配列インデックスを取得するために使用できます。
|
||
|
||
## arrayEnumerateUniq(arr, ...)
|
||
|
||
ソース配列と同じサイズの配列を返し、各要素がその値と同じ別の要素の中で初めて出現する位置を示します。
|
||
例: arrayEnumerateUniq([10, 20, 10, 30]) = [1, 1, 2, 1]。
|
||
|
||
この関数は ARRAY JOIN でネストされたデータ構造と配列要素のさらなる集約を行う際に役立ちます。
|
||
例:
|
||
|
||
``` sql
|
||
SELECT
|
||
Goals.ID AS GoalID,
|
||
sum(Sign) AS Reaches,
|
||
sumIf(Sign, num = 1) AS Visits
|
||
FROM test.visits
|
||
ARRAY JOIN
|
||
Goals,
|
||
arrayEnumerateUniq(Goals.ID) AS num
|
||
WHERE CounterID = 160656
|
||
GROUP BY GoalID
|
||
ORDER BY Reaches DESC
|
||
LIMIT 10
|
||
```
|
||
|
||
``` text
|
||
┌──GoalID─┬─Reaches─┬─Visits─┐
|
||
│ 53225 │ 3214 │ 1097 │
|
||
│ 2825062 │ 3188 │ 1097 │
|
||
│ 56600 │ 2803 │ 488 │
|
||
│ 1989037 │ 2401 │ 365 │
|
||
│ 2830064 │ 2396 │ 910 │
|
||
│ 1113562 │ 2372 │ 373 │
|
||
│ 3270895 │ 2262 │ 812 │
|
||
│ 1084657 │ 2262 │ 345 │
|
||
│ 56599 │ 2260 │ 799 │
|
||
│ 3271094 │ 2256 │ 812 │
|
||
└─────────┴─────────┴────────┘
|
||
```
|
||
|
||
この例では、各ゴールIDについて、コンバージョンの数(ネストされたGoalsデータ構造中の各要素が到達したゴールであることを示す)、およびセッションの数が計算されています。ARRAY JOIN を使用しない場合、sum(Sign) としてセッションの数を数えます。しかし、この特定のケースでは、ネストされた Goals 構造によって行が増幅され、これをカウント後に一度行うために、関数 arrayEnumerateUniq(Goals.ID) の値に条件を適用します。
|
||
|
||
The arrayEnumerateUniq function can take multiple arrays of the same size as arguments. In this case, uniqueness is considered for tuples of elements in the same positions in all the arrays.
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateUniq([1, 1, 1, 2, 2, 2], [1, 1, 2, 1, 1, 2]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [1,2,1,1,2,1] │
|
||
└───────────────┘
|
||
```
|
||
|
||
This is necessary when using ARRAY JOIN with a nested data structure and further aggregation across multiple elements in this structure.
|
||
|
||
## arrayEnumerateUniqRanked
|
||
|
||
ソース配列と同じサイズの配列を返し、各要素の初めての出現を要素の値と同じ位置の要素において示します。多次元配列を列挙し、配列のどの深さまで見ていくかを指定することができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayEnumerateUniqRanked(clear_depth, arr, max_array_depth)
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `clear_depth`: 指定されたレベルで要素を個別に列挙します。`max_arr_depth` 以下の正の整数。
|
||
- `arr`: 列挙される N 次元配列。[Array](../data-types/array.md)。
|
||
- `max_array_depth`: 有効な最大深度。`arr` の深さ以下の正の整数。
|
||
|
||
**例**
|
||
|
||
`clear_depth=1`および`max_array_depth=1`では、`arrayEnumerateUniq`で同じ配列を指定した場合と同じ結果を返します。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateUniqRanked(1, [1,2,1], 1);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[1,1,2]
|
||
```
|
||
|
||
この例では、`arrayEnumerateUniqRanked`を使用して、多次元配列の各要素が同じ値を持つ要素の中で最初に出現する位置を示す配列を取得します。提供された配列の1行目`[1,2,3]`に対して、対応する結果は`[1,1,1]`で、これは`1`,`2`, `3`が初めて発見されたことを示します。提供された配列の2行目`[2,2,1]`に対して、結果の対応する結果は`[2,3,3]`で、`2`が二度目と三度目に出現したこと、`1` が二度目に出現したことを示します。同様に、提供された配列の三行目 `[3]` に対する結果は `[2]` という結果が続きます。それは `3` が二度目に出現したことを示します。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateUniqRanked(1, [[1,2,3],[2,2,1],[3]], 2);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[[1,1,1],[2,3,2],[2]]
|
||
```
|
||
|
||
`clear_depth=2`に変更すると、各行が別々に列挙されます。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateUniqRanked(2, [[1,2,3],[2,2,1],[3]], 2);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[[1,1,1],[1,2,1],[1]]
|
||
```
|
||
|
||
## arrayPopBack
|
||
|
||
配列から最後の項目を削除します。
|
||
|
||
``` sql
|
||
arrayPopBack(array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – 配列。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayPopBack([1, 2, 3]) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───┐
|
||
│ [1,2] │
|
||
└───────┘
|
||
```
|
||
|
||
## arrayPopFront
|
||
|
||
配列から最初の項目を削除します。
|
||
|
||
``` sql
|
||
arrayPopFront(array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – 配列。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayPopFront([1, 2, 3]) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───┐
|
||
│ [2,3] │
|
||
└───────┘
|
||
```
|
||
|
||
## arrayPushBack
|
||
|
||
配列の末尾に1つの項目を追加します。
|
||
|
||
``` sql
|
||
arrayPushBack(array, single_value)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – 配列。
|
||
- `single_value` – 一つの値。配列に数値がある場合は数値のみ、文字列がある場合は文字列のみを追加できます。数値を追加する際、ClickHouseは自動的に`single_value`の型を配列のデータ型に設定します。ClickHouseにおけるデータ型についての詳細は、"[データ型](../data-types/index.md#data_types)"を参照してください。`NULL` を使用することができます。この関数は配列に`NULL`要素を追加し、配列要素の型を`Nullable`に変換します。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayPushBack(['a'], 'b') AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───────┐
|
||
│ ['a','b'] │
|
||
└───────────┘
|
||
```
|
||
|
||
## arrayPushFront
|
||
|
||
配列の先頭に1つの要素を追加します。
|
||
|
||
``` sql
|
||
arrayPushFront(array, single_value)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – 配列。
|
||
- `single_value` – 一つの値。配列に数値がある場合は数値のみ、文字列がある場合は文字列のみを追加できます。数値を追加する際、ClickHouseは自動的に`single_value`の型を配列のデータ型に設定します。ClickHouseにおけるデータ型についての詳細は、"[データ型](../data-types/index.md#data_types)"を参照してください。`NULL` を使用することができます。この関数は配列に`NULL`要素を追加し、配列要素の型を`Nullable`に変換します。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayPushFront(['b'], 'a') AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───────┐
|
||
│ ['a','b'] │
|
||
└───────────┘
|
||
```
|
||
|
||
## arrayResize
|
||
|
||
配列の長さを変更します。
|
||
|
||
``` sql
|
||
arrayResize(array, size[, extender])
|
||
```
|
||
|
||
**引数:**
|
||
|
||
- `array` — 配列。
|
||
- `size` — 配列の必要な長さ。
|
||
- `size` が元の配列のサイズより小さい場合、配列は右から切り捨てられます。
|
||
- `size` が配列の初期サイズより大きい場合、配列は右に`extender`の値または配列要素のデータ型のデフォルト値で拡張されます。
|
||
- `extender` — 配列を拡張するための値。`NULL` を指定できます。
|
||
|
||
**戻り値:**
|
||
|
||
長さが `size` の配列。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayResize([1], 3);
|
||
```
|
||
|
||
``` text
|
||
┌─arrayResize([1], 3)─┐
|
||
│ [1,0,0] │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
``` sql
|
||
SELECT arrayResize([1], 3, NULL);
|
||
```
|
||
|
||
``` text
|
||
┌─arrayResize([1], 3, NULL)─┐
|
||
│ [1,NULL,NULL] │
|
||
└───────────────────────────┘
|
||
```
|
||
|
||
## arraySlice
|
||
|
||
配列のスライスを返します。
|
||
|
||
``` sql
|
||
arraySlice(array, offset[, length])
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – データの配列。
|
||
- `offset` – 配列の端からのインデント。正の値は左側のオフセット、負の値は右側へのインデントを示します。配列項目の番号付けは1から始まります。
|
||
- `length` – 必要なスライスの長さ。負の値を指定すると、関数は開いているスライス `[offset, array_length - length]` を返します。値を省略すると、関数はスライス `[offset, the_end_of_array]` を返します。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arraySlice([1, 2, NULL, 4, 5], 2, 3) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res────────┐
|
||
│ [2,NULL,4] │
|
||
└────────────┘
|
||
```
|
||
|
||
`NULL` に設定された配列要素は通常の値として扱われます。
|
||
|
||
## arrayShingles
|
||
|
||
入力配列の指定された長さの連続するサブ配列からなる "shingles" を生成します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayShingles(array, length)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` — 入力配列 [Array](../data-types/array.md)。
|
||
- `length` — 各シングルの長さ。
|
||
|
||
**戻り値**
|
||
|
||
- 生成されたシングルの配列。[Array](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShingles([1,2,3,4], 3) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────┐
|
||
│ [[1,2,3],[2,3,4]] │
|
||
└───────────────────┘
|
||
```
|
||
|
||
## arraySort(\[func,\] arr, ...) {#sort}
|
||
|
||
`arr` 配列の要素を昇順にソートします。`func` 関数が指定されている場合、配列の要素に適用された `func` 関数の結果によってソート順が決まります。`func` が複数の引数を受け取る場合、`arraySort` 関数には `func` の引数が対応する複数の配列が渡されます。`arraySort` の説明の終わりに詳細な例が示されています。
|
||
|
||
整数値をソートする例:
|
||
|
||
``` sql
|
||
SELECT arraySort([1, 3, 3, 0]);
|
||
```
|
||
|
||
``` text
|
||
┌─arraySort([1, 3, 3, 0])─┐
|
||
│ [0,1,3,3] │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
文字列値をソートする例:
|
||
|
||
``` sql
|
||
SELECT arraySort(['hello', 'world', '!']);
|
||
```
|
||
|
||
``` text
|
||
┌─arraySort(['hello', 'world', '!'])─┐
|
||
│ ['!','hello','world'] │
|
||
└────────────────────────────────────┘
|
||
```
|
||
|
||
`NULL`, `NaN` および `Inf` 値のソート順は次のとおりです:
|
||
|
||
``` sql
|
||
SELECT arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]);
|
||
```
|
||
|
||
``` text
|
||
┌─arraySort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf])─┐
|
||
│ [-inf,-4,1,2,3,inf,nan,nan,NULL,NULL] │
|
||
└───────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
- `-Inf` 値は配列の最初に位置します。
|
||
- `NULL` 値は配列の最後に位置します。
|
||
- `NaN` 値は `NULL` の直前に位置します。
|
||
- `Inf` 値は `NaN` の直前に位置します。
|
||
|
||
`arraySort` は[高次の関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。この場合、ラムダ関数の要素に施された結果によってソート順が決まります。
|
||
|
||
以下の例を考えてみましょう:
|
||
|
||
``` sql
|
||
SELECT arraySort((x) -> -x, [1, 2, 3]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [3,2,1] │
|
||
└─────────┘
|
||
```
|
||
|
||
ソース配列の各要素に対して、ラムダ関数がソート用のキーを返します。これは、\[1 -> -1, 2 -> -2, 3 -> -3\] です。`arraySort` 関数はキーを昇順でソートするため、結果は \[3, 2, 1\] となります。したがって、`(x) -> -x` ラムダ関数が[降順](#arrayreversesort)のソートを設定します。
|
||
|
||
ラムダ関数は複数の引数を受け取ることができます。この場合、`arraySort` 関数に対して、ラムダ関数の引数が対応する同じ長さの複数の配列を渡す必要があります。結果の配列は最初の入力配列の要素で構成され、次の入力配列の要素がソートキーを指定します。例:
|
||
|
||
``` sql
|
||
SELECT arraySort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res────────────────┐
|
||
│ ['world', 'hello'] │
|
||
└────────────────────┘
|
||
```
|
||
|
||
ここで、2番目の配列に渡された要素(\[2, 1\])が、ソース配列の対応する要素(\[‘hello’, ‘world’\])に対するソートキーを定義します。つまり、\[‘hello’ -> 2, ‘world’ -> 1\] です。ラムダ関数は `x` を使用しないため、ソース配列の実際の値は結果の順序に影響を与えません。そのため、‘hello’ は結果の2番目の要素になり、‘world’ は最初の要素になります。
|
||
|
||
その他の例を以下に示します。
|
||
|
||
``` sql
|
||
SELECT arraySort((x, y) -> y, [0, 1, 2], ['c', 'b', 'a']) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [2,1,0] │
|
||
└─────────┘
|
||
```
|
||
|
||
``` sql
|
||
SELECT arraySort((x, y) -> -y, [0, 1, 2], [1, 2, 3]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [2,1,0] │
|
||
└─────────┘
|
||
```
|
||
|
||
:::note
|
||
ソート効率を向上させるため、[Schwartzian transform](https://en.wikipedia.org/wiki/Schwartzian_transform)が使用されています。
|
||
:::
|
||
|
||
## arrayPartialSort(\[func,\] limit, arr, ...)
|
||
|
||
`arraySort` と同様ですが、部分ソートを許可するために追加の `limit` 引数があります。戻り値は元の配列と同じサイズの配列で、範囲 `[1..limit]` の要素は昇順にソートされます。残りの要素 `(limit..N]` には未指定の順序の要素が含まれます。
|
||
|
||
## arrayReverseSort
|
||
|
||
`arr` 配列の要素を降順にソートします。`func` 関数が指定されている場合、配列の要素に適用された `func` 関数の結果によって `arr` がソートされ、次にソートされた配列が逆順になります。`func` が複数の引数を受け取る場合、`arrayReverseSort` 関数には `func` の引数が対応する複数の配列が渡されます。`arrayReverseSort` の説明の終わりに詳細な例が示されています。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayReverseSort([func,] arr, ...)
|
||
```
|
||
整数値をソートする例:
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort([1, 3, 3, 0]);
|
||
```
|
||
|
||
``` text
|
||
┌─arrayReverseSort([1, 3, 3, 0])─┐
|
||
│ [3,3,1,0] │
|
||
└────────────────────────────────┘
|
||
```
|
||
|
||
文字列値をソートする例:
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort(['hello', 'world', '!']);
|
||
```
|
||
|
||
``` text
|
||
┌─arrayReverseSort(['hello', 'world', '!'])─┐
|
||
│ ['world','hello','!'] │
|
||
└───────────────────────────────────────────┘
|
||
```
|
||
|
||
`NULL`, `NaN` および `Inf` 値のソート順は次のとおりです:
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort([1, nan, 2, NULL, 3, nan, -4, NULL, inf, -inf]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────────────────────────────┐
|
||
│ [inf,3,2,1,-4,-inf,nan,nan,NULL,NULL] │
|
||
└───────────────────────────────────────┘
|
||
```
|
||
|
||
- `Inf` 値は配列の最初に位置します。
|
||
- `NULL` 値は配列の最後に位置します。
|
||
- `NaN` 値は `NULL` の直前に位置します。
|
||
- `-Inf` 値は `NaN` の直前に位置します。
|
||
|
||
`arrayReverseSort` は[高次の関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。例を以下に示します。
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort((x) -> -x, [1, 2, 3]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [1,2,3] │
|
||
└─────────┘
|
||
```
|
||
|
||
この配列は以下のようにソートされます:
|
||
|
||
1. 最初に、ソース配列(\[1, 2, 3\])が配列の要素に適用されたラムダ関数の結果によってソートされます。結果は配列 \[3, 2, 1\] です。
|
||
2. 前のステップで得られた配列を逆順にします。したがって、最終的な結果は \[1, 2, 3\] です。
|
||
|
||
ラムダ関数は複数の引数を受け取ることができます。この場合、`arrayReverseSort` 関数に対して、ラムダ関数の引数が対応する同じ長さの複数の配列を渡す必要があります。結果の配列は最初の入力配列の要素で構成され、次の入力配列の要素がソートキーを指定します。例:
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort((x, y) -> y, ['hello', 'world'], [2, 1]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────────┐
|
||
│ ['hello','world'] │
|
||
└───────────────────┘
|
||
```
|
||
|
||
この例では、配列は以下のようにソートされます:
|
||
|
||
1. 最初に、ソース配列(\[‘hello’, ‘world’\])が配列の要素に適用されたラムダ関数の結果によってソートされます。2 番目の配列に渡された要素(\[2, 1\])がソートキーを対応するソース配列の要素に定義します。結果は配列 \[‘world’, ‘hello’\] です。
|
||
2. 前のステップでソートされた配列を逆順にします。したがって、最終的な結果は \[‘hello’, ‘world’\] です。
|
||
|
||
以下に他の例を示します。
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort((x, y) -> y, [4, 3, 5], ['a', 'b', 'c']) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [5,3,4] │
|
||
└─────────┘
|
||
```
|
||
|
||
``` sql
|
||
SELECT arrayReverseSort((x, y) -> -y, [4, 3, 5], [1, 2, 3]) AS res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [4,3,5] │
|
||
└─────────┘
|
||
```
|
||
|
||
## arrayPartialReverseSort(\[func,\] limit, arr, ...)
|
||
|
||
`arrayReverseSort`と同様ですが、部分ソートを許可するために追加の `limit` 引数があります。戻りは元の配列と同じサイズの配列であり、範囲 `[1..limit]` の要素は降順にソートされ、残りの要素は未指定の順序で含まれます。
|
||
|
||
## arrayShuffle
|
||
|
||
元の配列と同じサイズの配列を返し、要素がシャッフルされた順序で格納されます。
|
||
各可能な要素の並び替えが出現する確率が等しくなるように要素が並べ替えられます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayShuffle(arr[, seed])
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `arr`: 部分的にシャッフルされる配列。[Array](../data-types/array.md)。
|
||
- `seed`(オプション): 乱数生成に使用されるシード。指定されていない場合はランダムなものが使用されます。[UInt または Int](../data-types/int-uint.md)。
|
||
|
||
**戻り値**
|
||
|
||
- シャッフルされた要素を持つ配列。
|
||
|
||
**実装の詳細**
|
||
|
||
:::note
|
||
この関数は定数を具体化しません。
|
||
:::
|
||
|
||
**例**
|
||
|
||
この例では、`arrayShuffle`を`seed`を指定せずに使用しています。そのため、ランダムに生成されます。
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayShuffle([1, 2, 3, 4]);
|
||
```
|
||
|
||
注意: [ClickHouse Fiddle](https://fiddle.clickhouse.com/)を使用する場合、関数のランダムな性質により正確な応答が異なる可能性があります。
|
||
|
||
結果:
|
||
|
||
```response
|
||
[1,4,2,3]
|
||
```
|
||
|
||
この例では、`arrayShuffle`に`seed`が指定されており、安定した結果が生成されます。
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayShuffle([1, 2, 3, 4], 41);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
[3,2,1,4]
|
||
```
|
||
|
||
## arrayPartialShuffle
|
||
|
||
カードの大きさ `N` の入力配列を与えられた場合、範囲 `[1...limit]` の要素がシャッフルされ、残りの要素(範囲 `(limit...n]`) はシャッフルされない配列を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayPartialShuffle(arr[, limit[, seed]])
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `arr`: 部分的にシャッフルされる配列。[Array](../data-types/array.md)。
|
||
- `limit`(オプション): 要素の交換を制限するための数。[UInt または Int](../data-types/int-uint.md)。
|
||
- `seed`(オプション): 乱数生成に使用されるシード値。指定されていない場合はランダムなものが使用されます。[UInt または Int](../data-types/int-uint.md)。
|
||
|
||
**戻り値**
|
||
|
||
- 部分的にシャッフルされた要素を持つ配列。
|
||
|
||
**実装の詳細**
|
||
|
||
:::note
|
||
この関数は定数を具体化しません。
|
||
|
||
`limit` の値は `[1..N]` 範囲内にある必要があります。この範囲外の値は、完全な [arrayShuffle](#arrayshuffle) を実行するのと同等です。
|
||
:::
|
||
|
||
**例**
|
||
|
||
注意: [ClickHouse Fiddle](https://fiddle.clickhouse.com/)を使用する場合、関数のランダムな性質により正確な応答が異なる可能性があります。
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayPartialShuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 1)
|
||
```
|
||
|
||
結果:
|
||
|
||
要素の順序は (`[2,3,4,5], [7,8,9,10]`) のままで、シャッフルされた2つの要素 `[1, 6]` を除きます。`seed` が指定されていないため、関数はランダムに選びます。
|
||
|
||
```response
|
||
[6,2,3,4,5,1,7,8,9,10]
|
||
```
|
||
|
||
この例では、`limit` が `2` に増加し、`seed` 値が指定されています。
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayPartialShuffle([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2);
|
||
```
|
||
|
||
要素の順序は (`[4, 5, 6, 7, 8], [10]`) のままで、シャッフルされた4つの要素 `[1, 2, 3, 9]` を除きます。
|
||
|
||
結果:
|
||
```response
|
||
[3,9,1,4,5,6,7,8,2,10]
|
||
```
|
||
|
||
## arrayUniq(arr, ...)
|
||
|
||
1つの引数が渡された場合、配列内の異なる要素の数をカウントします。
|
||
複数の引数が渡された場合、複数の配列内の対応する位置の要素の異なる組み合わせの数をカウントします。
|
||
|
||
配列内の一意のアイテムのリストを取得する場合、`arrayReduce('groupUniqArray', arr)`を使用できます。
|
||
|
||
## arrayJoin(arr)
|
||
|
||
特別な関数。[「arrayJoin関数」](../../sql-reference/functions/array-join.md#functions_arrayjoin) セクションを参照してください。
|
||
|
||
## arrayDifference
|
||
|
||
隣接する配列要素間の差分の配列を計算します。結果配列の最初の要素は0、2番目は`a[1] - a[0]`、3番目は`a[2] - a[1]` などです。結果配列の要素の型は減算の型推論ルールによって決まります(例: `UInt8` - `UInt8` = `Int16`)。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayDifference(array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – [Array](https://clickhouse.com/docs/ja/data_types/array/)。
|
||
|
||
**戻り値**
|
||
|
||
隣接する配列要素間の差分の配列を返します。[UInt\*](https://clickhouse.com/docs/ja/data_types/int_uint/#uint-ranges)、[Int\*](https://clickhouse.com/docs/ja/data_types/int_uint/#int-ranges)、[Float\*](https://clickhouse.com/docs/ja/data_types/float/)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayDifference([1, 2, 3, 4]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayDifference([1, 2, 3, 4])─┐
|
||
│ [0,1,1,1] │
|
||
└───────────────────────────────┘
|
||
```
|
||
|
||
Int64 によるオーバーフローの例:
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayDifference([0, 10000000000000000000]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayDifference([0, 10000000000000000000])─┐
|
||
│ [0,-8446744073709551616] │
|
||
└────────────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayDistinct
|
||
|
||
配列を取り、一意の要素のみを含む配列を返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayDistinct(array)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `array` – [Array](https://clickhouse.com/docs/ja/data_types/array/)。
|
||
|
||
**戻り値**
|
||
|
||
一意の要素を含む配列を返します。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayDistinct([1, 2, 2, 3, 1]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayDistinct([1, 2, 2, 3, 1])─┐
|
||
│ [1,2,3] │
|
||
└────────────────────────────────┘
|
||
```
|
||
|
||
## arrayEnumerateDense
|
||
|
||
配列と同じサイズの配列を返し、各要素のソース配列における最初の出現位置を示します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayEnumerateDense(arr)
|
||
```
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateDense([10, 20, 10, 30])
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayEnumerateDense([10, 20, 10, 30])─┐
|
||
│ [1,2,1,3] │
|
||
└───────────────────────────────────────┘
|
||
```
|
||
## arrayEnumerateDenseRanked
|
||
|
||
配列と同じサイズの配列を返し、各要素の最初の出現場所をソース配列において示します。多次元配列を列挙し、配列のどの深さまで見ていくかを指定することができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayEnumerateDenseRanked(clear_depth, arr, max_array_depth)
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `clear_depth`: 指定されたレベルで要素を個別に列挙します。`max_arr_depth`以下の正の整数。
|
||
- `arr`: 列挙されるN次元配列。[Array](../data-types/array.md)。
|
||
- `max_array_depth`: 有効な最大深度。`arr` の深さ以下の正の整数。
|
||
|
||
**例**
|
||
|
||
`clear_depth=1`および`max_array_depth=1`では、[arrayEnumerateDense](#arrayenumeratedense) と同じ結果を返します。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateDenseRanked(1,[10, 20, 10, 30],1);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[1,2,1,3]
|
||
```
|
||
|
||
この例では、`arrayEnumerateDenseRanked` を使用して、多次元配列の各要素が同じ値を持つ別の要素の中で最初に出現する位置を示す配列を取得します。最初の行がソース配列の`[10,10,30,20]`である場合、この行に対応する結果は `[1,1,2,3]` であり、`10`が初めて発見された位置は位置1と2であること、`30`は別の発見された要素である位置 3、`20`はさらに別の発見された要素である位置4。第2の行が `[40, 50, 10, 30]` であるとき、結果の第2行は `[4,5,1,2]` であり、`40`と`50`が4番目と5番目であることを示しますこの行の位置1と2の要素として、別の`10`(最初に見つかった数)が位置3に、`30`(2番目の数)が最後の位置にあります。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateDenseRanked(1,[[10,10,30,20],[40,50,10,30]],2);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[[1,1,2,3],[4,5,1,2]]
|
||
```
|
||
|
||
`clear_depth=2`に変更すると、各行が別々に列挙されます。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayEnumerateDenseRanked(2,[[10,10,30,20],[40,50,10,30]],2);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
[[1,1,2,3],[1,2,3,4]]
|
||
```
|
||
|
||
## arrayUnion(arr)
|
||
|
||
複数の配列を取り、ソース配列のいずれかに存在するすべての要素を含む配列を返します。
|
||
|
||
例:
|
||
```sql
|
||
SELECT
|
||
arrayUnion([-2, 1], [10, 1], [-2], []) as num_example,
|
||
arrayUnion(['hi'], [], ['hello', 'hi']) as str_example,
|
||
arrayUnion([1, 3, NULL], [2, 3, NULL]) as null_example
|
||
```
|
||
|
||
```text
|
||
┌─num_example─┬─str_example────┬─null_example─┐
|
||
│ [10,-2,1] │ ['hello','hi'] │ [3,2,1,NULL] │
|
||
└─────────────┴────────────────┴──────────────┘
|
||
```
|
||
|
||
## arrayIntersect(arr)
|
||
|
||
複数の配列を取り、すべてのソース配列に存在する要素を持つ配列を返します。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT
|
||
arrayIntersect([1, 2], [1, 3], [2, 3]) AS no_intersect,
|
||
arrayIntersect([1, 2], [1, 3], [1, 4]) AS intersect
|
||
```
|
||
|
||
``` text
|
||
┌─no_intersect─┬─intersect─┐
|
||
│ [] │ [1] │
|
||
└──────────────┴───────────┘
|
||
```
|
||
|
||
## arrayJaccardIndex
|
||
|
||
2つの配列の[ジャッカード係数](https://en.wikipedia.org/wiki/Jaccard_index)を返します。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
``` sql
|
||
SELECT arrayJaccardIndex([1, 2], [2, 3]) AS res
|
||
```
|
||
|
||
結果:
|
||
``` text
|
||
┌─res────────────────┐
|
||
│ 0.3333333333333333 │
|
||
└────────────────────┘
|
||
```
|
||
|
||
## arrayReduce
|
||
|
||
集約関数を配列要素に適用し、その結果を返します。集約関数の名前はシングルクォートで囲まれた文字列 `'max'`, `'sum'` として渡されます。パラメトリック集計関数を使用する場合、関数名の後括弧で囲んでパラメータを指定します `'uniqUpTo(6)'`。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayReduce(agg_func, arr1, arr2, ..., arrN)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `agg_func` — 集約関数の名前で、定数[文字列](../data-types/string.md)でなければなりません。
|
||
- `arr` — アイテムとして集約関数のパラメータとして使用される任意の数の[Array](../data-types/array.md)型のカラム。
|
||
|
||
**戻り値**
|
||
|
||
集約関数で指定された範囲内の結果を含む配列。[Array](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayReduce('max', [1, 2, 3]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayReduce('max', [1, 2, 3])─┐
|
||
│ 3 │
|
||
└───────────────────────────────┘
|
||
```
|
||
|
||
集約関数が複数の引数をとる場合、この関数は同じサイズの複数の配列に対して適用される必要があります。
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayReduce('maxIf', [3, 5], [1, 0]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayReduce('maxIf', [3, 5], [1, 0])─┐
|
||
│ 3 │
|
||
└──────────────────────────────────────┘
|
||
```
|
||
|
||
パラメトリック集計関数の例:
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayReduce('uniqUpTo(3)', [1, 2, 3, 4, 5, 6, 7, 8, 9, 10])─┐
|
||
│ 4 │
|
||
└─────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
**関連項目**
|
||
|
||
- [arrayFold](#arrayfold)
|
||
|
||
## arrayReduceInRanges
|
||
|
||
集約関数を指定された範囲内の配列要素に適用し、各範囲に対応する結果を含む配列を返します。この関数は複数の `arrayReduce(agg_func, arraySlice(arr1, index, length), ...)` と同様の結果を返します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayReduceInRanges(agg_func, ranges, arr1, arr2, ..., arrN)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `agg_func` — 集約関数の名前で、定数[文字列](../data-types/string.md)でなければなりません。
|
||
- `ranges` — 集約される範囲で、各範囲のインデックスと長さを含む[タプル](../data-types/tuple.md)の配列[Array](../data-types/array.md)です。
|
||
- `arr` — 集約関数のパラメータとして使用される任意の数の[Array](../data-types/array.md)型のカラム。
|
||
|
||
**戻り値**
|
||
|
||
- 指定された範囲内の集約関数の結果を含む配列。[Array](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayReduceInRanges(
|
||
'sum',
|
||
[(1, 5), (2, 3), (3, 4), (4, 4)],
|
||
[1000000, 200000, 30000, 4000, 500, 60, 7]
|
||
) AS res
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────────────┐
|
||
│ [1234500,234000,34560,4567] │
|
||
└─────────────────────────────┘
|
||
```
|
||
|
||
## arrayFold
|
||
|
||
ラムダ関数を同サイズの1つまたは複数の配列に適用し、結果をアキュムレータに集めます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayFold(lambda_function, arr1, arr2, ..., accumulator)
|
||
```
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayFold( acc,x -> acc + x*2, [1, 2, 3, 4], toInt64(3)) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ 23 │
|
||
└─────┘
|
||
```
|
||
|
||
**フィボナッチ数列の例**
|
||
|
||
```sql
|
||
SELECT arrayFold( acc,x -> (acc.2, acc.2 + acc.1), range(number), (1::Int64, 0::Int64)).1 AS fibonacci
|
||
FROM numbers(1,10);
|
||
|
||
┌─fibonacci─┐
|
||
│ 0 │
|
||
│ 1 │
|
||
│ 1 │
|
||
│ 2 │
|
||
│ 3 │
|
||
│ 5 │
|
||
│ 8 │
|
||
│ 13 │
|
||
│ 21 │
|
||
│ 34 │
|
||
└───────────┘
|
||
```
|
||
|
||
**関連項目**
|
||
|
||
- [arrayReduce](#arrayreduce)
|
||
|
||
## arrayReverse
|
||
|
||
元の配列と同じサイズの配列を返し、順番が逆になった要素を含みます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayReverse(arr)
|
||
```
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayReverse([1, 2, 3])
|
||
```
|
||
|
||
``` text
|
||
┌─arrayReverse([1, 2, 3])─┐
|
||
│ [3,2,1] │
|
||
└─────────────────────────┘
|
||
```
|
||
|
||
## reverse(arr)
|
||
|
||
「[arrayReverse](#arrayreverse)」の同義語
|
||
|
||
## arrayFlatten
|
||
|
||
配列の配列をフラットな配列に変換します。
|
||
|
||
関数:
|
||
|
||
- ネストされた配列の任意の深さに適用されます。
|
||
- すでにフラットである配列は変更しません。
|
||
|
||
フラット化した配列には、すべてのソース配列のすべての要素が含まれています。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
flatten(array_of_arrays)
|
||
```
|
||
|
||
エイリアス: `flatten`.
|
||
|
||
**パラメータ**
|
||
|
||
- `array_of_arrays` — [Array](../data-types/array.md) の配列。例えば、`[[1,2,3], [4,5]]`.
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT flatten([[[1]], [[2], [3]]]);
|
||
```
|
||
|
||
``` text
|
||
┌─flatten(array(array([1]), array([2], [3])))─┐
|
||
│ [1,2,3] │
|
||
└─────────────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayCompact
|
||
|
||
配列から連続する重複要素を削除します。元の配列中のオーダーによって、結果の値の順序が決まります。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayCompact(arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
`arr` — チェックされる[Array](../data-types/array.md)です。
|
||
|
||
**戻り値**
|
||
|
||
重複を取り除いた配列。[Array](../data-types/array.md)です。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayCompact([1, 1, nan, nan, 2, 3, 3, 3]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayCompact([1, 1, nan, nan, 2, 3, 3, 3])─┐
|
||
│ [1,nan,nan,2,3] │
|
||
└────────────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayZip
|
||
|
||
複数の配列を1つの配列に結合します。結果の配列には、ソース配列対応する要素が引数の順序でタプルにまとめられています。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayZip(arr1, arr2, ..., arrN)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arrN` — [Array](../data-types/array.md).
|
||
|
||
この機能は異なる型の任意の数の配列を受け取ることができます。すべての入力配列は同じサイズでなければなりません。
|
||
|
||
**戻り値**
|
||
|
||
- ソース配列の要素を[タプル](../data-types/tuple.md)にまとめた配列です。タプル内のデータ型は、入力配列の型と同じで、渡された配列の順序に従います。[Array](../data-types/array.md)です。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayZip(['a', 'b', 'c'], [5, 2, 1]);
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─arrayZip(['a', 'b', 'c'], [5, 2, 1])─┐
|
||
│ [('a',5),('b',2),('c',1)] │
|
||
└──────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayZipUnaligned
|
||
|
||
ズレのある配列を考慮して複数の配列を1つに結合します。結果の配列には、ソース配列の対応する要素が引数のリストされた順序でタプルにまとめられています。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayZipUnaligned(arr1, arr2, ..., arrN)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arrN` — [Array](../data-types/array.md).
|
||
|
||
この機能は異なる型の任意の数の配列を受け取ることができます。
|
||
|
||
**戻り値**
|
||
|
||
- ソース配列からの要素を[タ
|
||
`func(arr1[i], ..., arrN[i])`を各要素に適用することによって、元の配列から新たな配列を取得します。配列 `arr1` ... `arrN` は同じ数の要素を持っている必要があります。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayMap(x -> (x + 2), [1, 2, 3]) as res;
|
||
```
|
||
|
||
``` text
|
||
┌─res─────┐
|
||
│ [3,4,5] │
|
||
└─────────┘
|
||
```
|
||
|
||
次の例は、異なる配列の要素からタプルを作成する方法を示しています:
|
||
|
||
``` sql
|
||
SELECT arrayMap((x, y) -> (x, y), [1, 2, 3], [4, 5, 6]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res─────────────────┐
|
||
│ [(1,4),(2,5),(3,6)] │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
`arrayMap`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayFilter(func, arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す`arr1`の要素のみを含む配列を返します。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayFilter(x -> x LIKE '%World%', ['Hello', 'abc World']) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ ['abc World'] │
|
||
└───────────────┘
|
||
```
|
||
|
||
``` sql
|
||
SELECT
|
||
arrayFilter(
|
||
(i, x) -> x LIKE '%World%',
|
||
arrayEnumerate(arr),
|
||
['Hello', 'abc World'] AS arr)
|
||
AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res─┐
|
||
│ [2] │
|
||
└─────┘
|
||
```
|
||
|
||
`arrayFilter`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayFill(func, arr1, ...)
|
||
|
||
`arr1`を最初の要素から最後の要素までスキャンし、`func(arr1[i], ..., arrN[i])`が0を返す場合は`arr1[i - 1]`で`arr1[i]`を置き換えます。`arr1`の最初の要素は置き換えられません。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res──────────────────────────────┐
|
||
│ [1,1,3,11,12,12,12,5,6,14,14,14] │
|
||
└──────────────────────────────────┘
|
||
```
|
||
|
||
`arrayFill`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayReverseFill(func, arr1, ...)
|
||
|
||
`arr1`を最後の要素から最初の要素までスキャンし、`func(arr1[i], ..., arrN[i])`が0を返す場合は`arr1[i + 1]`で`arr1[i]`を置き換えます。`arr1`の最後の要素は置き換えられません。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayReverseFill(x -> not isNull(x), [1, null, 3, 11, 12, null, null, 5, 6, 14, null, null]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res────────────────────────────────┐
|
||
│ [1,3,3,11,12,5,5,5,6,14,NULL,NULL] │
|
||
└────────────────────────────────────┘
|
||
```
|
||
|
||
`arrayReverseFill`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arraySplit(func, arr1, ...)
|
||
|
||
`arr1`を複数の配列に分割します。`func(arr1[i], ..., arrN[i])`が0以外を返す場合、配列はその要素の左側で分割されます。配列は最初の要素の前で分割されません。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arraySplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res─────────────┐
|
||
│ [[1,2,3],[4,5]] │
|
||
└─────────────────┘
|
||
```
|
||
|
||
`arraySplit`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayReverseSplit(func, arr1, ...)
|
||
|
||
`arr1`を複数の配列に分割します。`func(arr1[i], ..., arrN[i])`が0以外を返す場合、配列はその要素の右側で分割されます。配列は最後の要素の後では分割されません。
|
||
|
||
例:
|
||
|
||
``` sql
|
||
SELECT arrayReverseSplit((x, y) -> y, [1, 2, 3, 4, 5], [1, 0, 0, 1, 0]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res───────────────┐
|
||
│ [[1],[2,3,4],[5]] │
|
||
└───────────────────┘
|
||
```
|
||
|
||
`arrayReverseSplit`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayExists(\[func,\] arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す要素が少なくとも1つ存在する場合は1を返します。それ以外の場合は0を返します。
|
||
|
||
`arrayExists`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
## arrayAll(\[func,\] arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`がすべての要素に対して0以外を返す場合は1を返します。それ以外は0を返します。
|
||
|
||
`arrayAll`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
## arrayFirst(func, arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最初の要素を`arr1`配列から返します。
|
||
|
||
## arrayFirstOrNull
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最初の要素を`arr1`配列から返します。そうでない場合は`NULL`を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayFirstOrNull(func, arr1, ...)
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `func`: ラムダ関数。[ラムダ関数](../functions/#higher-order-functions---operator-and-lambdaparams-expr-function)。
|
||
- `arr1`: 操作対象の配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 渡された配列の最初の要素。
|
||
- そうでない場合は`NULL`を返します
|
||
|
||
**実装の詳細**
|
||
|
||
`arrayFirstOrNull`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayFirstOrNull(x -> x >= 2, [1, 2, 3]);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
2
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayFirstOrNull(x -> x >= 2, emptyArrayUInt8());
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
\N
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayLastOrNull((x,f) -> f, [1,2,3,NULL], [0,1,0,1]);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
\N
|
||
```
|
||
|
||
## arrayLast(func, arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最後の要素を`arr1`配列から返します。
|
||
|
||
`arrayLast`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayLastOrNull
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最後の要素を`arr1`配列から返します。そうでない場合は`NULL`を返します。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayLastOrNull(func, arr1, ...)
|
||
```
|
||
|
||
**パラメータ**
|
||
|
||
- `func`: ラムダ関数。[ラムダ関数](../functions/#higher-order-functions---operator-and-lambdaparams-expr-function)。
|
||
- `arr1`: 操作対象の配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 渡された配列の最後の要素。
|
||
- そうでない場合は`NULL`を返します
|
||
|
||
**実装の詳細**
|
||
|
||
`arrayLastOrNull`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayLastOrNull(x -> x >= 2, [1, 2, 3]);
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
3
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayLastOrNull(x -> x >= 2, emptyArrayUInt8());
|
||
```
|
||
|
||
結果:
|
||
|
||
```response
|
||
\N
|
||
```
|
||
|
||
## arrayFirstIndex(func, arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最初の要素のインデックスを`arr1`配列から返します。
|
||
|
||
`arrayFirstIndex`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayLastIndex(func, arr1, ...)
|
||
|
||
`func(arr1[i], ..., arrN[i])`が0以外を返す最後の要素のインデックスを`arr1`配列から返します。
|
||
|
||
`arrayLastIndex`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡す必要があり、省略することはできません。
|
||
|
||
## arrayMin
|
||
|
||
元の配列内の要素の最小値を返します。
|
||
|
||
`func`関数が指定されている場合は、この関数によって変換された要素の最小値を返します。
|
||
|
||
`arrayMin`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayMin([func,] arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `func` — 関数。[Expression](../data-types/special-data-types/expression.md)。
|
||
- `arr` — 配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 関数値の最小値(または配列の最小値)。
|
||
|
||
:::note
|
||
`func`が指定されている場合、戻り値の型は`func`の戻り値の型と一致します。それ以外の場合は配列の要素の型と一致します。
|
||
:::
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayMin([1, 2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ 1 │
|
||
└─────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayMin(x -> (-x), [1, 2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ -4 │
|
||
└─────┘
|
||
```
|
||
|
||
## arrayMax
|
||
|
||
元の配列内の要素の最大値を返します。
|
||
|
||
`func`関数が指定されている場合は、この関数によって変換された要素の最大値を返します。
|
||
|
||
`arrayMax`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayMax([func,] arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `func` — 関数。[Expression](../data-types/special-data-types/expression.md)。
|
||
- `arr` — 配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 関数値の最大値(または配列の最大値)。
|
||
|
||
:::note
|
||
`func`が指定されている場合、戻り値の型は`func`の戻り値の型と一致します。それ以外の場合は配列の要素の型と一致します。
|
||
:::
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayMax([1, 2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ 4 │
|
||
└─────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayMax(x -> (-x), [1, 2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ -1 │
|
||
└─────┘
|
||
```
|
||
|
||
## arraySum
|
||
|
||
元の配列内の要素の合計値を返します。
|
||
|
||
`func`関数が指定されている場合は、この関数によって変換された要素の合計値を返します。
|
||
|
||
`arraySum`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arraySum([func,] arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `func` — 関数。[Expression](../data-types/special-data-types/expression.md)。
|
||
- `arr` — 配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 関数値の合計値(または配列の合計値)。
|
||
|
||
:::note
|
||
戻り値の型:
|
||
|
||
- 元の配列(または`func`が指定されている場合は変換された値)の小数の場合 — [Decimal128](../data-types/decimal.md)。
|
||
- 浮動小数点数の場合 — [Float64](../data-types/float.md)。
|
||
- 符号なし整数の場合 — [UInt64](../data-types/int-uint.md)。
|
||
- 符号付き整数の場合 — [Int64](../data-types/int-uint.md)。
|
||
:::
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arraySum([2, 3]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ 5 │
|
||
└─────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arraySum(x -> x*x, [2, 3]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ 13 │
|
||
└─────┘
|
||
```
|
||
|
||
## arrayAvg
|
||
|
||
元の配列内の要素の平均を返します。
|
||
|
||
`func`関数が指定されている場合は、この関数によって変換された要素の平均を返します。
|
||
|
||
`arrayAvg`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayAvg([func,] arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `func` — 関数。[Expression](../data-types/special-data-types/expression.md)。
|
||
- `arr` — 配列。[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 関数値の平均値(または配列の平均値)。[Float64](../data-types/float.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayAvg([1, 2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌────────────────res─┐
|
||
│ 2.3333333333333335 │
|
||
└────────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayAvg(x -> (x * x), [2, 4]) AS res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```text
|
||
┌─res─┐
|
||
│ 10 │
|
||
└─────┘
|
||
```
|
||
|
||
## arrayCumSum(\[func,\] arr1, ...)
|
||
|
||
元の配列`arr1`の要素の部分(ランニング)合計を返します。`func`が指定されている場合、合計は`func`を`arr1`、`arr2`、...、`arrN`に適用することにより計算されます。すなわち、`func(arr1[i], ..., arrN[i])`です。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayCumSum(arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — 数値の[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 元の配列の要素の部分合計の配列を返します。[UInt\*](https://clickhouse.com/docs/ja/data_types/int_uint/#uint-ranges)、[Int\*](https://clickhouse.com/docs/ja/data_types/int_uint/#int-ranges)、[Float\*](https://clickhouse.com/docs/ja/data_types/float/)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayCumSum([1, 1, 1, 1]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res──────────┐
|
||
│ [1, 2, 3, 4] │
|
||
└──────────────┘
|
||
```
|
||
|
||
`arrayCumSum`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
## arrayCumSumNonNegative(\[func,\] arr1, ...)
|
||
|
||
`arrayCumSum`と同様に、元の配列の要素の部分(ランニング)合計を返します。`func`が指定されている場合、合計は`func`を`arr1`、`arr2`、...、`arrN`に適用することにより計算されます。すなわち、`func(arr1[i], ..., arrN[i])`です。`arrayCumSum`とは異なり、現在のランニング合計が0未満の場合、それは0に置き換えられます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayCumSumNonNegative(arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — 数値の[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 元の配列の要素の非負部分合計の配列を返します。[UInt\*](https://clickhouse.com/docs/ja/data_types/int_uint/#uint-ranges)、[Int\*](https://clickhouse.com/docs/ja/data_types/int_uint/#int-ranges)、[Float\*](https://clickhouse.com/docs/ja/data_types/float/)。
|
||
|
||
**例**
|
||
|
||
``` sql
|
||
SELECT arrayCumSumNonNegative([1, 1, -4, 1]) AS res
|
||
```
|
||
|
||
``` text
|
||
┌─res───────┐
|
||
│ [1,2,0,1] │
|
||
└───────────┘
|
||
```
|
||
|
||
`arraySumNonNegative`は[高階関数](../../sql-reference/functions/index.md#higher-order-functions)であることに注意してください。最初の引数としてラムダ関数を渡すことができます。
|
||
|
||
## arrayProduct
|
||
|
||
[配列](../data-types/array.md)の要素を乗算します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayProduct(arr)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — 数値の[配列](../data-types/array.md)。
|
||
|
||
**返される値**
|
||
|
||
- 配列の要素の積。[Float64](../data-types/float.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayProduct([1,2,3,4,5,6]) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───┐
|
||
│ 720 │
|
||
└───────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayProduct([toDecimal64(1,8), toDecimal64(2,8), toDecimal64(3,8)]) as res, toTypeName(res);
|
||
```
|
||
|
||
戻り値の型は常に[Float64](../data-types/float.md)です。結果:
|
||
|
||
``` text
|
||
┌─res─┬─toTypeName(arrayProduct(array(toDecimal64(1, 8), toDecimal64(2, 8), toDecimal64(3, 8))))─┐
|
||
│ 6 │ Float64 │
|
||
└─────┴──────────────────────────────────────────────────────────────────────────────────────────┘
|
||
```
|
||
|
||
## arrayRotateLeft
|
||
|
||
[配列](../data-types/array.md)を指定した要素数だけ左に回転させます。
|
||
要素数が負の場合は、配列は右に回転します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayRotateLeft(arr, n)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — [配列](../data-types/array.md)。
|
||
- `n` — 回転させる要素の数。
|
||
|
||
**返される値**
|
||
|
||
- 指定された要素数だけ左に回転させた配列。[配列](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateLeft([1,2,3,4,5,6], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [3,4,5,6,1,2] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateLeft([1,2,3,4,5,6], -2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [5,6,1,2,3,4] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateLeft(['a','b','c','d','e'], 3) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────────┐
|
||
│ ['d','e','a','b','c'] │
|
||
└───────────────────────┘
|
||
```
|
||
|
||
## arrayRotateRight
|
||
|
||
[配列](../data-types/array.md)を指定した要素数だけ右に回転させます。
|
||
要素数が負の場合は、配列は左に回転します。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayRotateRight(arr, n)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — [配列](../data-types/array.md)。
|
||
- `n` — 回転させる要素の数。
|
||
|
||
**返される値**
|
||
|
||
- 指定された要素数だけ右に回転させた配列。[配列](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateRight([1,2,3,4,5,6], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [5,6,1,2,3,4] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateRight([1,2,3,4,5,6], -2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [3,4,5,6,1,2] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayRotateRight(['a','b','c','d','e'], 3) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────────────┐
|
||
│ ['c','d','e','a','b'] │
|
||
└───────────────────────┘
|
||
```
|
||
|
||
## arrayShiftLeft
|
||
|
||
[配列](../data-types/array.md)を指定した要素数だけ左にシフトします。
|
||
新しい要素は提供された引数または配列要素型のデフォルト値で埋められます。
|
||
要素数が負の場合は、配列は右にシフトされます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayShiftLeft(arr, n[, default])
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — [配列](../data-types/array.md)。
|
||
- `n` — シフトさせる要素の数。
|
||
- `default` — オプション。新しい要素のデフォルト値。
|
||
|
||
**返される値**
|
||
|
||
- 指定された要素数だけ左にシフトさせた配列。[配列](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftLeft([1,2,3,4,5,6], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [3,4,5,6,0,0] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftLeft([1,2,3,4,5,6], -2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [0,0,1,2,3,4] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftLeft([1,2,3,4,5,6], 2, 42) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────┐
|
||
│ [3,4,5,6,42,42] │
|
||
└─────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftLeft(['a','b','c','d','e','f'], 3, 'foo') as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────────────────┐
|
||
│ ['d','e','f','foo','foo','foo'] │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftLeft([1,2,3,4,5,6] :: Array(UInt16), 2, 4242) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────┐
|
||
│ [3,4,5,6,4242,4242] │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
## arrayShiftRight
|
||
|
||
[配列](../data-types/array.md)を指定した要素数だけ右にシフトします。
|
||
新しい要素は提供された引数または配列要素型のデフォルト値で埋められます。
|
||
要素数が負の場合は、配列は左にシフトされます。
|
||
|
||
**構文**
|
||
|
||
``` sql
|
||
arrayShiftRight(arr, n[, default])
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — [配列](../data-types/array.md)。
|
||
- `n` — シフトさせる要素の数。
|
||
- `default` — オプション。新しい要素のデフォルト値。
|
||
|
||
**返される値**
|
||
|
||
- 指定された要素数だけ右にシフトさせた配列。[配列](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftRight([1,2,3,4,5,6], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [0,0,1,2,3,4] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftRight([1,2,3,4,5,6], -2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res───────────┐
|
||
│ [3,4,5,6,0,0] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftRight([1,2,3,4,5,6], 2, 42) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────┐
|
||
│ [42,42,1,2,3,4] │
|
||
└─────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftRight(['a','b','c','d','e','f'], 3, 'foo') as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────────────────┐
|
||
│ ['foo','foo','foo','a','b','c'] │
|
||
└─────────────────────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
``` sql
|
||
SELECT arrayShiftRight([1,2,3,4,5,6] :: Array(UInt16), 2, 4242) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
``` text
|
||
┌─res─────────────────┐
|
||
│ [4242,4242,1,2,3,4] │
|
||
└─────────────────────┘
|
||
```
|
||
|
||
## arrayRandomSample
|
||
|
||
関数`arrayRandomSample`は、入力配列からランダムに`samples`個の要素のサブセットを返します。`samples`が入力配列のサイズを超える場合、サンプルサイズは配列のサイズに制限されます。つまり、すべての配列要素が返されますが、順序は保証されません。この関数はフラットな配列とネストされた配列の両方を処理できます。
|
||
|
||
**構文**
|
||
|
||
```sql
|
||
arrayRandomSample(arr, samples)
|
||
```
|
||
|
||
**引数**
|
||
|
||
- `arr` — サンプル要素を抽出する入力配列。([Array(T)](../data-types/array.md))
|
||
- `samples` — ランダムサンプルに含める要素の数 ([UInt*](../data-types/int-uint.md))
|
||
|
||
**返される値**
|
||
|
||
- 入力配列からランダムにサンプルした要素の配列。[配列](../data-types/array.md)。
|
||
|
||
**例**
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayRandomSample(['apple', 'banana', 'cherry', 'date'], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```
|
||
┌─res────────────────┐
|
||
│ ['cherry','apple'] │
|
||
└────────────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayRandomSample([[1, 2], [3, 4], [5, 6]], 2) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```
|
||
┌─res───────────┐
|
||
│ [[3,4],[5,6]] │
|
||
└───────────────┘
|
||
```
|
||
|
||
クエリ:
|
||
|
||
```sql
|
||
SELECT arrayRandomSample([1, 2, 3], 5) as res;
|
||
```
|
||
|
||
結果:
|
||
|
||
```
|
||
┌─res─────┐
|
||
│ [3,1,2] │
|
||
└─────────┘
|
||
```
|
||
|
||
## 距離関数
|
||
|
||
サポートされているすべての関数は、[距離関数のドキュメント](../../sql-reference/functions/distance-functions.md)に記載されています。
|