zipにはいくつかのファイルが含まれています:
inflating: DATA_SRC.txt
inflating: DATSRCLN.txt
inflating: DERIV_CD.txt
inflating: FD_GROUP.txt
inflating: FOOD_DES.txt
inflating: FOOTNOTE.txt
inflating: LANGDESC.txt
inflating: LANGUAL.txt
inflating: NUT_DATA.txt
inflating: NUTR_DEF.txt
inflating: sr26_doc.pdf
inflating: SRC_CD.txt
inflating: WEIGHT.txt
それぞれが奇妙なほぼCSVのような形式であるように見えます。 NUTR_DEF.txt
:
~287~^~g~^~GALS~^~Galactose~^~2~^~2100~
~291~^~g~^~FIBTG~^~Fiber, total dietary~^~1~^~1200~
プラスsr26_doc.pdf
、ドキュメント。
テーブル定義の作成
したがって、ここで行う必要があるのは、データベースのSQLテーブル定義を作成することです。入力ファイルごとに1つのテーブルを使用します。 CREATE TABLE
が必要です このためのコマンド; PostgreSQLのドキュメントを参照してください。
PDFの35ページが役立つはずです-「図1.標準参照用のUSDANationalNutrientDatabase内のファイル間の関係」。次のページでは、ファイル形式について説明し、各列の意味を説明します。 CREATE TABLE
と書くことができます この説明に基づくステートメント。
FOOD_DES.txt
の例を次に示します。 (食品の説明)、最初のエントリ。
CREATE TABLE food_des (
"NDB_No" varchar(5) NOT NULL PRIMARY KEY,
"FdGrp_Cd" varchar(4) NOT NULL,
"Long_Desc" varchar(200) NOT NULL,
"Shrt_Desc" varchar(60) NOT NULL,
"ComName" varchar(100),
"ManufacName" varchar(65),
"Survey" varchar(1),
"Ref_desc" varchar(135),
"Refuse" smallint,
"SciName" varchar(65),
"N_Factor" NUMERIC(4,2),
"Pro_Factor" NUMERIC(4,2),
"Fat_Factor" NUMERIC(4,2),
"CHO_Factor" NUMERIC(4,2)
);
これは、説明のかなり文字通りのコピーです。それは私がテーブルをデザインする方法ではありません
NUMERIC
を使用しました 非整数型の精度のための任意精度の10進浮動小数点型。精度よりもパフォーマンスが重要な場合は、float4
を使用できます。 代わりに。
関係には、FOREIGN KEY
を使用します 制約-colname coltype REFERENCES othertable(othercol)
だけ 作成するには十分です。
重要 :定義と同じ名前を維持するために、列名を二重引用符で囲みました。つまり、参照するときは常に二重引用符で囲む必要があります。 SELECT "NDB_No" FROM food_des;
。それを望まない場合は、二重引用符を省くか、別の名前を選択してください。彼らが使用した不器用な省略された列名に固執する必要はなく、次のように書くのは非常に合理的です:
CREATE TABLE food_description (
ndb_no varchar(5) NOT NULL PRIMARY KEY,
foodgroup_code varchar(4) NOT NULL,
long_description varchar(200) NOT NULL,
short_description varchar(60) NOT NULL,
common_name varchar(100),
manufacturer_name varchar(65),
同様に、Railsを使用している場合、特にRailsを介してデータをロードする場合は、Railsの規則に従うようにテーブル定義を変換できます。
データの読み込み
これらが正気で賢明な区切りファイルである場合は、psql
を使用して各テーブルを読み込むことができます。 コマンド\copy
、またはPgAdmin-IIIの「インポート」オプション。
これは実際にはCSVであり、まったく奇妙な区切り文字と引用文字を使用することにしました。 psql
を介してインポート と:
\copy food_des FROM 'FOOD_DES.txt' (FORMAT CSV, DELIMITER '^', QUOTE '~');
または、PostgreSQLとの通信に使用するツールに相当するもの。
結果は賢明な見た目の表です:
craig=> select * from food_des limit 2;
NDB_No | FdGrp_Cd | Long_Desc | Shrt_Desc | ComName | ManufacName | Survey | Ref_desc | Refuse | SciName | N_Factor | Pro_Factor | Fat_Factor | CHO_Factor
--------+----------+----------------------------+--------------------------+---------+-------------+--------+----------+--------+---------+----------+------------+------------+------------
01001 | 0100 | Butter, salted | BUTTER,WITH SALT | | | Y | | 0 | | 6.38 | 4.27 | 8.79 | 3.87
01002 | 0100 | Butter, whipped, with salt | BUTTER,WHIPPED,WITH SALT | | | Y | | 0 | | 6.38 | 4.27 | 8.79 | 3.87
(2 rows)
同様に、Railsを使用している場合は、任意のRails CSVライブラリを使用して、モデルに一括ロードできます。