2015-10-12 5 views
1

У меня есть таблица вида:PostgreSQL Простой Таблицы результатов (строки в столбцы и столбцы в строки) в большом наборе данных

CELL day1  day2  day3  day4 ...... day365 
1  3,7167 0   0   0,1487 ...... 0,3256 
2  0   0   0,2331 0,1461 ...... 1,8765 
3  1,431  0,4121 0   1,4321 ...... 0 
... 
... 
... 
64800 

Я хотел бы transponse моего стола, так что у меня есть строки как столбцы и столбцы в виде строк. Результат выглядит следующим образом:

DAY 1   2   3  ...... 64800 
day1 3,7167 0   1,431 ...... ...... 
day2 0   0   0,4121 ...... ...... 
day3 0   0,2331 0  ...... ...... 
day4 0,1487 0,1461 1,4321 ...... ...... 
... 
... 
... 
day365 

Моя самая большая проблема - размер стола (365 столбцов и 64800 строк). Как написать запрос, где мне не нужно определять столбцы, которые я хочу в выводе. Есть ли способ создать таблицу без определения каждого столбца, и вы могли бы показать, как должен выглядеть мой запрос?

Моя вторая проблема заключается в том, что я даже не получаю кросс-таблицу для работы в datasubset. Следующий запрос:

SELECT * FROM crosstab(
'SELECT * FROM 1997_subset ORDER BY 1,2') 
AS test("cell" int, "day1" double precision, "day2" double precision, "day3" double precision, "day4" double precision, "day5" double precision) 

дает мне эту ошибку:

ERROR: invalid source data SQL statement 
DETAIL: The provided SQL must return 3 columns: rowid, category, and values. 

Помощь очень ценится, спасибо большое!

+0

Возможно, вы ищете этот ответ SO (http://stackoverflow.com/questions/3002499/postgresql-crosstab-query) –

+0

Число столбцов ограничено 250-1600, см. [О PostgreSQL] (http://www.postgresql.org/about/). – klin

+0

Зачем нужны 64800 столбцов? Что представляют собой эти столбцы? – CodeMonkey

ответ

1

Вы не можете сделать это в PostgreSQL, так как он ограничен примерно 1600 столбцами на выходе. В противном случае функция crosstab от модуля tablefunc поможет вам.

Вам необходимо извлечь данные в CSV с помощью COPY, а затем использовать внешний инструмент, который может поворачивать данные. Взгляните на инструменты ETL, или, в худшем случае, вам, возможно, придется его скриптировать.

Я только что проверил и Talend по крайней мере может сделать свод (транспонирование строк/столбцов, кросс-таблицу). Pentaho, CloverETL и т. Д., Возможно, тоже.

Смежные вопросы