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

ネストされた

Nested(name1 Type1, Name2 Type2, ...)

ネストされたデータ構造は、セル内のテーブルのようなものです。ネストされたデータ構造のパラメーター – カラム名とタイプ – は、CREATE TABLE クエリと同様に指定されます。各テーブルの行は、ネストされたデータ構造内の任意の数の行に対応できます。

例:

CREATE TABLE test.visits
(
    CounterID UInt32,
    StartDate Date,
    Sign Int8,
    IsNew UInt8,
    VisitID UInt64,
    UserID UInt64,
    ...
    Goals Nested
    (
        ID UInt32,
        Serial UInt32,
        EventTime DateTime,
        Price Int64,
        OrderID String,
        CurrencyID UInt32
    ),
    ...
) ENGINE = CollapsingMergeTree(StartDate, intHash32(UserID), (CounterID, StartDate, intHash32(UserID), VisitID), 8192, Sign)

この例では、コンバージョン(達成された目標)に関するデータを含むGoalsネストされたデータ構造が宣言されています。 'visits' テーブルの各行は、ゼロまたは任意の数のコンバージョンに対応できます。

flatten_nested0に設定されている場合(デフォルトではありません)、任意のレベルのネストがサポートされます。

ネストされたデータ構造を操作する場合、通常、そのカラムはドットで区切られたカラム名で指定されます。これらのカラムは、一致するタイプの配列を構成します。単一のネストされたデータ構造のすべてのカラム配列は、同じ長さを持ちます。

例:

SELECT
    Goals.ID,
    Goals.EventTime
FROM test.visits
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
┌─Goals.ID───────────────────────┬─Goals.EventTime───────────────────────────────────────────────────────────────────────────┐
│ [1073752,591325,591325]        │ ['2014-03-17 16:38:10','2014-03-17 16:38:48','2014-03-17 16:42:27']                       │
│ [1073752]                      │ ['2014-03-17 00:28:25']                                                                   │
│ [1073752]                      │ ['2014-03-17 10:46:20']                                                                   │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:59:20','2014-03-17 22:17:55','2014-03-17 22:18:07','2014-03-17 22:18:51'] │
│ []                             │ []                                                                                        │
│ [1073752,591325,591325]        │ ['2014-03-17 11:37:06','2014-03-17 14:07:47','2014-03-17 14:36:21']                       │
│ []                             │ []                                                                                        │
│ []                             │ []                                                                                        │
│ [591325,1073752]               │ ['2014-03-17 00:46:05','2014-03-17 00:46:05']                                             │
│ [1073752,591325,591325,591325] │ ['2014-03-17 13:28:33','2014-03-17 13:30:26','2014-03-17 18:51:21','2014-03-17 18:51:45'] │
└────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘

ネストされたデータ構造は、同じ長さの複数のカラム配列のセットとして考えるのが最も簡単です。

SELECTクエリがネストされたデータ構造全体の名前を指定できる唯一の場所は、ARRAY JOIN句です。詳細については、「ARRAY JOIN句」を参照してください。例:

SELECT
    Goal.ID,
    Goal.EventTime
FROM test.visits
ARRAY JOIN Goals AS Goal
WHERE CounterID = 101500 AND length(Goals.ID) < 5
LIMIT 10
┌─Goal.ID─┬──────Goal.EventTime─┐
│ 1073752 │ 2014-03-17 16:38:10 │
│  591325 │ 2014-03-17 16:38:48 │
│  591325 │ 2014-03-17 16:42:27 │
│ 1073752 │ 2014-03-17 00:28:25 │
│ 1073752 │ 2014-03-17 10:46:20 │
│ 1073752 │ 2014-03-17 13:59:20 │
│  591325 │ 2014-03-17 22:17:55 │
│  591325 │ 2014-03-17 22:18:07 │
│  591325 │ 2014-03-17 22:18:51 │
│ 1073752 │ 2014-03-17 11:37:06 │
└─────────┴─────────────────────┘

ネストされたデータ構造全体に対してSELECTを実行することはできません。個々のカラムを明示的に列挙することしかできません。

INSERTクエリの場合、ネストされたデータ構造のすべてのコンポーネントカラム配列を個別に渡す必要があります(個別のカラム配列のように)。挿入中、システムはそれらの長さが同じであることを確認します。

DESCRIBEクエリの場合、ネストされたデータ構造のカラムは同様に個別にリストされます。

ネストされたデータ構造の要素に対するALTERクエリには制限があります。