我有一個表格A在配置元(從MySQL的轉儲),其中包含以下行,第一列是PK的ID。Sqoop導出失敗的外鍵約束
1295517534, 112, Harshal-test, 2016-04-14 10:13:32, 2016-04-15 05:17:30, NULL, NULL, NULL
1295517533, 112, "3tLMPU9Ii7ObvATtF1j6d8Hnla-15n5zMcWTDUKgC54, 2016-04-14 10:13:32, 2016-04-15 05:17:30, NULL, NULL, NULL
我有包含記錄類似下面這第一和第三列是開始和結束和另一個表B中他們都是FK指的ID表A.
1, 1, 1, 1, 2016-04-15 05:17:30, 2016-04-15 05:17:30
1295517533, 1, 1, 1, 2016-04-15 05:17:30, 2016-04-15 05:17:30
1295517533, 1, 1295517534, 1, 2016-04-15 05:17:30, 2016-04-15 05:17:30
的當我嘗試將這些記錄導出到MYSQL,SQOOP作業因外鍵問題而失敗。例如,記錄1,起始值和結束值都爲1,它們不出現在父表中,記錄2的起始值存在於父表中,但終值不存在。但由於記錄3的開始和結束值都存在於父表中,該行應該被導出到mysql。
如何編寫一個配置單元查詢,以便只選擇表B中父表中具有開始和結束值的那些記錄?
或者在使用SQOOP導入之前,有沒有其他方法可以在mysql中禁用FK?
我試着通過在mysql中設置FOREIGN_KEY_CHECKS = 0來禁用FK,但SQOOP作業仍然失敗。
子表: CREATE TABLE edges
( start
BIGINT(20)NOT NULL, type
INT(11)NOT NULL, end
BIGINT(20)NOT NULL, base_strength
浮子DEFAULT NULL, updated
日期時間DEFAULT NULL , db_updated日期時間DEFAULT NULL, UNIQUE KEY lookup
(start
,type
,end
) UNIQUE KEY reverse_lookup
(end
,type
,start
) 約束edges_ibfk_1
外鍵(start
)參考文獻nodes
(id
) 約束edges_ibfk_2
外鍵(end
)參考文獻nodes
(id
) )ENGINE = InnoDB的默認字符集= LATIN1;
父表
CREATE TABLE `nodes` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`type` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`postcode` varchar(4) DEFAULT NULL,
`updated` datetime DEFAULT NULL,
`db_updated` datetime DEFAULT CURRENT_TIMESTAMP,
`useragent` bigint(20) DEFAULT NULL,
`last_seen` date DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `akaid_index` (`type`,`name`),
KEY `useragent_idx` (`useragent`),
KEY `type` (`type`),
CONSTRAINT `useragentfk` FOREIGN KEY (`useragent`) REFERENCES `useragents` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=1091725696 DEFAULT CHARSET=latin1;
表是大約400GB,所以如果我放棄約束並重建它,它需要時間並最終失敗。我也試過第二種方法,但似乎sqoop打開每個映射器的新連接,並不承認FK檢查被禁用 – hlagvankar
我不知道如何獨家新聞的作品,但如果你可以嘗試每個查詢中的第二個選項...... –