Як я можу обробляти таблиці з 256+ змінними?


10

Я працюю з даними перепису і завантажив декілька файлів CSV, кожен із яких має 600ish стовпців / змінних. Я хотів би зберегти їх у базі даних, що має можливість запиту, але все, що я намагався до цього часу (MS Access, таблиця бази даних Arc), обрізає таблицю в 256 стовпців. Чи є рішення для обробки великих таблиць, доступних для тих, хто не є DBA?


2
З будь-якою кількістю нормалізації БД я підозрюю, що ці величезні таблиці слід розділити на кілька (або безліч) менших таблиць, що відносяться до їх блоку перепису (можливо, блоку?).
Рой

Відповіді:


7

PostgreSQL має обмеження стовпців від 250 до 1600 "залежно від типів стовпців" і підтримує просторові дані та запити з розширенням PostGIS. Тому я був би схильний зробити дві речі:

По-перше, коли стовпець представляє категорію, а не вільний текст, створіть окрему таблицю з цими категоріями та замініть стовпчик на ціле ідентифікатор та обмеження зовнішнього ключа, посилаючись на таблицю категорій.

По-друге, розірвіть Третю нормальну форму, розділивши велику таблицю на дві чи більше логічно, і встановіть між собою відносини один на один. Це, мабуть, не найефективніше, але якщо вам рідко потрібні деякі дані, то запит може бути просто на потрібних таблицях.

Іншою абсолютно іншою альтернативою було б використання бази даних "NOSQL", таких як MongoDB, CouchDB тощо. Немає жодних обмежених на обмеження розміру "рядок", і якщо даних немає для запису, він не повинен займати місця.

Просторова підтримка не настільки хороша для таких типів баз даних великих розмірів, але MongoDB підтримує 2D просторові запити та дані, а CouchDB, схоже, має подібну функціональність.


4
+1 Рішення приєднання (параграф 3) насправді може бути надзвичайно ефективним, оскільки дані перепису мають, як правило, групи споріднених полів і для будь-якого конкретного аналізу часто потрібна лише невелика кількість цих груп. У такий спосіб тисячі полів (я не перебільшую: це звичайно) можна логічно розділити на десятки таблиць, і лише для невеликої кількості цих таблиць потрібно отримати доступ до будь-якої конкретної карти чи аналізу.
whuber

@MerseyViking, Як він міг (@scoball) розділяти таблиці або робити інші згадані операції, якщо він не може імпортувати дані в будь-яку програму, яка маніпулює таблицями? дані є у CSV.
Пабло

2
@Pablo, я думаю, що ти несправедливо ставишся до MerseyViking: якщо тобі дозволено писати сценарій для імпорту таблиць - до чого ти, по суті, змушений реалізувати своє рішення - тож він і в цьому немає ніяких труднощів у письмовій формі, яка є повністю загальною та гнучкою. (Я знаю це з досвіду, тому що я це робив для надзвичайно великих баз даних Перепису.) Більше того, він пропонує багато альтернатив, які працюють навколо обмеження поля 256.
whuber

"де стовпець представляє категорію, а не вільний текст" Ви повинні вручну зіставити ці стовпці.
Пабло

2
@Pablo Тільки якщо ви використовуєте неадекватне програмне забезпечення :-). Робочий процес у параграфах 2-3 можна виконати за допомогою лише декількох команд, використовуючи, наприклад, практично будь-яку сучасну статистичну програму. (Звичайно, я не виступаю за використання такої програми замість бази даних; я просто вказую, що за допомогою відповідного набору інструментів все в цій відповіді можна зробити легко і ефективно.)
whuber

7

Нещодавно я розглядав саме таку проблему з CSV-файлами перепису статистики Канади, що містить 2172 стовпців. Ви можете імпортувати свій csv у базу даних геодезичних файлів ESRI (FGDB), якщо у вас є доступ до ArcGIS. Відповідно до ESRI, формат FGDB може обробляти 65 534 поля в класі функцій або таблиці .

