|
|
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Этот вопрос не о том как транспонировать конкретную таблицу. Мне интересен теоретический ответ о том, почему в стандарте SQL до сих пор нет просто одной команды, которая бы это делала? Есть теоретическая проблема, которая не дает написать такую функцию и встроить ее в SQL? В SAS есть proc transpose; в разных программах типа Teradata Miner есть модули, которые пишут SQL для этого; на форуме тоже можно найти разные скрипты. А вот так чтобы сказать Код: plaintext Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 15:22 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Я полагаю, что бы быдлокодеры не пытались сделать транспозиорование терабайтной таблицы. Есть же OLAP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 16:14 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Cat2, придумай совершенную защиту от дурака и природа создаст еще более совершенного дурака. Твой аргумент из области практики. Как это в теории то объяснятеся? Ну и потом, OLAP это как известно online analytical processing. А я говорю про data definition language ddl. Т.е. вот мне для определенной цели нужна транспонированная таблица (иногда и несколько терабайт может занимать). Например для последующего статистического моделирования. Там никакого OLAP нет. В данный момент приходится практически ручками sum (case x) statements писать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 16:30 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposer, А вас не смущает например то, что у столбца есть тип данных, а у строки нет? Как будет выглядеть ваше "parameters"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 19:50 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
wildwind, Не понял проблемы. Из вполне определенной таблицы со столбцами по вполне определенному алгоритму получается другая таблица тоже со столбцами. Причем здесь тип данных строк? И вот SAS proc transpose же написали. Это просто как пример, что вполне можно такую функцию написать и поддерживать. Тип данных в SAS тоже существует как понятие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 19:58 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposer вот SAS proc transpose же написали. Так и вы напишите. :) Она ведь будет всего лишь генерить нужный SQL. Почему процедура, генерирующая SQL, не встроена в синтаксис? Потому что вам нужно одно транспонирование, мне чуть другое, а кому-то сильно другое. Всего не предусмотришь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 20:04 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposer пишет: > Этот вопрос не о том как транспонировать конкретную таблицу. > Мне интересен теоретический ответ о том, почему в стандарте SQL до сих > пор нет просто одной команды, которая бы это делала? Есть теоретическая > проблема, которая не дает написать такую функцию и встроить ее в SQL? Да, есть. Таблица -- не матрица, где измерения симметричны (на самом деле они и в матрицах не всегда симметричны). Таблицу транспонировать нельзя. Таблица -- это потенциально бесконечное неупорядоченное множество кортежей (записей), где каждая запись - это неупорядоченный набор атрибутов, количество которых конечно и фиксированно. Для начала проблема будет с бесконечной мощностью множества записей и конечностью множества атрибутов. Конечное множество неравномощно бесконечному, оно не может отображаться в бесконечное однозначно. Грубо говоря, бесконечное число строк в конечное число столбцов не запихать. Ну и вообще, операция бессмысленная. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2009, 23:34 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
MasterZivНу и вообще, операция бессмысленная Козьма Петрович ПрутковНекоторые вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий Операция осмысленная и приносит конкретные результаты в виде таблицы. Так же как и create as select. Она вообще является подмножеством select. Конечное множество не равномощно бесконечному, но на то и существуют отображения множеств, в народе называемые функциями. Вот документации реализации такой функции proc transpose в SAS http://analytics.ncsu.edu/sesug/2005/TU12_05.PDF Почему ее не включают в SQL? Ну и вообще любая функция базы данных в реальности действует на ограниченном множестве параметров и значений, так как место на диске ограничено. В нашем случае число distinct значений в колонке, которые должны стать именами новых колонок должно быть ограничено. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 01:44 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
wildwind, ну вот для SAS написали и стандартизировали. Почему не стандартизировать и в SQL? При транспонировании нужно не так уж много разнообразных стратегий. В Teradata есть даже графическая утилитка, которая такие SQL пишет, вот взять бы ее (в текстовом формате) и принять в стандарт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 01:48 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Кстати вот пример еще такой неочевидной функции: "connect by". Она только относительно недавно появилась в стандарте, как я помню ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 01:50 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposer wrote: > Операция осмысленная и приносит конкретные результаты в виде таблицы. > Так же как и create as select. Она вообще является подмножеством select. > > Конечное множество не равномощно бесконечному, но на то и существуют > отображения множеств, в народе называемые функциями. Я же написал и по-простому тоже. Нельзя создать таблицу с потенциально бесконечным числом столбцов. Конечно, в конкретной таблице кол-во строк конечное. Но оно может быть например 100 000. В современных СУБД кол-во полей обычно ограничено, и ограничения эти -- 100-200 полей. Так что тупо не влезет. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 11:19 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
MasterZiv, странный разговор получается, я вам говорю, да вы и не отрицаете, что есть конкретные реализации задачи транспонирования. А в следующем предложении вы говорите, что это невозможно и не нужно. Может осталось незамеченным, что при транспонировании происходит агрегация по distinct value из первой колонки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 11:30 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposer wrote: > странный разговор получается, я вам говорю, да вы и не отрицаете, что > есть конкретные реализации задачи транспонирования. А в следующем > предложении вы говорите, что это невозможно и не нужно. > > Может осталось незамеченным, что при транспонировании происходит > агрегация по distinct value из первой колонки? Дык ты же не определил операцию транспонирования чётко. Определи -- поговорим. Но, думаю, что ничего от наличия distinct -а не изменится. Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 13:20 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposerПочему?Я думаю, что каждый из здесь присутствующих сможет привести пример операции, которую приходилось делать, но которая не имеет специально команды в стандарте SQL. И, по моим ощущениям, транспонирование таблицы отнюдь не самая частая из таких операций (хотя у Вас могут быть другие ощущения). Но судя по тому, что еще ни один из производителей СУБД не реализовал у себя такой команды, в стандарт ей явно рановато. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 14:33 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andrey, Кстати, было бы интересно узнать, какие еще такие "полустандартные" паттерны приходится часто кодировать? Но такие, чтобы были с претензией на фундаментальность. Из того, чего раньше не было, я вспоминаю natural join (oracle) и width_bucket (teradata). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 15:55 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Bogdanov Andreyеще ни один из производителей СУБД не реализовал у себя такой команды Это не так. Microsoft издавна любит сводные таблицы (за что его любит офисный пользователь, воспитанный на Экселе), поэтому в Access есть TRANSFORM, а в SQL Server есть PIVOT. Bogdanov Andreyв стандарт ей явно рановато. С этим можно согласиться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 16:10 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposerКстати, было бы интересно узнать, какие еще такие "полустандартные" паттерны приходится часто кодировать? Но такие, чтобы были с претензией на фундаментальность.Ну не знаю насчет фундаментальности. Я вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая. А вот органичение на "непересекаемость" интервалов мне нужно регулярно. Почему такого ограничения нет в стандарте SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2009, 19:01 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
Bogdanov AndreyЯ вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая. Она просто не серверная. Это клиентская операция, операция представления данных. На сервер её тянут только из-за однозвенного мышления. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2009, 23:12 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
softwarerBogdanov AndreyЯ вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая. Она просто не серверная. Это клиентская операция, операция представления данных. На сервер её тянут только из-за однозвенного мышления. в моем мире сервер занимается тем, что нужно больше одного раза или требует ресурсов недоступных на клиенте. На клиенте ресурсы выбираются с точки зрения баланса цены X клиентов и цены этих ресурсов на сервере плюс пропускная способности сети, взвешенных по частоте использования и пиковой нагрузке. Ну и клиент это обычно обычный PC или laptop и у них есть еще свои ограничения в том числе и в образованности техсуппорта. Так что транспонирование таблиц происходит в основном на сервере, на клиенте либо сеть не позволит, либо частота использования сделает бессмысленным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2009, 04:19 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposerв моем мире сервер занимается тем, что нужно больше одного раза "Нарисовать гистограмму по указанным цифрам" нужно явно более одного раза. В вашем мире её рисуют на сервере и передают клиенту в виде bmp? transposer или требует ресурсов недоступных на клиенте. В вашем мире на серверах стоит специальный транспонирующий процессор? transposerНа клиенте ресурсы выбираются с точки зрения баланса цены X клиентов и цены этих ресурсов на сервере плюс пропускная способности сети, взвешенных по частоте использования и пиковой нагрузке. Тяжело, но в целом верно. transposerНу и клиент это обычно обычный PC или laptop и у них есть еще свои ограничения Безусловно. Максимум, что этот клиент потянет - ворд, фотошоп или там какая квака. Транспонирование таблицы ему не по зубам. transposer в том числе и в образованности техсуппорта. И техсаппорт, безусловно, не в силах адекватно ухаживать за железом, способным на столь сложные операции. transposerТак что транспонирование таблиц происходит в основном на сервере, на клиенте либо сеть не позволит, Надо же, какая умная и капризная сеть. А стихи Вознесенского она тоже не пропускает? transposerлибо частота использования сделает бессмысленным. Кэширование результата (транспонированной таблицы) - единственное, что носит хотя бы следы смысла в присутствии на сервере. Но я бы не ожидал увидеть задачу, где такое кэширование даёт реальный выигрыш. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2009, 10:25 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
PIVOT-а конечно в стандарте нету, но оно таки влезет в конце концов. вот кстати, ещё MERGE тоже напрашивается, уж не знаю, есть ли он там.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.10.2009, 23:10 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
softwarer+100 Добавлю, что клиентское ПО (в отличие от серверного) можно написать так, чтобы физическое транспонирование (т.е. перемещение данных в памяти) вообще было не нужно. Например, если выборка содержится в двумерном массиве (или любой другой структуре, значения из которой можно прочитать, указав два индекса), то достаточно будет при обращении к этому массиву поменять местами индексы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.10.2009, 10:38 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
transposerПочему не стандартизировать и в SQL ?Потому что в стандарте SQL еще на этапе parse должно быть известно число столбцов. Соответственно транспонировать в заранее неизвестное число столбцов без динамической генерации запроса - невозможно. Тем не менее у Oracle есть возможность сделать нечто подобное путем использования pivot xml. Вот только подумай надо оно тебе? Это может быть полезно для возврата на клиент ну никак не для создания таблицы. transposerКстати вот пример еще такой неочевидной функции: "connect by". Она только относительно недавно появилась в стандарте, как я помнюТебе редко в жизни попадаются древовидные данные? Оператор connect by появился а Oracle со второй версии в 1979 году. Лично мне более удивительно почему CTE в MSSQL появились только с 2005. А стандарт - это не более чем рекомендации к реализации того или иного функционала. Каждый разработчик СУБД реализует свое видение стандарта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 15:42 |
|
||
|
Почему в SQL нет DDL команды TRANSPOSE?
|
|||
|---|---|---|---|
|
#18+
dbms_photoshop, я пока втыкаю в ответы предыдущих ораторов. Но в вопросе создания транспонированной таблицы ответ простой, такие таблицы нужны для разных злых data mining или аналитических тулзов. Просто если ты хочешь промоделировать y~(x1,x2,x3....x100), а эти иксы хранятся в нормализованной табличке, приходится писать дурацкие case when then end. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2012, 01:34 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=36206351&tid=1541758]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
149ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
94ms |
get tp. blocked users: |
2ms |
| others: | 234ms |
| total: | 524ms |

| 0 / 0 |
