標籤:category 資料庫 記錄 mysql 項目 java
為了適應不同項目對不同感興趣屬性的解析儲存,資料存放區結構採用縱向的屬性列表方式,即一個url頁面多個屬性儲存區多條記錄方式,並且按照text,html,data,num幾大典型類型分別對應儲存。
建立UTF-8字元集的nutch資料庫,並執行表初始化指令碼,參考DDL:
CREATE TABLE `crawl_data` (
`url` varchar(255) NOT NULL,
`code` varchar(255) NOT NULL,
`name` varchar(255) DEFAULT NULL,
`category` varchar(255) DEFAULT NULL,
`order_index` int(255) DEFAULT NULL,
`fetch_time` datetime NOT NULL,
`text_value` text, `html_value` text,
`date_value` datetime DEFAULT NULL,
`num_value` decimal(18,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
650) this.width=650;" src="http://img.mp.itc.cn/upload/20160706/e4d62fb80ced45759643da9ee15a08f3_th.jpg" style="border:0px;margin:0px;padding:0px;font-size:0px;" />
為了一般在業務系統擷取同一個url的多個屬性或友好查詢顯示,參考如下MySQL指令碼實現把縱向的屬性列表屬性轉換為橫向的多列顯示模式。網上有 相關參考指令碼大多是基於數字欄位sum匯總等模式的縱轉橫SQL指令碼,本項目需求是單一的基於字串資訊轉換,經過一段摸索最後找到基於 GROUP_CONCAT可以實現:
SELECT url ,fetch_time,
GROUP_CONCAT(CASE WHEN code = ‘domain‘ THEN text_value ELSE null END) AS `domain`,
GROUP_CONCAT(CASE WHEN code = ‘name‘ THEN text_value ELSE null END) AS `name`,
GROUP_CONCAT(CASE WHEN code = ‘brand‘ THEN text_value ELSE null END) AS `brand`,
GROUP_CONCAT(CASE WHEN code = ‘category‘ THEN text_value ELSE null END) AS `category`,
GROUP_CONCAT(CASE WHEN code = ‘purpose‘ THEN text_value ELSE null END) AS `purpose`,
GROUP_CONCAT(CASE WHEN code = ‘price‘ THEN num_value ELSE null END) AS `price`,
GROUP_CONCAT(CASE WHEN code = ‘refPrice‘ THEN num_value ELSE null END) AS `refPrice`,
GROUP_CONCAT(CASE WHEN code = ‘primaryImage‘ THEN text_value ELSE null END) AS `primaryImage` FROM crawl_data GROUP BY url,fetch_time
650) this.width=650;" src="http://img.mp.itc.cn/upload/20160706/1a8a96424466479180c3333a69d7b528_th.jpg" style="border:0px;margin:0px;padding:0px;font-size:0px;" />
本文出自 “11247808” 部落格,轉載請與作者聯絡!
解析資料存放區MySQL