ãããã£ãŠãMS AccessãšåŒã°ããã¯ãªãŒãã£ãŒãšéä¿¡ããããã®ããã€ãã®ã¢ãããŒãã説æããããšæããŸãã ãããã£ãŠãæåã®ã¿ã¹ã¯ã¯æ¬¡ã®ãšããã§ããRubyon Railsã¢ããªã±ãŒã·ã§ã³ãŸãã¯PostgreSQLïŒ FDWã䜿çšïŒããMS Accessãžã®æ¥ç¶ã確ç«ããã§ããã°ãªã¢ã«ã¿ã€ã ã§ããŒã¿ã«ã¢ã¯ã»ã¹ããŸãã
以äžã§ã¯ãäžèšã®åé¡ã«é¢é£ãããã¹ãŠã®æ å ±ãåéããèªæã§ãªãã±ãŒã¹ãšæ°Žäžã®äŸ¿ã説æããããšããŸãã ãã®èª¬æã誰ãã®æéãç¯çŽããããšãé¡ã£ãŠããŸã...ãŸãã¯åã«ãããçšåºŠãå°æ¬ãããŠãã倧è¡ã楜ããŸããŸãã
ãã®åé¡ã«é¢ããèè ã®äºå®ãšæèŠã ãã«é¢å¿ããã人ã®ããã«ããã«tldr ã
CSVã«å€æ
ãŸããç°¡åãªäœæ¥ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠèª¬æããŸãã Ubuntu 14.04ã§ã®åäœãä¿èšŒãããŠããŸãã ä»ã®Linuxãã£ã¹ããªãã¥ãŒã·ã§ã³ã§åäœããã¯ãã§ãã ãããŠãããã¯
ãã®ãããªãã®mdbtoolsããããŸãã ããã¯éåžžã«ç°¡åã«èšãã°ïŒ
sudo apt-get install mdbtools
äŸåé¢ä¿ãæåã¢ã»ã³ããªãããã±ãŒãžæ©èœãªã©ã®è©³çŽ°ã¯ã GitHubã®ããŒãžã«ãããŸã ã
ãã®ããã±ãŒãžã¯ãAccessãæäœããããã®ããŸããŸãªããŒã«ãæäŸããŸãã æå šäœãæ€èšããã®ã§ã¯ãªãã1ã€ã«çµã£ãŠæ€èšããŸãã mdbãã¡ã€ã«ãcsvã«å€æã§ãããã®ïŒ
mdb-export 'mdb-file' 'table-name' > result.csv
ãã®çµæãæå®ãããããŒãã«ã®å 容ãå«ãcsvãã¡ã€ã«ãååŸããŸãã ããã«ãcsvã¯éåžžã«åçŽã§åºãæ®åããŠãã圢åŒã§ããããããã®ãã¡ã€ã«ã¯èããããããšãèããããªãããšãã¹ãŠã®åŠçãšæ·åãåããå¯èœæ§ããããŸãã
MS Accessã§ã¯ãšãªãå®è¡ãã
ããé£ããã¿ã¹ã¯ïŒSQLã¯ãšãªãå®è¡ããmdbãã¡ã€ã«ãšunixãåãããã·ã³ãæã«å ¥ããŸãã ããã€ãã®ããã±ãŒãžãè¿œå ããŠãããã€ãã®æ§æãäœæããå¿ èŠããããšæšæž¬ããã®ã¯ç°¡åã§ãã
ãŸãã ODBCãå¿ èŠã§ãã ããã¯ãããŒã¿ããŒã¹ãšéä¿¡ããããã®æšæºAPIã§ãã Unixã§ã¯ããããã®ç®çã®ããã«unixODBCãååšããŸãã ãã®ã€ã³ã¹ããŒã«ã¯éåžžã«ç°¡åã§ãã
sudo apt-get install unixodbc libmdbodbc1
2çªç®ã®ããã±ãŒãžã«ã¯libmdbodbc.soãå«ãŸããŠãã ãããã¯ããäžã§å¿ èŠã«ãªããŸãã
次ã®ã¹ãããã¯ãMS Accessã«é©åãªODBCãã©ã€ããŒãèŠã€ããããšã§ãã æãè¿ããã®ã¯mdbtoolsã®ãã©ã€ããŒã§ãã 次ã«ãæ§æãæãäžããå¿ èŠããããŸãããã©ã€ããŒãèšè¿°ããããŒã¿ããŒã¹ã宣èšããŸãã
ãã©ã€ãã¯/etc/odbcinst.iniã«èšè¿°ãããŠããŸã ïŒ
[MDBTools] Description = MDBTools Driver Driver = libmdbodbc.so Setup = libmdbodbc.so FileUsage = 1 UsageCount = 1
/etc/odbc.iniã§ããŒã¿ããŒã¹ã宣èšããŸãã
[testdb] Description = test Driver = MDBTools Database = /opt/db/MS_Access.mdb
ãDriverãã§ã¯ãodbcinst.iniã«èšè¿°ãããŠãããã©ã€ããŒã®ååãæå®ããå¿ èŠãããããšã«æ³šæããŠãã ããã
odbcinst.iniããã³odbc.iniã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã
ããã§èšå®ã¯å®äºã§ãã ããã§ãã¯ãšãªã®å®è¡ãéå§ã§ããŸãã ãããã®ç®çã®ããã«ãunixODBCããã±ãŒãžã®isqlãŠãŒãã£ãªãã£ã䜿çšããŸãã
isql testdb
ãã¹ãŠãæ£ããè¡ãããå Žåããªã¯ãšã¹ããå®è¡ããã³ã³ãœãŒã«ã衚瀺ãããŸãã
SQL> SELECT * from "" +------------+-----------------------------------------------------+ | | | +------------+-----------------------------------------------------+ | 1 | | | 2 | | | 3 | | | 4 | | +------------+-----------------------------------------------------+ SQLRowCount returns 4 4 rows fetched
æåŸã«ãUnicodeããµããŒãããisqlã®é¡äŒŒç©ãããããšã«æ³šæããŠãã ããã iusqlãšåŒã°ããŸãã
å¥æ°isql
æ£çŽãªãšãããisqlãŠãŒãã£ãªãã£ã¯ããªãããéãã§ãã æ§æã«ã¯å€ãã®å¶éãããã䜿ãããããç解ã¯ãããŸããã ããšãã°ãåŒã®æåŸã«ã»ãã³ãã³ãæ¿å ¥ããŸã-ãšã©ãŒãååŸãããã®åå ãæšæž¬ããŸãã ããã«ã¯ãã¢ãã³ãªãã¶ã€ã³ã®ãã³ãããã³ãããã®ä»ã®æ¥œãã¿ã¯ãããŸããã ããã¯PotgreSQLã§ã¯ãããŸãããPotgreSQLã¯ãåŒãééãããšèšã£ãŠãæ£ãããªãã·ã§ã³ãæäŸããŸãã ããã§ã¯ãåã«éä¿¡ãããçç±ããéç¥ãããŸããã ãã®ãããå°ãªããšãisqlã䜿ããããããããã«ã pyodbc-cliã·ã§ã«ãäœæãããŸããã ãã®å©ããåããŠãå°ãªããšãäœããã®åœ¢ã§isqlãšã®éãã匱ããã¯ãšãªã®äœæã«éäžã§ããŸãã
ãšããŸããã¯ãªããŒãã«/åã®ãšã³ã³ãŒã
ãCharsetããã©ã¡ãŒã¿ãŒã«ã€ããŠã¯å€ãã®ãããããããããã¯äœ¿çšãããŠããã¹ããŒã¯ããŒãžã«åœ±é¿ããŸãã ãã®ãã©ã¡ãŒã¿ãŒã®äœ¿çšäŸã次ã«ç€ºããŸãã
[testdb] Description = test Driver = MDBTools Database = /opt/db/MS_Access.mdb Charset = CP1251
isqlã®æäœã«å¯Ÿãããã®ãã©ã¡ãŒã¿ãŒã®åœ±é¿ã¯æ°ã¥ãããŠããŸããisqlã§ã¯ãããªã«æåãå«ãmdbãã¡ã€ã«ãšéåžžã®Unicode mdbãã¡ã€ã«ã®äž¡æ¹ã§äœæ¥ã§ããŸãã åæã«ãããªã«æåã®MDBãã¡ã€ã«ã䜿çšããå ŽåããCharsetããã©ã¡ãŒã¿ãŒã«é¢ä¿ãªããiusqlãŠãŒãã£ãªãã£ã¯å€ãã®çå笊ïŒãããã®ãããªïŒ ïŒãçæããŸããã
isqlã®ä»£æ¿
isqlã®ä»£æ¿ã¯ãmdbtoolsããã±ãŒãžã®mdb-sqlã§ãã ãã®ãŠãŒãã£ãªãã£ã«ã¯ãiniãã¡ã€ã«ã¯å¿ èŠãããŸããã ç¹å®ã®mdbãã¡ã€ã«ã«èšå®ããã ãã§ãïŒ
mdb-sql /opt/db/MS_Access.mdb
ãŠãŒãã£ãªãã£ã®äœ¿çšã«é¢ãããã¹ãŠã®è³ªåã¯ã manããŒãžã§é©åã«åçãããŸã ã å¯äžã®æ©èœïŒãŠãŒãã£ãªãã£ã¯äžèšã®ããªã«æåã®mdbãã¡ã€ã«ã飲ã¿èŸŒããŸããã§ããã Unicodeãã¡ã€ã«ã«ã¯åé¡ã¯ãããŸããã§ããã
Ruby / Railsãã¹
çŸåšã¯2016幎ã®åã°ã§ãMS Accessã®æåŸã®ãªãªãŒã¹ã¯2015幎9æ22æ¥ã§ããã ããããããã¯äžéã§ããActiveRecordã®ã¢ããã¿ãŒã«é¢ããææ°ã®äœæ¥ã¯2008幎ã§ãã ãããã£ãŠãç§ã¯ãæ £ç¿ã©ãããè¯ãç¹ãšæªãç¹ã®2ã€ã®ãã¥ãŒã¹ãæã£ãŠããŸãã
è¯ããã®ããå§ããŸãããïŒ odbc-railsãšãã®çãŸãå€ããactiverecord-odbc-adapterããããŸãã
ãããŠä»ãæªããã®ïŒäžèšã®ããã«ãã¢ããã¿ãŒãªããžããªãžã®æåŸã®ã³ãããã¯2008幎ã§ãRailsããã³ActiveRecordããŒãžã§ã³1ãš2ã®ãµããŒãã宣èšãããŠããŸãã ãããã£ãŠãRails 3+ã§å®è¡ããæ¹æ³ïŒããã³å®è¡ã§ãããã©ããïŒã¯ããããŸããã ç§ã®ç¡ç¥ã®çç±ã¯ããã次ã®ãšããã§ãã ãŸããã¢ããã¿ãŒã®ããã¥ã¡ã³ããæ£ãããããŸããïŒãã ããã¢ããã¿ãŒããããŸããïŒã 第äºã«ãæ å ±æºã«è¡ããç解ããçãè¿ãããããšãã欲æ±ã¯ãããŸããã ãããã£ãŠãååãªç¥èãçµéšãæéãããå Žåã¯ããããçµäºããŠäœ¿çšæ¹æ³ã説æã§ããŸãã ãã®å Žåã¯é 匵ã£ãŠãã ããïŒ
Ruby-ODBC
ã¢ããã¿ãŒã§ã¯ãã¹ãŠãæ²ããã®ã§ãå¥ã®æ¹æ³ã§èŠãããšãã§ããŸãã äžæ¹ã¯ruby-odbcãšåŒã°ããŸãã
ãã®gemã®æåŸã®æŽæ°ã¯2011幎ã«ããã®ãŒããŸãããçŸæç¹ã§ã¯å€ããå°ãªããæ©èœããŠããŸãã gemãã€ã³ã¹ããŒã«ããã«ã¯ãç°¡åãªæé ãå®è¡ããå¿ èŠããããŸãã
sudo apt-get install unixodbc unixodbc-dev gem install ruby-odbc
unixodbc-devããã±ãŒãžããªãå Žåããã€ãã£ãæ¡åŒµã®ã³ã³ãã€ã«ã¯æ¬¡ã®ãšã©ãŒã§å€±æããŸãïŒ ERRORïŒsql.h not found ã
ããã«ãã·ã¹ãã ã§ODBCãæ§æãããŠããããšãåæãšããŠããŸãïŒã€ãŸãã odbcinst.iniãã¡ã€ã«ãšodb.iniãã¡ã€ã«ãååšããïŒã ãã®å ŽåãirbãéããŠä»¥äžãå®è¡ã§ããŸãã
001 > require 'odbc' => true 002 > client = ODBC.connect("testdb") => #<odbc::database:0x00000000e38d98> 003 > statement = client.prepare 'SELECT * FROM ""' => #<odbc::statement:0x00000000e11608 @_a="[]," @_h="{}," @_c0="{}," @_c1="{}," @_c2="{}," @_c3="{}"> 004 > statement.execute => #<odbc::statement:0x00000000e11608 @_a="[]," @_h="{}," @_c0="{}," @_c1="{}," @_c2="{}," @_c3="{}"> 005 > first_row = statement.fetch => [1, "\xD0\x94\xD0\xBE\xD0\xBA\xD1\x83\xD0\xBC\xD0\xB5\xD0\xBD\xD1\x82\xD0\xB0\xD1\x86\xD0\xB8\xD1\x8F\x00"] 006 > first_row[1].force_encoding("utf-8") => "\u0000"
æ§æããã³äœ¿çšå¯èœãªruby-odbc gemã³ãã³ãã®è©³çŽ°ã«ã€ããŠã¯ãGitHubã®ruby-odbc / testãã£ã¬ã¯ããªã«ãããŸãã
MDB gem
ãã®gemã¯ãmdbãã¡ã€ã«ãæäœããããã®DSLãæäŸããŸãã ãããŠåœŒå¥³ã¯ãšãŠãããããã§ãã ãã ãããã¥ã¢ã³ã¹ããããŸããgemã¯ãäžèšã®mdbtoolsã®åãªãRubyã©ãããŒã§ãã ã€ãŸããgemã¯mdbãcsvã«å€æãããã®csvãã¡ã¢ãªã§åŠçããŸãã éæ³ãããŒã¿ããŒã¹ãžã®çŽæ¥ã¢ã¯ã»ã¹ã¯ãããŸããã
ODBCãã©ã€ããŒã®ä»£æ¿
MS Accessçšã®ODBCãã©ã€ããŒã®åçšããŒãžã§ã³ããããŸã ã ãããã圌ã«é¢ããäºå®æ å ±ã¯ãããŸããã 楜芳çãªããŒãžã§ã³ã§ã¯ããã®ã¢ããã¿ãŒã¯Accessã®é«åºŠãªã¯ãšãªã«åœ¹ç«ã¡ãŸãïŒmdbtoolsã®ãã©ã€ããŒã«ã¯ãLIMITãGROUPãASãªã©ã®åŠçããããããããŸãïŒã ããããããã¯æšæž¬ã«éããŸããã å®éã«ãããè³Œå ¥ãããããµã€ãã§ã®ç»é²åŸã«å©çšã§ãã14æ¥éã®è©ŠçšçãååŸããããšã«ãã£ãŠã®ã¿åŠç¿ããããšãã§ããŸãã ãã®æ å ±ã«å ããŠããŠãŒã¶ãŒã¬ãã¥ãŒããã°ã¬ããŒãããŸãã¯èª°ãããã©ã€ããŒã䜿çšãã圌ãäœããæäŒã£ããšããèšåã¯ãããŸããã§ããã
PotgreSQLãã¹
Postgresã«ã¯ã OGRæ¡åŒµããããŸãã GDALã®äžéšã§ãã ããã¯ãã©ã¹ã¿ãŒããã³ãã¯ã¿ãŒã®å°ç空éããŒã¿åœ¢åŒãå€æããããã®å·šå€§ãªã©ã€ãã©ãªã§ãã çŸåšã®ç®çã§ã¯ãã©ã€ãã©ãªã®ç®çã«ã¯ãŸã£ããæå³ããããŸããã äž»ãªããšã¯ãmdb圢åŒã§åäœããããšãã§ãããšè¿°ã¹ãããŠããããšã§ãã
èšçœ®
æåã«ãããã€ãã®äŸåé¢ä¿ãé 眮ããå¿ èŠããããŸãã
sudo apt-get install gdal-bin libgdal-dev sudo apt-get install postgis postgresql-9.3-postgis-2.1
ãã®ããŒã ã¯å€§éã®äžæ¯ãåŒãå¯ããŸã...ããããããã¯çµæ§ã§ãã ogr_fdwã®æåã®ããã±ãŒãžã»ãããpostgisã®2çªç®ã®ããã±ãŒãžã
ã¹ããã2ïŒãœãŒã¹ããpgsql-ogr-fdwãåéããŸãã ããã¯å°ããªbashã¹ã¿ã€ã«ã®ããã¥ã¢ã«ã§ãã
git clone git@github.com:pramsey/pgsql-ogr-fdw.git cd pgsql-ogr-fdw sudo apt-get install postgresql-server-dev-9.3 sudo apt-get install checkinstall make sudo checkinstall
ã¯ããmake installãå®è¡ã§ããŸããã ç«ãèŠããããšã¯æã¿ãŸããã checkinstallãã衚瀺ããããã€ã¢ãã°ã§ããããŒãžã§ã³ããã©ã¡ãŒã¿ãŒãä¿®æ£ããå¿ èŠããããŸãã ããããã§åºåãããæ°åãã®åœ¢åŒã§äœæããå¿ èŠããããŸãïŒäŸïŒ '0.1.0'ïŒã ãã以å€ã®å Žåãããã©ã«ãå€ã§ã¯ãããã±ãŒãžã¢ã»ã³ããªã¯å€±æããŸãã
ã¹ããã3ïŒPostgresã«æ¡åŒµæ©èœãã€ã³ã¹ããŒã«ããŸãïŒ
CREATE EXTENSION ogr_fdw; CREATE EXTENSION postgis;
ããã§ã¯postgisãäžèŠã§ãããšããçãããããŸãããGitHubã®Readmeã«ã¯äž¡æ¹ãå¿ èŠã§ãããšèšãããŠããããããã®è³ªåã¯å¥œå¥å¿readerçãªèªè ã«ä»»ããŸãã
ã¹ããã4ïŒFDWãäœæããæéã ogr_fdwã§Accessãæäœããã«ã¯ã2ã€ã®æ¹æ³ããããŸãã 1ã€ç®ã¯ã·ã¹ãã ODBCã䜿çšããŸãã ãã®ãªãã·ã§ã³ã®è©³çŽ°ã«ã€ããŠã¯ã ãã¡ããã芧ãã ãã ã 2çªç®ã®æ¹æ³ã¯ãOGRã®MDB圢åŒã䜿çšããŠããã Jackcessã䜿çšããŠãã¡ã€ã«ã«çŽæ¥ã¢ã¯ã»ã¹ã§ããŸãã ãã®ãªãã·ã§ã³ã®è©³çŽ°ã¯ãã¡ãã§ãã 以äžã«äž¡æ¹ã®æ¹æ³ã説æããŸãã
æåŸã«ã1ã€ã®ã³ã¡ã³ãïŒOGRã¯éåžžã«åŒ·åãªãã®ã§ãã MS Accessã§åäœããæ©èœã¯ãå©çšå¯èœãªããŸããŸãªåœ¢åŒã®äžéšã§ããã芪æãªãèªè ã¯ãããã¯ã¹ãºã¡ã«ããéããã®ã·ã§ããã§ãããšåççã«èšãããšãã§ããŸã...ããããéžæè¢ã¯å€§ãããªãããã®é以å€ã«ä»ã®ããŒã«ã¯èŠã€ãããŸããã§ãã ã¯ããããã«OGRã§ãµããŒããããŠãããã¹ãŠã®åœ¢åŒã®ãªã¹ãããããŸã ã
ORG ODBC圢åŒ
ãã®ã¢ãããŒãã¯ODBCã·ã¹ãã èšå®ã䜿çšããäžèšã®osqlããã³ruby-odbcãšåæ§ã«æ©èœããŸãããããŒã¿ããŒã¹å ã§åäœããŸãã FDWã®åæåã«äœ¿çšã§ãããã¹ãŠã®ãªãã·ã§ã³ã¯ã GDAL ODBCãã©ã€ããŒããŒãžã«è¡šç€ºãããŸãã 以äžã§ã¯ãç°¡åãªäœ¿çšäŸã瀺ããŸãã
å®éã«ã¯ããã«ãããŸãïŒ
postgres=# CREATE SERVER testdb_access postgres-# FOREIGN DATA WRAPPER ogr_fdw postgres-# OPTIONS( postgres(# datasource 'ODBC:testdb', postgres(# format 'ODBC'); CREATE SERVER postgres=# CREATE FOREIGN TABLE access_sections ( postgres(# "" decimal, postgres(# "" varchar) postgres-# SERVER testdb_access postgres-# OPTIONS (layer ''); CREATE FOREIGN TABLE postgres=# SELECT * FROM access_sections; ERROR: unable to connect to layer to "" HINT: Does the layer exist?
ç§ãOGRã®ããã¥ã¡ã³ãããç解ããŠããéããã¬ã€ã€ãŒã¯ããã®å ŽåãããŒã¿ããŒã¹ããŒãã«ãšåçã§ãã
ãã¹ãŠã®ã¬ã€ã€ãŒã®ãªã¹ãã¯ã ogrinfoãŠãŒãã£ãªãã£ã䜿çšããŠååŸã§ããŸãã
$ ogrinfo -al 'ODBC:testdb' geometry_columns is not a table in this database Got no result for 'SELECT f_table_name, f_geometry_column, geometry_type FROM geometry_columns' command INFO: Open of `ODBC:testdb' using driver `ODBC' successful.
ãã®ã¡ãã»ãŒãžã«åºã¥ããŠããã¹ãŠãæ©èœãããšæ³å®ã§ããŸãããã¿ãŒã²ããããŒã¿ããŒã¹ïŒã€ãŸããmdbãã¡ã€ã«ïŒã«ã¯å¿ èŠãªGeoããŒã¿åœ¢åŒãå«ãŸããŠããããOGRã¯ãã®è¿·æãªèª€è§£ã«ã€ãŸãããŸãã æäŸãããããŒã¿ããŒã¹ã®ãã©ãŒãããã匷å¶çã«ãã§ãã¯ããããšãã圌ãåŒãé¢ãæ¹æ³ãããããŸããã ãããããã®ã¢ãããŒãã¯Windowsã§ããŸãæ©èœãããšèšã人ãããŸãã äžè¬ã«ãOGR ODBCãæšè«ããä»»æã®mdbãã¡ã€ã«ã§åäœãããæ¹æ³ãç¥ã£ãŠããå Žåã¯ãããã«ã€ããŠæããŠãã ããããã®ç¥èãèªåã§ä¿æããªãã§ãã ããã
å¥ã®è³ªåïŒPGã¯ãããªã«æåïŒããã³ãã®ä»ã®éã©ãã³èªïŒã®ããŒãã«ããã³åã®ååã§ã©ã®ããã«æ©èœããŸããã äžæ¹ã§-Postgresã¯ããŒãã«/ã«ã©ã ãäœã§ããããæ°ã«ããŸãããããããäºéåŒçšç¬Šã§å²ã¿ãå°ãªããšãç¹æ®æåã䜿çšã§ããŸãã äžæ¹ããããFDWã«é©çšã§ãããã©ããã¯ç¥ã£ãŠããããå ·äœçãªäŸã§æ€èšŒããããšã¯ãŸã å¯èœã§ã¯ãªãã
MDG MDBã®ãã©ãŒããã
ãã®ã¢ãããŒãã¯ã Jackcess Javaã©ã€ãã©ãªã«åºã¥ããŠããŸãã Javaã§ãããç¬èªã®è±å¯ãªå éšäžçãããããããã®ã¢ãããŒãã«ã¯ã·ã¹ãã ODBCãšã®æ¥ç¶ããªããããMS Accessã®ãã©ã€ããŒã®åé¡ã¯å€éšã®åé¡ã§ãã ãã ãã以äžã§èª¬æããä»ã®æ©èœããããŸãã
説æããããã»ã¹å šäœã«é¢ãããè±å¯ãªãããã¥ã¡ã³ããJavaã®è±å¯ãªçµéšã®æ¬ åŠãã¿ãŒã²ããããã±ãŒãžã®äžéšã®æªããã®ããã«ãäœæ¥ããŒãžã§ã³ã¯3æ¥ã§çµã¿ç«ãŠãããããã±ãŒãžã®ã20ã®å®å šãªåæ§ç¯ãå¯èœã§ãã£ãããšãããã«èŠåããŸãã ãããã£ãŠãç§ã¯ããã«ããã€ãã®ããšã«ã€ããŠèšããŸãïŒ
- ãã®ã¢ãããŒãã¯ãæå·åãããŠããªãmdbãã¡ã€ã«ïŒã€ãŸãããã¹ã¯ãŒãã®ãªããã¡ã€ã«ïŒã䜿çšããå Žåã«ã®ã¿é©ããŠããŸãã
- ããã¯ããã±ãŒãžã¢ã»ã³ããªã§ããããã以äžã§èª¬æããäŸåé¢ä¿ããã¹ãããŒãžã§ã³ãããã³ãã®ä»ã®å±æ§ã¯ãã¹ãŠç§ã®ç¹å®ã®ã±ãŒã¹ããã³ç°å¢ã«æå¹ã§ããããã¹ãŠãé©åã§ã¯ãªãå¯èœæ§ããããŸãã
ãããã£ãŠã以äžã¯ãã¹ãŠã GDAL ACCESS MDBããŒã¿ããŒã¹ãã©ã€ããŒã®å ã®å ¬åŒèª¬æã®ãã詳现ãªããŒãžã§ã³ã§ãã
æåïŒopenjdk-6-jdkãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
sudo apt-get install openjdk-6-jdk
GDALã®ãœãŒã¹ãçŽ æ©ãææ ®æ·±ãèªãã åŸãopenjdk-7-jdkããµããŒãããŠãããšæããŸããã ããããããŒãžã§ã³7ã§ã¯åäœããŸããã§ããã
次ã«ãlibgdal-devãå¿ èŠã«ãªããŸãã
sudo apt-get install libgdal-dev
ããã§ã¯ãããã±ãŒãžã®ããŒãžã§ã³ãèŠããŠããå¿ èŠããããŸãã GDALããã±ãŒãžã®ããŒãžã§ã³ã«çŽæ¥é¢é£ããŠããŸãã ç§ã®å Žåãããã¯ããŒãžã§ã³1.10.1ã§ãã
æ³šïŒ mdb圢åŒã®ãµããŒãã¯ãããŒãžã§ã³1.9.0ããå§ãŸããŸãã
ãããŠæåŸã«ãgdal-binããã±ãŒãžãç Žå£ããå¿ èŠããããŸããããã¯ãæ¡åŒµããŒãžã§ã³ããœãŒã¹ãããã«ãããããã§ãã
sudo apt-get remove gdal-bin
第äºã«ïŒããã€ãã®JARïŒå€ããŠããŸããªãïŒãããŠã³ããŒãããå¿ èŠããããŸããããªãã¡ãjackcess-1.2.2.jarãcommons-lang-2.4.jarãcommons-logging-1.1.1.jarã 次ã«ãããããlib / extã«å ¥ããŸãã ç§ã®å Žåããã®ãã£ã¬ã¯ããªãžã®ãã«ãã¹ã¯/ usr / lib / jvm / java-6-openjdk-amd64 / jre / lib / extã§ãã äžèšã®ããŒãžã§ã³ã®JARã¯ã ãã®ãŠãŒãã£ãªãã£å ã«ãããŸã ã ç§ã«ãšã£ãŠã¯ããã¹ãŠãcommons-loggingã®ä»¥éã®ããŒãžã§ã³ïŒ1. *ïŒãcommons-langã®ãã®ä»ã®ãã€ããŒããŒãžã§ã³ïŒ2. *ïŒããã³jackcessïŒ1. *ïŒã§åäœããŸãã ãšã©ãŒã¯ãjaccessïŒ2.1.4ïŒã®æ¬¡ã®ã¡ãžã£ãŒããŒãžã§ã³ã䜿çšããå Žåã«ã®ã¿çºçããŸããã
3çªç®ïŒGDALãããŠã³ããŒãããŠæ§æããå¿ èŠããããŸãã
git clone git@github.com:OSGeo/gdal.git cd gdal/gdal/ git checkout 1.10
ããã§ã段èœåæ°ã§ã€ã³ã¹ããŒã«ãããlibgdal-devããã±ãŒãžã®ããŒãžã§ã³ã«å¯Ÿå¿ãããã©ã³ãã«ç§»åããå¿ èŠããããŸãã ããããªããšãã¢ã»ã³ãã«ããããã€ããªã¯ã©ã€ãã©ãªãšäºææ§ããªããªããŸãã
次ã«ãconfigureãåŒã³åºãå¿ èŠããããŸãã åŒã³åºãæ¹æ³ã¯2ã€ãããŸãã ã·ã³ãã«ïŒ
ãããŠæ瀺çãªãã¹ã§ïŒ./configure --with-java=yes --with-jvm-lib-add-rpath=yes --with-mdb=yes
./configure --with-java=/usr/lib/jvm/java-6-openjdk-amd64 \ --with-jvm-lib=/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server \ --with-jvm-lib-add-rpath=yes \ --with-mdb=yes
2çªç®ã®ãªãã·ã§ã³ã¯ãã·ã¹ãã ã«è€æ°ã®ããŒãžã§ã³ã®JavaïŒããšãã°ãopenjdk-6-jdkããã³openjdk-7-jdkïŒãããå ŽåããŸãã¯æåã®ãªãã·ã§ã³ã§ç®çã®çµæãåŸãããªãå Žåã«åœ¹ç«ã¡ãŸãã
æ§æãå®äºããããMDB圢åŒã®å察åŽã«ãã倧åãªåèªãyesããèŠã€ããå¿ èŠããããŸãã
4çªç®ïŒãè¶ãã³ãŒããŒãªã©ãèŠã€ããŠãããã±ãŒãžã®çµã¿ç«ãŠãéå§ããå¿ èŠããããŸãã
sudo checkinstall
ããã§ã¯ãããã€ãã®ç°¡åãªè³ªåã«çããŠåŸ ã€å¿ èŠããããŸãã ç§ã®å ŽåãåŸ ã€ã®ã«çŽ10åããããŸããã
ããã§ã¯ãããã±ãŒãžãçŽ300 MBã®ééã«ãªãããšã«æ³šæããå¿ èŠããããŸãã ãã¡ãããããããäœåãªãã®ããã¹ãŠæšãŠãŠãæã§çµã¿ç«ãŠãŠããªããžããªããgdal-binããã±ãŒãžã®ãµã€ãºïŒã900KbïŒã«è¿ã¥ããããšãã§ããŸãããããã¯ã¹ããŒãªãŒã®ç¯å²ãè¶ ããŠããããã説æããŸããã
5çªç®ïŒäœããããŸããããªãã£ãå Žåãããã±ãŒãžã¢ã»ã³ããªãèœã¡ãŠãGoogleãšæããå¿ãããªããå©ããŸãã
6çªç®ïŒãã¹ãŠãããŸããã£ãå Žåãcheckinstallã®åŸãããã±ãŒãžãèªåçã«ã€ã³ã¹ããŒã«ãããåä¿¡ãããã€ããªãmdb圢åŒãæ¬åœã«ãµããŒãããŠãããã©ããã確èªããå¿ èŠããããŸãã
$ ogrinfo --formats | grep MDB -> "MDB" (readonly)
ogrinfoã®åºåã«mdbã«é¢ããæ å ±ããªãã£ãå Žåã¯ããã®ã»ã¯ã·ã§ã³ã®æåã«é²ã¿ãããã¥ã¢ã«ãèªã¿çŽããŠãäŸåé¢ä¿ãã·ã¹ãã ãã©ã¡ãŒã¿ãŒã ã ãŒã³ãã§ãŒãº ãããã³ã³ã³ãã€ã«ãšæçµãã€ããªã«åœ±é¿ããå¯èœæ§ã®ãããã®ä»ã®å±æ§ã確èªãããã®ãšã³ãããŒããã¹ãŠåæ§ç¯ããŠã¿ãŠãã ããã
ã³ãã³ããšçµè«ãäžèŽããå Žåããã¹ãŠãããŸããããæãæ¿ã£ãéšåãèåŸã«ãããŸãã ogrinfoã¯mdbãã¡ã€ã«ãæäœããŠããã®ã³ã³ãã³ãã«é¢ããæ å ±ãæäŸã§ããããã«ãªããŸããã
$ ogrinfo /opt/db/test-database.mdb INFO: Open of `/opt/db/test-database.mdb' using driver `MDB' successful. 1: closeouts 2: economics
7çªç®ïŒPostgresã§FDWãæ§æã§ããããã«ãªããŸããã ãã®ã¢ã¯ã·ã§ã³ã®äŸãå«ãå°ããªã¹ã¯ãªããã次ã«ç€ºããŸãã
postgres=# CREATE SERVER acc FOREIGN DATA WRAPPER ogr_fdw OPTIONS ( datasource '/opt/db/test-database.mdb', format 'MDB' ); CREATE SERVER postgres=# CREATE FOREIGN TABLE economics( ID integer) SERVER acc OPTIONS(layer 'economics'); CREATE FOREIGN TABLE postgres=# SELECT * FROM economics; id ---- 1 2 3 4 5 (5 rows)
ãããŠãäžè¬ã«ãããã§ãã¹ãŠã§ãã ãã®ã»ã¯ã·ã§ã³ã®çµããã«ããæå·åããããmdbãã¡ã€ã«ã«ã€ããŠããã€ã説æããŸãã
FDWãAccessããããŒã¿ããã«ã§ãããogrinfoã次ã®ããã«èªãå ŽåïŒ
Exception in thread "main" com.healthmarketscience.jackcess.UnsupportedCodecException: Decoding not supported. Please choose a CodecProvider which supports reading the current database encoding. at com.healthmarketscience.jackcess.DefaultCodecProvider$UnsupportedHandler.decodePage(DefaultCodecProvider.java:115)
次ã«ããã¹ã¯ãŒãã§ä¿è·ãããmdbãã¡ã€ã«ãããå¯èœæ§ããããŸãã ãã®å Žåã Jaccessã®FAQãèŠãŠãOGR Accessãã©ã€ããŒã®dopilã«ã€ããŠèããŠãã ããã ç§ã®ç¥ãéãã Jackcess Encryptãããžã§ã¯ãããããŸãã ãã®ãããžã§ã¯ãã¯CryptCodecProviderãæäŸããŸããCryptCodecProviderã¯ãJackessã®CodecProviderã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ãæäŸããmdbãã¡ã€ã«ã®æå·å圢åŒããµããŒãããŸãã ããããæ®å¿µãªãããçŸåšã®GDALã®ãã©ã€ããŒã¯Jackcess Encryptã®æäœæ¹æ³ãèªèããŠããªããããæå·åããããã¡ã€ã«ããµããŒãããŠããŸããã ã§ãããããªãŒãã³ãœãŒã¹ãã£ã³ãã§åãè¯ãæ¹åããããŸãã
ãã®ä»ã®FDW
Postgresã®æ¢åã®ãã¹ãŠã®FDWã®ãªã¹ãã¯ã å ¬åŒWikiããŒãžã«ãããŸã ã ZhengYang / odbc_fdwããããæåŸã®ã³ãããã®æ¥ä»ã¯2011ã§ãã CartoDB / odbc_fdw㯠ãPostgres 9.5+ãç©æ¥µçã«éçºããã³ãµããŒãããŠããŸãã ãã®ãããéžæè¢ã¯ãããã§ãã
ãããã«
Linuxã§MS Accessã䜿çšããå¿ èŠãããå ŽåãMS Accessã§äœæ¥ããã®ã¯å€§å€ã§ãã ã ããããã«è¯ãã¢ããã€ã¹ïŒä»»æã®ææ°ã®ããŒã¿ããŒã¹ãžã®ã¢ã¯ã»ã¹ããããŒã¿ãåŒãåºããåé¡ã®è»ãåãé€ãã åŒãåºããªãå Žåã¯ãWindowsã¢ã¯ã»ã¹ãæäœããŸãã MicrosoftãWindowsã«AccessãšPostgresããããã³ã°ããããšã«ã€ããŠãããã«ãæäŸããéåžžã®ãã©ã€ããŒããããŸããå°ãªããšãããã€ãã®èšäºãšæ§æäŸããããäžè¬ã«åãäŒç€Ÿã®è£œåã¯éåžžäºãã«ããŸãæ©èœããŸãã ãããäžå¯èœãªå Žåã¯ã2ã€ã®ãªãã·ã§ã³ããããŸãããã¹ãŠãCSVã«å€æããŠæäœããããmdbãã¡ã€ã«ã«çŽæ¥ã¢ã¯ã»ã¹ããŠã¿ãŠãã ããã æåã®ãªãã·ã§ã³ã¯ç°¡åã§ãããã«äœ¿çšã§ããç¹å¥ãªã¹ãã«ã¯å¿ èŠãããŸããã 2çªç®ã®ãªãã·ã§ã³ã¯ã¯ããã«è€éã§ãæéãããããç¥çµããŸã£ãããªè ãäžé£ã®å¶éãèœãšãç©Žããã®ä»ã®äžå¿«ãªãã®ããããŸãã ãããã£ãŠãè³¢æã«éžæããŠãã ããã
åç §è³æ
- Ubuntuã§ã®GDAL / OGRã«é¢ããç¹å®ã®å°å¥³SARA SAFAVIã®ããã°
- Ubuntuã§ã®MS Accessã«é¢ããStackoverflow
- OpenNetããŒã
- ãããŠã Google Good Corporationãã芪åã«æäŸãããå€ãã®ãªã³ã¯