我有一个MonetDB合并表,里面有大约6.2亿行数据,我们称之为merge_table
。它有14个成员表,每个表包含一些月度数据(例如2017年1月的data1701
)。处理数据到数据库并添加/删除成员表的Java程序设法将多个相同的表添加到合并表。我的问题是,现在我无法从合并表中删除这些重复的表,即使MonetDB说操作成功了:
ALTER TABLE myschema.merge_table DROP TABLE data1708;
操作成功(0.608ms)
然后,当我试图放下桌子时:
DROP TABLE myschema.data1708;
DROP TABLE:无法删除表data1708(有依赖它的数据库对象)
当然,当我列出merge_table
的成员时,data1708
仍在那里。
我是否可以使用其他方法删除这些副本?
修改
MonetDB版本是11.25.23(monetdbd [21491] 1.7(Dec2016-SP5))。 JDBC版本是2.19。
多次运行DROP TABLE命令会产生相同的结果。尝试再次添加任何表都不起作用,因此它在没有JDBC的情况下按预期工作:
ALTER TABLE myschema.merge_table ADD TABLE data1708;
ALTER TABLE:表'myschema.data1708'已经是MERGE TABLE'myschema.merge_table'的一部分
我的合并表的ID是9020,所以我使用它来运行其余的建议查询:
SELECT * FROM sys.dependencies JOIN sys.dependency_types ON depend_type = dependency_type_id WHERE depend_id = 9020;
+-------+-----------+-------------+--------------------+----------------------+
| id | depend_id | depend_type | dependency_type_id | dependency_type_name |
+=======+===========+=============+====================+======================+
| 9668 | 9020 | 2 | 2 | TABLE |
| 9722 | 9020 | 2 | 2 | TABLE |
| 9776 | 9020 | 2 | 2 | TABLE |
| 9830 | 9020 | 2 | 2 | TABLE |
| 9884 | 9020 | 2 | 2 | TABLE |
| 9938 | 9020 | 2 | 2 | TABLE |
| 13891 | 9020 | 2 | 2 | TABLE |
| 13945 | 9020 | 2 | 2 | TABLE |
| 13999 | 9020 | 2 | 2 | TABLE |
| 14053 | 9020 | 2 | 2 | TABLE |
| 14107 | 9020 | 2 | 2 | TABLE |
| 14161 | 9020 | 2 | 2 | TABLE |
| 14215 | 9020 | 2 | 2 | TABLE |
| 14269 | 9020 | 2 | 2 | TABLE |
+-------+-----------+-------------+--------------------+----------------------+
SELECT * FROM sys.objects WHERE id = 9020;
+------+------------+------+
| id | name | nr |
+======+============+======+
| 9020 | data1607 | 1 |
| 9020 | data1608 | 2 |
| 9020 | data1609 | 3 |
| 9020 | data1610 | 4 |
| 9020 | data1611 | 5 |
| 9020 | data1612 | 6 |
| 9020 | data1701 | 7 |
| 9020 | data1702 | 8 |
| 9020 | data1703 | 9 |
| 9020 | data1704 | 10 |
| 9020 | data1705 | 11 |
| 9020 | data1706 | 12 |
| 9020 | data1707 | 13 |
| 9020 | data1707 | 12 |
| 9020 | data1708 | 13 |
| 9020 | data1707 | 12 |
| 9020 | data1708 | 13 |
+------+------------+------+
答案 0 :(得分:0)
首先,为了完整性,您使用的是哪个版本的MonetDB 哪个版本的JDBC驱动程序?另外,我认为运行
ALTER TABLE myschema.merge_table DROP TABLE data1708;
第二次没有让问题消失?
我试过 - 没有JDBC - 以下脚本:
DROP SCHEMA IF EXISTS demo;
CREATE SCHEMA demo;
SET SCHEMA demo;
CREATE TABLE template (i INT, j INT);
CREATE TABLE foo (LIKE template);
INSERT INTO foo VALUES (1,10), (2,20);
CREATE TABLE bar (LIKE template);
INSERT INTO bar VALUES (3,30);
CREATE MERGE TABLE merged (LIKE template);
ALTER TABLE merged ADD TABLE foo;
ALTER TABLE merged ADD TABLE bar;
ALTER TABLE merged ADD TABLE bar;
ALTER TABLE merged DROP TABLE bar;
DROP TABLE bar;
SELECT * FROM merged;
这可以正常工作。也就是说,第二个'ALTER ADD bar'产生一个 错误消息和DROP TABLE栏成功。你能尝试吗? 类似的东西,但使用玩具Java程序?
此外,在此之前,您可以查看“sys”架构吗?在 尤其是,
SELECT * FROM sys.tables WHERE name = 'merge_table';
找出合并表的id。
SELECT *
FROM sys.dependencies JOIN sys.dependency_types
ON depend_type = dependency_type_id
WHERE depend_id = <merge-table-id>;
和
SELECT * FROM sys.objects WHERE id = <merge-table-id>;
请注意,尝试修改这些表以“修复”内容将无法正常工作。我只是对他们目前的状态感到好奇。
Joeri