2016-06-15 194 views
0

我有一個表格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 edgesstart 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 lookupstarttypeend) UNIQUE KEY reverse_lookupendtypestart) 約束edges_ibfk_1外鍵(start)參考文獻nodesid) 約束edges_ibfk_2外鍵(end)參考文獻nodesid) )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; 

回答

0

它可以通過兩種方式來完成。

刪除外約束,

負載數據和

重新創建約束。

使用

SET FOREIGN_KEY_CHECKS = 0禁用約束;

插入您的數據

SET foreign_key_checks = 1;

+0

表是大約400GB,所以如果我放棄約束並重建它,它需要時間並最終失敗。我也試過第二種方法,但似乎sqoop打開每個映射器的新連接,並不承認FK檢查被禁用 – hlagvankar

+0

我不知道如何獨家新聞的作品,但如果你可以嘗試每個查詢中的第二個選項...... –