ज़िप में कई फ़ाइलें हैं:
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
जिनमें से प्रत्येक एक विचित्र लगभग-सीएसवी-जैसे प्रारूप में प्रतीत होता है, उदा। NUTR_DEF.txt
:
~287~^~g~^~GALS~^~Galactose~^~2~^~2100~
~291~^~g~^~FIBTG~^~Fiber, total dietary~^~1~^~1200~
प्लस sr26_doc.pdf
, दस्तावेज़ीकरण।
तालिका परिभाषाएं बनाना
तो आपको यहाँ क्या करना है डेटाबेस के लिए SQL तालिका परिभाषाएँ बनाना है - प्रत्येक इनपुट फ़ाइल के लिए एक तालिका के साथ। आपको CREATE TABLE
की आवश्यकता है इसके लिए आदेश; PostgreSQL दस्तावेज़ देखें।
पीडीएफ का पृष्ठ 35 आपकी मदद करेगा - "चित्र 1. मानक संदर्भ के लिए यूएसडीए राष्ट्रीय पोषक तत्व डेटाबेस में फाइलों के बीच संबंध"। निम्नलिखित पृष्ठ फ़ाइल स्वरूपों का वर्णन करते हैं, जो आपको बताते हैं कि प्रत्येक कॉलम का क्या अर्थ है। आप 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
. का उपयोग किया है गैर-पूर्णांक संख्यात्मक प्रकारों में सटीकता के लिए मनमाना-सटीक दशमलव फ़्लोटिंग पॉइंट प्रकार। यदि सटीकता से प्रदर्शन अधिक महत्वपूर्ण है, तो आप 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),
आदि। इसी तरह, यदि आप रेल के साथ काम कर रहे हैं, तो आप टेबल परिभाषाओं को रेल के सम्मेलनों का पालन करने के लिए परिवर्तित कर सकते हैं, खासकर यदि आप रेल के माध्यम से डेटा लोड करने का इरादा रखते हैं।
डेटा लोड हो रहा है
यदि ये समझदार, समझदार सीमांकित फ़ाइलें होतीं तो आप psql
का उपयोग करके प्रत्येक तालिका को लोड कर सकते थे कमांड \copy
, या PgAdmin-III का "आयात" विकल्प।
यह वास्तव में सीएसवी है, उन्होंने अभी पूरी तरह से विचित्र सीमांकक और उद्धरण वर्णों का उपयोग करने का निर्णय लिया है। 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)
इसी तरह, यदि आप रेल का उपयोग कर रहे हैं तो आप जो भी रेल सीएसवी लाइब्रेरी चाहते हैं उसका उपयोग कर सकते हैं और मॉडल में बल्क-लोड कर सकते हैं।