ClickHouse/docs/fa/sql_reference/data_types/nested_data_structures/nested.md
2020-04-04 12:15:31 +03:00

6.5 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 57 تو در تو(Name1 Type1, Name2 Type2, ...)

Nested(name1 Type1, Name2 Type2, …)

A nested data structure is like a table inside a cell. The parameters of a nested data structure the column names and types are specified the same way as in a 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 جدول می تواند به صفر یا هر تعداد از تبدیل مطابقت دارد.

فقط یک سطح تودرتو تک پشتیبانی می شود. ستون های سازه های تو در تو حاوی ارریس معادل چندین بعدی هستند بنابراین پشتیبانی محدودی دارند (هیچ پشتیبانی ای برای ذخیره این ستون ها در جداول با موتور ادغام وجود ندارد).

در بیشتر موارد, در هنگام کار با یک ساختار داده های تو در تو, ستون خود را با نام ستون جدا شده توسط یک نقطه مشخص. این ستون ها مجموعه ای از انواع تطبیق را تشکیل می دهند. تمام ستون ها از یک ساختار داده های تو در تو یکسان هستند.

مثال:

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'] │
└────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────────┘

ساده ترین راه این است که از یک ساختار داده های تو در تو فکر می کنم به عنوان مجموعه ای از مجموعه ای از مجموعه های ستون های متعدد از همان طول.

تنها جایی که پرس و جو را انتخاب کنید می توانید نام کل ساختار داده های تو در تو به جای ستون های فردی مشخص مجموعه ملحق بند. برای کسب اطلاعات بیشتر, دیدن “ARRAY JOIN clause”. مثال:

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 │
└─────────┴─────────────────────┘

شما نمی توانید انتخاب کنید برای کل ساختار داده های تو در تو انجام دهد. شما فقط می توانید به صراحت ستون های فردی را که بخشی از این هستند لیست کنید.

برای پرس و جو درج, شما باید تمام عناصر ستون مولفه از یک ساختار داده های تو در تو به طور جداگانه منتقل (در صورتی که مجموعه فردی بودند). در حین درج سیستم چک می کند که همان طول را دارند.

برای پرس و جو توصیف, ستون در یک ساختار داده های تو در تو به طور جداگانه در همان راه ذکر شده.

پرس و جو را تغییر دهید برای عناصر در یک ساختار داده های تو در تو دارای محدودیت.

مقاله اصلی