Saya bekerja dengan data sensus dan mengunduh beberapa file CSV, masing-masing dengan 600 kolom / variabel. Saya ingin menyimpan semuanya dalam basis data yang dapat query, tetapi semua yang saya coba sejauh ini (MS Access, Arc tabel geodatabase) memotong tabel menjadi 256 kolom. Apakah ada solusi untuk menangani tabel besar yang dapat diakses oleh seseorang yang bukan DBA?
10
Jawaban:
PostgreSQL memiliki batas kolom antara 250 dan 1600 "tergantung pada jenis kolom", dan mendukung data spasial dan pertanyaan dengan ekstensi PostGIS. Jadi saya akan cenderung melakukan dua hal:
Pertama, di mana kolom mewakili kategori daripada teks bebas, buat tabel terpisah dengan kategori tersebut, dan ganti kolom dengan ID integer dan batasan kunci asing, dengan merujuk tabel kategori.
Kedua, pilah Bentuk Normal Ketiga dengan memecah tabel besar menjadi dua atau lebih secara logis, dan buatlah hubungan satu-ke-satu di antara mereka. Ini mungkin bukan yang paling efisien, tetapi jika Anda jarang memerlukan beberapa data, maka kueri bisa saja di tabel yang Anda inginkan.
Alternatif lain yang sangat berbeda adalah menggunakan database "NOSQL" seperti MongoDB, CouchDB, dan sebagainya. Tidak ada batasan terprogram untuk ukuran "baris", dan jika data tidak ada untuk catatan, itu tidak perlu mengambil ruang apa pun.
Dukungan spasial tidak sebaik jenis database bigtable ini, tetapi MongoDB mendukung permintaan dan data spasial 2D, dan CouchDB tampaknya memiliki fungsi yang sama.
sumber
Saya baru-baru ini berurusan dengan masalah yang sama persis dengan file CSV profil Sensus Statistik Kanada yang berisi 2.172 kolom. Anda dapat mengimpor csv Anda ke ESRI File Geodatabase (FGDB) jika Anda memiliki akses ke ArcGIS. Menurut ESRI, format FGDB dapat menangani 65.534 bidang dalam kelas fitur atau tabel .
Dalam kasus saya, saya dapat mengimpor file CSV lebar 2172 kolom saya ke tabel FGDB tanpa masalah.
Setelah Anda memasukkan seluruh tabel ke dalam FGDB, Anda dapat mengirisnya sesuka Anda (mis. Secara logis atau berdasarkan batasan db), memastikan bahwa Anda menyimpan kolom id yang unik, untuk memastikan bahwa Anda dapat bergabung kembali bersama sebagai dibutuhkan.
sumber
Pendek:
Opsi saya untuk data dengan banyak atribut atau dengan tipe atribut variabel untuk setiap objek adalah dengan menggunakan model data KUNCI / VALUE, dapat diterapkan, dan bekerja dengan sangat baik, dalam sql (saya akan merekomendasikan postgresql + postgis).
Deskripsi:
1) Anda memiliki satu tabel untuk fitur, katakanlah, poin. Tabel ini memuat ID dan GEOMETRI untuk setiap poin.
2) Anda memiliki satu tabel lagi untuk 'atribut' yang merupakan pasangan kunci / nilai. Tabel ini memiliki ID kolom, POINT_ID (FK), KEY (varchar), VALUE (varchar).
Sekarang setiap titik dapat memiliki atribut yang hampir tak terbatas disimpan seperti itu:
OpenStreetMaps berfungsi seperti itu dan bekerja dengan sangat baik, lihat di sini dan di sini .
Untuk mengimpor data, saya akan menyarankan sebuah skrip python.
sumber