У моєму випадку мені вдалося імпортувати мій CSV-файл із широким стовпцем 2172 у таблицю FGDB без жодних проблем.

Як тільки ви отримаєте всю таблицю у FGDB, ви можете її нарізати будь-яким способом (наприклад, логічно або на основі обмежень db), переконуючись, що ви зберігаєте унікальний стовпчик ідентифікатора, щоб переконатися, що ви можете приєднатись до нього як потрібні.


1
Цікаво! Я намагався імпортувати з CSV у файл geodatabase. Коли я його налаштовував, я переглянув список змінних, які збирався імпортувати, і перестав перераховувати їх після 256 змінних, тому я не продовжував. Я подивлюсь ще.
scoball

2
Перейдіть за цим посиланням: properties.nhgis.org/How_to_Import_256_Columns_GIS.pdf
Brent Edwards

Бази даних геоданих мають високі обмеження, тому можливо імпортується щось.
nicksan

2

Короткий:
мій варіант для даних з великою кількістю атрибутів або зі змінним типом розподілу для кожного об'єкта - використовувати модель даних KEY / VALUE, вона може бути реалізована та працює дуже добре в sql (я б рекомендував postgresql + postgis).

Опис:
1) У вас є одна таблиця для особливостей, скажімо, пунктів. Ця таблиця містить ідентифікатор та геометрію для кожної точки.

2) У вас є ще одна таблиця для "атрибутів", яка є парами ключ / значення. У цій таблиці є ідентифікатори стовпців, POINT_ID (FK), KEY (varchar), VALUE (varchar).

Тепер кожна точка може мати практично нескінченні атрибути, що зберігаються так:

ID   POINT_ID   KEY   VALUE
1        1      type     burger shop
2        1      name     SuperBurger
3        1      address  123, a ST.

OpenStreetMaps працює так і працює дуже добре, дивіться тут і тут .

Для імпорту даних я запропонував би сценарій python.


Це часто називають "довгою" формою даних і про них добре знати. Хоча це нормально для гнучкого зберігання, він марний для будь-якого типу багатофакторного аналізу (який би був будь-який аналіз, який порівнював би два чи більше атрибутів).
whuber

@whuber, це не марно для багатоваріантного аналізу, але дійсно потрібно дуже структуроване програмне забезпечення або хороші навички програмування, оскільки дані потрібно підготувати, зокрема, перенести в таблицю. Тут я використовую комбінацію postgis + django (python web Framework) для обробки ґрунтових даних (ph, al, глини тощо), коли мені потрібно, я кладу уривки даних у таблиці перед обробкою. Ця модель була обрана тому, що одна і та ж структура буде обробляти інші довільні пунктуальні дані.
Пабло

Досить справедливо: я мав би сказати, що "марно як є". За умови збереження всієї інформації - і це - ви завжди можете обробити дані в будь-якому потрібному вам форматі. Обробка порівняно проста за допомогою методів @ MerseyViking порівняно з підходом ключ / значення. Крім того, коли таблиці стають дійсно великими, ми починаємо турбуватися про загальний розмір. Надлишок у сховищі ключів / значень настільки великий, що його рідко використовують для аналізу дуже великих наборів даних (я не можу говорити про частоту його використання виключно для зберігання)
whuber

Я не згоден з його рішенням, оскільки розділяти або маніпулювати таблицями непросто, не сказати неможливо, якщо ви не можете відкрити дані в базі даних. Користувачеві потрібно надсилати дані безпосередньо до бази даних через скрипт, а за допомогою моделі ключ / значення ви можете використовувати той самий скрипт для будь-яких даних без необхідності відображення стовпців або категоризації атрибутів.
Пабло

Ваше рішення, за власним визнанням, виглядає настільки ж складно програмно, як і моє - потребує «хороших навичок програмування». Я просто виступав за збереження даних у формі, яка є найбільш ефективною для RDBMS, таких як PostgreSQL. Крім того, це, мабуть, суперечливе, оскільки відповідь Брента показує, що межа 256 стовпців є хибною.
MerseyViking
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.