我在hive(来自mysql的dump)中有一个表a,它包含以下行,第一列是id,即pk。
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,其中包含如下所示的记录,其中第1列和第3列是开始和结束,它们都是fk引用表a的id。
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\u key\u checks=0来禁用fk,但是sqoop作业仍然失败。
子表:创建表 edges
( start
bigint(20)不为空, type
int(11)不为空, end
bigint(20)不为空, base_strength
浮点默认为空, updated
datetime default null,db\u updated datetime default null,唯一键 lookup
( start
, type
, end
),唯一键 reverse_lookup
( end
, type
, start
),约束 edges_ibfk_1
外键( start
)参考文献 nodes
( id
),约束 edges_ibfk_2
外键( end
)参考文献 nodes
( id
))引擎=innodb默认字符集=拉丁1;
父表
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;
1条答案
按热度按时间i1icjdpr1#
有两种方法可以做到。
删除外部约束,
加载数据和
重新创建约束。
或者
禁用约束使用
设置外键检查=0;
插入数据
设置外键检查=1;