AERSデータのインポート

■テーブルの形式
各ファイルは"$"を区切り文字としてダウンロードした際、同封されているテーブル設計書に
従ってテーブルを作成してデータロードすれば即使用できる。
っが、四半期ごとのデータなので、それらをつなぎ合わせる作業が必要。また、
隣り合う四半期ごとのデータには糊代があり、それらをうまく上書きする必要がある。

■RDBMS
インポート、マージとも一番楽にできるのはORACLE。しかしデータ量が膨大なので
express editionでは制限を超える。また検索が複雑になるとSEでは時間的に微妙なのでEEが欲しいところ。
フリーなRDBMSであるPostgreSQL、MySQLはデータインポートには難がない。しかし
4半期ごとのデータを合わせる作業の際、各種問題点が発覚。ともにMERGEコマンドはあるにはあるが、
ORACLEのMERGEと同じ動作ではなかった。マージ対象のテーブルにdefault列があるとMERGEできないなど。

MSSQLはMERGE文があり、データ取り込みMERGEに難はなかった。しかしbcpコマンドを使った
データ取り込みの際、型がdatetime2を指定してもdatetime型として取り扱いが生じる。
オリジナルデータの問題であるのだが、頻繁にあり得ない日付が存在する。たとえば西暦1500年とか。
この場合、datetime型では取り扱いは無理となり、datetime2型で取り扱いが必要となる。
故、テーブルにdatetime2を用意したのだが、bcpでデータ取り込みを行うとそれは撥ねられてしまう。
加え、区切り文字$の間の文字列にエスケープを目的に、あるいは文字列を囲む目的に
置かれたダブルクオートをそもまま読んでしまいAERSテーブル仕様書に従った文字列長を超えてしまう。
$"ABCDEFG ""HIJK"" LMN"$をそのまま"ABCDEFG ""HIJK"" LMN"として入力を試みている。
また、
$"hogehoge $ hogehoge"$を"hogehogeとhogehoge"と認識している
そのためオリジナルデータの調整とテーブル仕様の改修(varchar(70)->varchar(80)など)が必要

ORACLEの場合、そのような事はなく、エラーはオリジナルに存在するデータ行途中の改行による
列がない、列の型が合わないなどだけで、改行コードを削除すればよく、データを直接修正する必要はない。

■mssql
osql -S C2 -d AERS -i c.sql -E
 *c.sqlに各種テーブルが定義される
bcp DEMO01Q2 in DEMO01Q2.TXT -d AERS -f DEMO.FMT -e ERR.DEMO.OUT -F2 -T
 *データフォーマットファイルDEMO.TXTに従い、DEMO01Q1.TXTデータを取り込む。エラーはERR.DEMO.OUTに
 *格納して、先頭行はスキップして2行目から読み込み(-F2)、windows認証でロードさせる
DEMO.FMT

10.0
14
1 SQLCHAR 0 0 "$" 1 ISR Japanese_CI_AS
2 SQLCHAR 0 0 "$" 2 CASE Japanese_CI_AS
3 SQLCHAR 0 0 "$" 3 I_F_COD Japanese_CI_AS
4 SQLCHAR 0 0 "$" 4 FOLL_SEQ Japanese_CI_AS
5 SQLCHAR 0 0 "$" 5 IMAGE Japanese_CI_AS
6 SQLCHAR 0 0 "$" 6 EVENT_DT Japanese_CI_AS
7 SQLCHAR 0 0 "$" 7 MFR_DT Japanese_CI_AS
8 SQLCHAR 0 0 "$" 8 FDA_DT Japanese_CI_AS
9 SQLCHAR 0 0 "$" 9 REPT_COD Japanese_CI_AS
10 SQLCHAR 0 0 "$" 10 MFR_NUM Japanese_CI_AS
11 SQLCHAR 0 0 "$" 11 MFR_SNDR Japanese_CI_AS
12 SQLCHAR 0 0 "$" 12 AGE Japanese_CI_AS
13 SQLCHAR 0 0 "$" 13 AGE_COD Japanese_CI_AS
14 SQLCHAR 0 0 "\r\n" 14 GNDR_COD Japanese_CI_AS

■oracle
sqlplus aers/aers@aers @c.sql
sqlldr aers/aers@aers control=demo.ctl skip=1
 *demo.ctlの記述に従って、データを取り込み、先頭行はスキップして2行目から読み込む(skip=1)。


トップ   編集 添付 複製 名前変更     ヘルプ   最終更新のRSS
Last-modified: 2013-03-11 (月) 08:33:54 (2959d)