R
Size: a a a
R
R
l
S
┌─explain──────────────────────────────────────────┐
│ (Expression) │
│ ExpressionTransform │
│ (Filter) │
│ FilterTransform │
│ (Aggregating) │
│ Resize 16 → 1 │
│ AggregatingTransform × 16 │
│ StrictResize 16 → 16 │
│ (Expression) │
│ ExpressionTransform × 16 │
│ (SettingQuotaAndLimits) │
│ (Expression) │
│ ExpressionTransform × 16 │
│ (Materializing) │
│ MaterializingTransform × 16 │
│ (Expression) │
│ ExpressionTransform × 16 │
│ (SettingQuotaAndLimits) │
│ (ReadFromStorage) │
│ MergeTreeThread × 16 0 → 1 │
└──────────────────────────────────────────────────┘
A
CREATE TABLE default.impressions_a4930_4930_ftp
(
`date` Date,
`__account_id` String,
`__row_hash` UInt64,
`__row_id` UInt16,
`__sign` Int8,
`__insert_date` DateTime,
`advertiser_id` String,
`advertiser_name` String,
`insertion_order_id` String,
`insertion_order_name` String,
`package_id` String,
`package_name` String,
`line_item_id` LowCardinality(String),
`line_item_name` String,
`ad_id` String,
`creative_id` String,
`creative_name` LowCardinality(String),
`currency` String,
`user_id` String,
`mobile_device_id` String,
`impression` Float64,
`impression_datetime` String,
`click` Float64,
`click_datetime` String,
`inventory_source_name` String,
`creative_size` String,
`video_player_size` String,
`video_playback_method` String,
`tld` String,
`subdomain` String,
`region_name` String,
`dma_name` LowCardinality(String),
`postal_code` String,
`device_type` String,
`mobile_device_type` String,
`os_type_name` String,
`browser_type_name` String,
`country` String,
`media_channel_name` String,
`format` String,
`environment` String,
`mobile_device_manufacturer` String,
`mobile_device_model` String,
`ad_position` String,
`percent25_events` Float64,
`percent50_events` Float64,
`percent75_events` Float64,
`percent100_events` Float64,
`sum_cost` Float64,
`__key_hash` UInt64,
`iab_in_view_imp` Float64
)
ENGINE = CollapsingMergeTree(__sign)
PARTITION BY toYYYYMM(date)
ORDER BY (date, __account_id, __row_hash, __row_id)
SETTINGS index_granularity = 8192
A
СС
S
ALTER TABLE ... OPTIMIZE PARTITION ... DEDUPLICATE
?S
S
S
(item_id Int64, clock DateTime, value Float64)
. Случается, что в таблицу попадают дубликаты, как полные, так и совпадающие по (item_id,clock) но различающиеся по value. Для расчетов нужно учитывать только одно значение на (item_id,clock) и возвращать за отчетный диапазон времени по одной записи вида (item_id Int64, values Array(Float64))
. Нашли пока два способа. Первый: в подзапросе select item_id, clock, any(value) values ... group by item_id, clock
, на уровне выше select item_id, groupArray(values) values ... group by item_id
. Второй: всё в одном запросе заковыристой комбинацией лямбд select item_id, arrayMap(x -> (x.2), arrayFilter((i, x) -> (x = 1), groupArrayDistinct((clock, value)) as clock_value, arrayEnumerateUniq(arrayMap(x -> (x.1), clock_value)))) values ... group by item_id
. Второй вариант валит сервер на большом количестве данных. Есть ли иные, более "прямые" варианты?DT
L
L
D
Локальная версия запроса в конечном итоге будет выполнена на каждом хосте кластера, даже если некоторые хосты в данный момент не доступны. Гарантируется упорядоченность выполнения запросов в рамках одного хоста.
D
K
S
SELECT
any(device) AS device,
any(line_item_id) AS line_item_id,
any(tactic) AS tactic,
any(target) AS target,
any(line_item_name) AS line_item_name,
any(line_item_name_2) AS line_item_name_2,
any(outside_target_dma) AS outside_target_dma,
any(creative) AS creative,
date AS date,
any(inside_target_dma) AS inside_target_dma,
toFloat64(sum(impression * __sign)) AS impression,
any(channel) AS channel,
__account_id AS account_id
FROM impressions_4930
GROUP BY
date,
__account_id,
__row_hash,
__row_id
HAVING sum(__sign) > 0
Code: 241. DB::Exception: Received from localhost:9000. DB::Exception: Memory limit (for query) exceeded: would use 46.57 GiB (attempt to allocate chunk of 4216924 bytes), maximum: 46.57 GiB: While executing AggregatingTransform.
A
A