2017-07-25 5 views
0

私はMonetDBマージテーブルを持っています。そのテーブルには約620万行のデータがあり、それをmerge_tableとしましょう。これには14個のメンバーテーブルがあり、それぞれに月単位のデータが含まれています(たとえば、2017年1月のdata1701)。データベースへのデータのロードとメンバテーブルの追加/削除を処理するJavaプログラムは、何とか同じテーブルをマージテーブルに複数回追加することができました。 、MonetDB - テーブルを複数回マージするためにテーブルが追加されましたが、それを削除または削除できません

その後

ALTER TABLE myschema.merge_table DROP TABLE data1708; 

操作の成功(0.608ms):私の問題は、今私はMonetDBは、操作が成功したと言うにもかかわらず、マージテーブルからこれらの重複したテーブルを削除することができないということです私はテーブルを削除しようとすると:

DROP TABLE myschema.data1708; 

のDROP TABLE:テーブルdata1708をドロップすることができない(データベースオブジェクトがwがありますHICH私はmerge_tableのメンバーをリストする場合、data1708がまだあるもちろん

、)それに依存します。

これらの重複を削除するために使用できる他の方法はありますか?

編集:

MonetDBバージョン11.25.23(monetdbd [21491] 1.7(Dec​​2016-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

最初に、MonetDBのどのバージョンを使用していますか? どのバージョンのJDBCドライバですか?また、私はそれを実行することを取るそれはそれを取る問題を離れることはありませんでしたか?

私が試した - 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; 

これは正しく動作します。つまり、2番目の '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

+0

ねえJoeri、 私は、クエリの結果で私の質問を編集しました。残念ながら、Javaプログラムは私のものではありませんが、特定の前提を含まないように修正されています。問題はJDBCドライバにある可能性があります。 – bem13

+0

あなたの出力は、実際には、データ1707とデータ1708の3回の出現を示しています。 私はJDBC 2.25とMonetDBのバージョン Dec2016-SP5とJul2017を試しましたが、この動作の再現に失敗しました。 したがって、JDBCは問題のない場所にある可能性があります。 私はこの がどうして起こったかを理解する上でのさらなる提案はありません。あなたができることはおそらくデータベースをリロードすることであり、 あなたのアプリケーションのさまざまな改善が十分であることを願って これに再度実行してください。後であなたが今までにどのようにトリックする方法を見つけたら MonetDBにテーブルを何回も追加するには、 を修正できるのでお知らせください。 –

+0

問題ありません、とにかく助けてくれてありがとうございます。ダンプからDB(およびマージテーブル)を再作成し、プログラムを少し修正し、最新のMonetDBバージョンに更新しました。私たちが何かを見つけたら、メーリングリストを通して知ってもらうでしょう。 – bem13

関連する問題