
Shine
20.12.2016
10:58:46
О, супер! Новая статья :)

Igor
20.12.2016
10:59:50
мне и в нашей команде тяжело объяснить почему php , а не c, java,python
используем все)

Google

Alexander
20.12.2016
11:02:30
На самом деле, это может быть примером того, что пользоваться СlickHouse -- это совсем не rocket science. Так что оно даже, может, и хорошо, что на php, а не на чем-нибудь более сложном
Хотя статья типа "ML-инфраструктура на Хаскеле и ClickHouse" смотрелась бы более внушительно :)

Igor
20.12.2016
11:14:41
> Alexander
На самом деле, это может быть примером того, что пользоваться СlickHouse -- это совсем не rocket science. Так что оно даже, может, и хорошо, что на php, а не на чем-нибудь более сложном
Как и обсуждали на митапе - нужно просто и с "комиксами" -> чтобы технология пошла в массы
А как оказалось писать простым языком - это ооооочень тяжелый труд )
Знаю что детские учебники пишут академики.... я им не завидую )

Alexander
20.12.2016
11:17:58
« Если вы не можете объяснить это простыми словами, вы не до конца это понимаете »
Альберт Эйнштейн

Alexander
20.12.2016
11:18:44
Я как-то делал доклад на тему "BigData для чайников". Очень помогает искать простые слова и аналогии :)

Anatoly
20.12.2016
11:23:49

Alexander
20.12.2016
11:34:05
интересно
С тех пор, как математики взялись за Теорию относительности, я сам перестал ее понимать. (А. Эйнштейн)
P. S. чтобы не разводить холивар, пишу публикации по теории графов, всегда стараюсь объяснить на пальцах все, без заумных слов
даже если это читают только люди в ВА
ВАК

Anatoly
20.12.2016
11:37:52
:) ?

Igor
20.12.2016
19:58:07
Подскажите, а что нибудь появилось новое для построения дашбордов с графиками помимо reDash, pentaho под CH, у меня сейчас задача проверить много гипотез на данных - самый простой вариант это корреляции на графиках искать, а с jupyter я не очень дружу )

Alexey
20.12.2016
20:00:22
Может это? https://groups.google.com/forum/#!topic/clickhouse/9T9sQAJiPEM
Сам не проверял.

Google

Igor
20.12.2016
20:05:16
?Спасибо! попробую

Igor
21.12.2016
08:08:40
а можно как-нибудь посчитать соотношение/процентики от общего количества сгруппированных данных?
типа того:
SELECT date, count() AS cnt, ??? AS percentage FROM table GROUP BY date
date count percentage
2016-12-18 153 18%
2016-12-19 241 28%
2016-12-20 295 34%
2016-12-21 169 20%
---
total: 858 100%
получилось как-то так
SELECT
a_date,
a_cnt,
round(a_cnt / total, 2) AS percentage
FROM
(
SELECT
groupArray(date) AS a_date,
groupArray(cnt) AS a_cnt,
sum(cnt) AS total
FROM
(
SELECT
date,
count() AS cnt
FROM table
WHERE date >= '2016-12-18'
GROUP BY date
)
)
ARRAY JOIN a_date, a_cnt


