Die ZIP-Datei enthält eine Reihe von Dateien:
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
jedes davon scheint in einem bizarren, fast CSV-ähnlichen Format zu sein, z. NUTR_DEF.txt
:
~287~^~g~^~GALS~^~Galactose~^~2~^~2100~
~291~^~g~^~FIBTG~^~Fiber, total dietary~^~1~^~1200~
plus sr26_doc.pdf
, die Dokumentation.
Tabellendefinitionen erstellen
Sie müssen hier also SQL-Tabellendefinitionen für die Datenbank erstellen – mit einer Tabelle für jede Eingabedatei. Sie benötigen die CREATE TABLE
Befehl dafür; siehe die PostgreSQL-Dokumentation.
Seite 35 der PDF-Datei sollte Ihnen helfen - "Abbildung 1. Beziehungen zwischen Dateien in der USDA National Nutrient Database for Standard Reference". Die folgenden Seiten beschreiben die Dateiformate und sagen Ihnen, was jede Spalte bedeutet. Sie können CREATE TABLE
schreiben Aussagen basierend auf dieser Beschreibung.
Hier ist ein Beispiel für FOOD_DES.txt
(Lebensmittelbeschreibung), der erste Eintrag.
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)
);
Das ist eine ziemlich wörtliche Kopie der Beschreibung. So würde ich die Tabelle nicht gestalten
Ich habe NUMERIC
verwendet Dezimal-Gleitkommatypen mit beliebiger Genauigkeit für Genauigkeit bei nicht ganzzahligen numerischen Typen. Wenn Leistung wichtiger ist als Genauigkeit, können Sie float4
verwenden stattdessen.
Für Beziehungen verwenden Sie FOREIGN KEY
Beschränkungen - nur colname coltype REFERENCES othertable(othercol)
reicht aus, um eine zu erstellen.
Wichtig :Ich habe die Spaltennamen doppelt in Anführungszeichen gesetzt, um denselben Namen wie in den Definitionen beizubehalten. Das bedeutet, dass Sie sie immer doppelt anführen müssen, wenn Sie darauf verweisen, z. SELECT "NDB_No" FROM food_des;
. Wenn Sie das nicht möchten, lassen Sie einfach die doppelten Anführungszeichen weg - oder wählen Sie andere Namen. Sie müssen sich nicht an die ungeschickten abgekürzten Spaltennamen halten, die sie verwendet haben, und es ist ganz vernünftig zu schreiben:
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),
usw. Ebenso können Sie, wenn Sie mit Rails arbeiten, die Tabellendefinitionen so umwandeln, dass sie den Konventionen von Rails folgen, insbesondere wenn Sie beabsichtigen, das Laden der Daten über Rails durchzuführen.
Daten werden geladen
Wenn dies vernünftige, vernünftige Dateien mit Trennzeichen wären, könnten Sie einfach jede Tabelle mit psql
laden Befehl \copy
, oder die „Import“-Option von PgAdmin-III.
Es ist eigentlich CSV, sie haben sich gerade entschieden, völlig bizarre Trennzeichen und Anführungszeichen zu verwenden. Import über psql
mit:
\copy food_des FROM 'FOOD_DES.txt' (FORMAT CSV, DELIMITER '^', QUOTE '~');
oder das Äquivalent in einem beliebigen Tool, das Sie verwenden, um mit PostgreSQL zu kommunizieren.
Das Ergebnis ist eine vernünftig aussehende Tabelle:
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)
In ähnlicher Weise können Sie bei Verwendung von Rails jede beliebige Rails-CSV-Bibliothek verwenden und in großen Mengen in Modelle laden.