Stepan
21.12.2016
09:36:42
Ребяты, привет!
Такой очень очень простой кейс: 8 тачек с таблицей в 22 млрд.
Длинный первичный ключ, т.к. ReplacingMergeTree используется для схлопывания дублей.
Запрос формата:
select col1, col2, ..., colN from table where id='214352512532';
где id - первое поле первичного ключа.
Запросы идут в распределенную таблицу, в которую заливались записи с ключом шардирования cityHash64(id).
Гранулярность индекса 8192
Вот лог на тачке без мержа (читай вспомогательной):
########################
...WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.902808 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.902827 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.903474 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 24 parts by date, 24 parts by key, 24 marks to read from 24 ranges
2016.12.21 09:27:27.905881 [ 28 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 196608 rows
2016.12.21 09:27:27.905954 [ 28 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.907098 [ 28 ] <Debug> executeQuery: Query pipeline:
Union
Expression × 20
Filter
MergeTreeThread
2016.12.21 09:27:30.091786 [ 2227 ] <Debug> MergeTreeReadPool: Slow read, event №1: read 52003 bytes in 2.065 sec., 0.025 MB/s.
2016.12.21 09:27:31.284043 [ 2228 ] <Debug> MergeTreeReadPool: Slow read, event №2: read 23942 bytes in 1.013 sec., 0.024 MB/s.
2016.12.21 09:27:31.284077 [ 2228 ] <Debug> MergeTreeReadPool: Will lower number of threads to 19
2016.12.21 09:27:31.852538 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852754 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.852869 [ 28 ] <Information> executeQuery: Read 196608 rows, 41.72 MiB in 3.951 sec., 49756 rows/sec., 10.56 MiB/sec.
2016.12.21 09:27:31.852900 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852909 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.853147 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for query): 197.51 MiB.
2016.12.21 09:27:31.853166 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for user): 197.51 MiB.
2016.12.21 09:27:31.853174 [ 28 ] <Debug> MemoryTracker: Peak memory usage (total): 197.51 MiB.
2016.12.21 09:27:31.853281 [ 28 ] <Information> TCPHandler: Processed in 3.953 sec.
########################
Вот лог на тачке с распредделенной табличкой, где мерж происходит:
########################
WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.895044 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.895103 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.895825 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 19 parts by date, 19 parts by key, 20 marks to read from 19 ranges
2016.12.21 09:27:27.897585 [ 4876 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 163840 rows
2016.12.21 09:27:27.897640 [ 4876 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.898588 [ 4876 ] <Trace> InterpreterSelectQuery: WithMergeableState -> Complete
2016.12.21 09:27:27.899785 [ 4876 ] <Debug> executeQuery: Query pipeline:
Union
Expression
Materializing
Union
Expression × 19
Filter
MergeTreeThread
Expression × 7
Remote
2016.12.21 09:27:31.422427 [ 28 ] <Trace> ODBCDictionarySource: SELECT code, value FROM operand_type;
2016.12.21 09:27:35.270417 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270492 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270500 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270663 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270721 [ 4876 ] <Information> executeQuery: Read 1624972 rows, 343.17 MiB in 7.377 sec., 220271 rows/sec., 46.52 MiB/sec.
2016.12.21 09:27:35.270742 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270748 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270757 [ 4876 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:35.270763 [ 4876 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:35.270928 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (for query): 118.77 MiB.
2016.12.21 09:27:35.270940 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (for user): 118.77 MiB.
2016.12.21 09:27:35.270944 [ 4876 ] <Debug> MemoryTracker: Peak memory usage (total): 118.77 MiB.
########################
По времени выполнени то в жар, то в холод. Иногда прям очень резво, а иногда 15 сек. переваривает.
Основной вопрос: что за: Slow read, event №1: read 52003 bytes in 2.065 sec., 0.025 MB/s. и как этого избежать? Что можно/нужно подкрутить?


Maxim
21.12.2016
12:33:54
Добрый день, после не предвиденного отключения питания в логах clickHouse мы видим много ошибок: Considering to remove broken part "путь до партиции" because it's impossible to repair.
Можем ли мы восстановить битые патриции.
Спасибо, жду ответа.

Evgeniy
21.12.2016
13:01:15


Alexey
21.12.2016
13:03:12
Ребяты, привет!
Такой очень очень простой кейс: 8 тачек с таблицей в 22 млрд.
Длинный первичный ключ, т.к. ReplacingMergeTree используется для схлопывания дублей.
Запрос формата:
select col1, col2, ..., colN from table where id='214352512532';
где id - первое поле первичного ключа.
Запросы идут в распределенную таблицу, в которую заливались записи с ключом шардирования cityHash64(id).
Гранулярность индекса 8192
Вот лог на тачке без мержа (читай вспомогательной):
########################
...WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.902808 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.902827 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.903474 [ 28 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 24 parts by date, 24 parts by key, 24 marks to read from 24 ranges
2016.12.21 09:27:27.905881 [ 28 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 196608 rows
2016.12.21 09:27:27.905954 [ 28 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.907098 [ 28 ] <Debug> executeQuery: Query pipeline:
Union
Expression × 20
Filter
MergeTreeThread
2016.12.21 09:27:30.091786 [ 2227 ] <Debug> MergeTreeReadPool: Slow read, event №1: read 52003 bytes in 2.065 sec., 0.025 MB/s.
2016.12.21 09:27:31.284043 [ 2228 ] <Debug> MergeTreeReadPool: Slow read, event №2: read 23942 bytes in 1.013 sec., 0.024 MB/s.
2016.12.21 09:27:31.284077 [ 2228 ] <Debug> MergeTreeReadPool: Will lower number of threads to 19
2016.12.21 09:27:31.852538 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852754 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.852869 [ 28 ] <Information> executeQuery: Read 196608 rows, 41.72 MiB in 3.951 sec., 49756 rows/sec., 10.56 MiB/sec.
2016.12.21 09:27:31.852900 [ 28 ] <Trace> UnionBlockInputStream: Waiting for threads to finish
2016.12.21 09:27:31.852909 [ 28 ] <Trace> UnionBlockInputStream: Waited for threads to finish
2016.12.21 09:27:31.853147 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for query): 197.51 MiB.
2016.12.21 09:27:31.853166 [ 28 ] <Debug> MemoryTracker: Peak memory usage (for user): 197.51 MiB.
2016.12.21 09:27:31.853174 [ 28 ] <Debug> MemoryTracker: Peak memory usage (total): 197.51 MiB.
2016.12.21 09:27:31.853281 [ 28 ] <Information> TCPHandler: Processed in 3.953 sec.
########################
Вот лог на тачке с распредделенной табличкой, где мерж происходит:
########################
WHERE bar_code = '61226094020347' FORMAT JSON
2016.12.21 09:27:27.895044 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Key condition: (column 0 in ['61226094020347', '61226094020347'])
2016.12.21 09:27:27.895103 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Date condition: unknown
2016.12.21 09:27:27.895825 [ 4876 ] <Debug> merge.matreshka_merge_half_year (SelectExecutor): Selected 19 parts by date, 19 parts by key, 20 marks to read from 19 ranges
2016.12.21 09:27:27.897585 [ 4876 ] <Trace> merge.matreshka_merge_half_year (SelectExecutor): Reading approx. 163840 rows
2016.12.21 09:27:27.897640 [ 4876 ] <Trace> InterpreterSelectQuery: FetchColumns -> WithMergeableState
2016.12.21 09:27:27.898588 [ 4876 ] <Trace> InterpreterSelectQuery: WithMergeableState -> Complete
2016.12.21 09:27:27.899785 [ 4876 ] <Debug> executeQuery: Query pipeline:
Union
Expression
Materializing
Union
Expression × 19
Filter
MergeTreeThread
Expression × 7
Remote
Взять для рассмотрения один сервер, на котором можно проверять производительность запроса локально. Выполнять запрос и смотреть в iostat -d -m -x 1. Для коротких запросов можно попробовать уменьшить число потоков.


Vitaliy
21.12.2016
13:32:54
возиожно ли запустить ch на серванте без sse4_2?

Maxim
21.12.2016
13:35:48
не надо на серванте, возьмите лучше платяной шкаф

Vitaliy
21.12.2016
13:36:01
%)
я как-то провтыкал, что у меня несколько серверов без этой инструкции....

Vladimir
21.12.2016
17:38:25
Тут думаю кто нибудь даже скажет на какиих

Alexey
21.12.2016
19:08:47

Vitaliy
21.12.2016
19:09:25
Model name: AMD Opteron(tm) Processor 4170 HE
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good nopl nonstop_tsc extd_apicid pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw ibs skinit wdt nodeid_msr hw_pstate vmmcall npt lbrv svm_lock nrip_save pausefilter

Alexey
21.12.2016
19:12:33
Нетривиально, так как нужно редактировать код. В коде всего несколько (примерно три штуки) мест, где SSE 4.2 используется явно. Везде предоставлена альтернатива под дефайнами, но условия для неё просто смотрят на x86_64 или ARM, а не на версию SSE.

Google

Vitaliy
21.12.2016
19:16:56
В пятницу попробую пнуть dcops - может дадут машинки на e5
Не хочеться извращаться с кодом...

Vladimir
21.12.2016
20:08:24

Alexey
21.12.2016
20:10:32
Только чуть-чуть.

Konstantin
22.12.2016
10:05:52
У rawbinary формата (для записи) есть колонко-ориентированный вариант?
Типа записал 5000 значений для первого столбца, потом 5000 для второго, и так далее


Alexander
22.12.2016
11:37:33
Коллеги, всем привет. Скажите, а надо какими-то специальными параметрами настраивать ClickHouseProperties или ClickHouseDataSource чтобы можно было делать из джава кода INSERT в 50000 - 200000 строк через jdbsTemplate?
У меня приложение берет данных из одного хранилища, обрабатывает их и статистику планируется складывать в КХ. Для этого используется jdbsTemplate спринговый, в который в качества парамерта конструктора передается clickHouseDataSource, то есть jdbcTemplate = new JdbcTemplate(clickHouseDataSource)
Но когда я делаю INSERT в котором достаточно много VALUES, а именно больше 4000, то у меня вываливается ошибка
; nested exception is ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: java.lang.Throwable: Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
ну если сокращают размер инсерта меньше 3000, то инсерт проходит
выводил в файл данные. при возникновении exception, такое ощущение, что если там инсертиться 5000 строк, то из них выводится 4700 строк примерно, а остальных 300 просто нет
при приобразование toDate похоже туда null передается и вот такой exception вылетает
хочется ускорить приложение, чтобы делать жирные инсерты, тем более в доке рекомендуется инсертить от 50000 до 200000 строк


Renat
22.12.2016
11:43:17
кто как хранит "онлайн" данные? нужно получать колличество событий за последние 5 минут с разными разрезами.
Есть мысль создавать на каждую минуту по одной таблице и делать к ним запросы используя движок Merge(). Старые таблицы удалять спустя 5 минут.
Это норм или есть варианты лучше?

Alexander
22.12.2016
11:47:47
А зачем удалять? Храните все, удалить всегда успеете

Konstantin
22.12.2016
11:53:34
Дык место

Igor
22.12.2016
11:56:24
это ж сколько событий о___О

Renat
22.12.2016
11:57:31
> А зачем удалять?
эти же данные есть в другой таблице, этот функционал хотелось бы вынести на отдельный сервер/кластер. Не хочется излишне юзать диск.
интуитивно думается, что если данные не удалять, то это будет сложнее для кликхауса с запросами вида datetime > now() - 60*5. Возможно это не так.

Alexander
22.12.2016
11:58:29
попробую использоват batchUpdate, может получится


Fike
22.12.2016
12:01:46
Коллеги, всем привет. Скажите, а надо какими-то специальными параметрами настраивать ClickHouseProperties или ClickHouseDataSource чтобы можно было делать из джава кода INSERT в 50000 - 200000 строк через jdbsTemplate?
У меня приложение берет данных из одного хранилища, обрабатывает их и статистику планируется складывать в КХ. Для этого используется jdbsTemplate спринговый, в который в качества парамерта конструктора передается clickHouseDataSource, то есть jdbcTemplate = new JdbcTemplate(clickHouseDataSource)
Но когда я делаю INSERT в котором достаточно много VALUES, а именно больше 4000, то у меня вываливается ошибка
; nested exception is ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: ru.yandex.clickhouse.except.ClickHouseUnknownException: ClickHouse exception, code: 1002, host: localhost, port: 8123; Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Caused by: java.lang.Throwable: Code: 36, e.displayText() = DB::Exception: Element of set in IN or VALUES is not a constant expression: toDateTime: (at row 54715), e.what() = DB::Exception
Вас не смущает текст ошибки? Там не в размере батча дело.


Alexander
22.12.2016
12:02:32
просто когда размер меньше 3000, такой ошибки не возникает, а когда больше 4000, то он делает toDate от null
но мне подсказали, что я просто генерю здоровый SQL запрос делая sqlQuery.append("(?, ?, ?, toDate(?), toDateTime(?), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
а потом делая jdbcTemplate.update(sqlQuery.toString(), objects);

Google

Alexander
22.12.2016
12:03:41
а есть batchUpdate в jdbsTemplate для этих целей
я просто про эту функция не знал
сча попробую через нее сделать, во всяком случае на том проекте, где так пишут, все нормально работает
и вообше писать такие большие SQL очень плохая практика
Кстати, а сколько времени КликХаус создавали? Или это конфеленциальная информация?)

Igor
22.12.2016
13:06:36
ну, в репозитории первые коммиты датированы вроде 2009 годом


Igor
22.12.2016
16:16:39
кто как хранит "онлайн" данные? нужно получать колличество событий за последние 5 минут с разными разрезами.
Есть мысль создавать на каждую минуту по одной таблице и делать к ним запросы используя движок Merge(). Старые таблицы удалять спустя 5 минут.
Это норм или есть варианты лучше?
Пробовал две схемы, обе на SummingMergeTree - нам нужно хранить данные о показах статей - ahash; на сайтах - site_id, по разным разрезам group_name - но разрезов конечное число и не большое до 15. Т/е нам нужны только факты показа, без детальной информации типа user_agent,ip... Главное realtime чтение нужных элементов c небольшой задержкой от текущего момента времени.
1) Вариант когда колонки были минутами
PK(event_date,event_time, site_id, ahash, group_name) и колоники view_00,views_01,.... views_59
event_time - пишется время события с округлением в час
2) Вариант когда колонки группы
PK(event_date,event_time, site_id, ahash) и колоники group_1....group_14,group_15
event_time - пишется время события без секунд
Оба варианта были хороши по записе, но используем второй вариант - т/к оказался самым удобным для чтения.
Попробуйте сперва представить чтение данных, а потом уже сделаете запись)
Таким методом мы обсчитываем показ всех статей практически всех СМИ в РФ за последние 2 минуты/час/сутки.


Вася
23.12.2016
09:17:56
Привет. Подскажите как лечить такую ошибку при вставке:
DB::Exception: Not found column lastcount in block. There are only columns: Date, TimeStamp, NormalizedUrl, NormalizedParameters, HttpStatus, ReceivedBytes, SentBytes, UpstreamTime, AuthSid, PortalUserId, TraceId, group10, group50, group100, group500, group1000, group2000, groupGt2000, stattime.

Igor
23.12.2016
09:18:12
как вставляете?

Вася
23.12.2016
09:18:48
INSERT INTO ??? FORMAT VALUES

Igor
23.12.2016
09:19:18
и столбец lastcount в "???" не перечислен?)
это вью или таблица?

Вася
23.12.2016
09:19:40
INSERT INTO db.Table_2016_12_23 (Date, TimeStamp, NormalizedUrl, NormalizedParameters, HttpStatus, ReceivedBytes, SentBytes, UpstreamTime, AuthSid, PortalUserId, TraceId) FORMAT Values ('2016-12-23', '2016-12-23 05:03:08', 'someurl', '=-', 302, 1029, 566, 0.33, '', '', 'someid')

Igor
23.12.2016
09:20:03
хмм
а есть вьюхи, которые смотрят на эту таблицу, у которых есть столбец lastcount?
а то очень похоже на вот этот баг https://github.com/yandex/ClickHouse/issues/127

Вася
23.12.2016
09:20:42
Есть Merge-табличка над кучей таблиц. В том числе и над этой.
Хотя и вьюха есть с таким столбцом. Видимо тот же баг. Спасибо.

Alexander
23.12.2016
12:47:42
Коллеги, всем привет.
А есть в КХ конструкция
WITH q AS (SELECT dummy FROM DUAL)
SELECT dummy FROM q;
как в Оракле или аналог?
судя по доке WITH нет

Igor
23.12.2016
12:48:15
а что делает FROM DUAL?

Vladislav
23.12.2016
12:48:19
Нет еще, но вроде обещали

Google

Vladislav
23.12.2016
12:48:50
Используется в основном как заглушка синтаксиса, при селекте константы

Igor
23.12.2016
12:51:26
а это совсем не то, да? (извините если что)
SELECT dummy FROM (SELECT 'X' AS dummy);

Eduard
23.12.2016
12:52:18
так нельзя селектить дважды из орезультата одного поздапроса
with q as (select dummy from dual)
select dummy
from q
join q using (dummy);

Igor
23.12.2016
12:53:47
ааа, понял, спасибо!

Eduard
23.12.2016
12:54:46
велкам

f1yegor
23.12.2016
15:31:45
кто-нибудь делает JOIN более двух таблиц? у меня получается очень громоздко и неудобно, т.к. нет поддержки больше 2JOIN и алиасов

Igor
23.12.2016
15:37:48
да, я делал
выглядит ужасно, но по-другому никак пока

Dmitry
23.12.2016
15:39:59
По возможности использовать внешние словари

Igor
23.12.2016
15:41:08
вот да
и может целесообразен вариант пихать всё в одну таблицу с новым полем а-ля type, а потом делать по этой таблице GROUP BY и anyIf/countIf/sumIf с фильтром по type
судя по этому слайду, можно ждать через год

f1yegor
23.12.2016
15:44:36
у нас отношение one-to-many, пока наверно не будем пихать в одну таблицу

Dmitry
23.12.2016
15:45:07
есть массивы

papa
23.12.2016
15:45:10

Alexey
23.12.2016
16:50:07
Опубликовано видео 21 ноября: https://events.yandex.ru/lib/talks/4351/