- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 Scopus 数据抓取到 h2 文件数据库中。数据中有超过 46,000,000 条记录,每条记录都被视为不同的,这意味着数百 GB 的数据是重复的(因此是关系数据库)。为了减少所有这些数据的插入时间,我首先创建一组没有约束的临时表,然后使用 SELECT DISTINCT 和 GROUP BY 将数据复制到实际表中以强制唯一性。
唯一的异常(exception)是文档表和引用文档表。由于数据的格式,我可以保证每条记录代表一个唯一的文档,因此我可以插入文档表,然后仅连接引用文档表中具有文档表中尚未包含的 ID 的行。
相关代码如下:
CREATE TABLE document (docid varchar NOT NULL, title varchar, abstract varchar, docType varchar NULL, ref boolean);
CREATE TABLE refdoc (refid varchar NOT NULL, title varchar);
INSERT INTO document (docid, title, abstract, docType, ref)
VALUES ('2-s2.0-0000098715', 'title', 'abstract', 'ab', 'false');
INSERT INTO refdoc (refid, title)
VALUES ('2-s2.0-0000098715', 'title'),
VALUES ('2-s2.0-33947184743', 'title');
ALTER TABLE document
ADD PRIMARY KEY (docid);
ALTER TABLE document
ADD FOREIGN KEY (docType) REFERENCES doctype(abbrev);
INSERT IGNORE INTO document (docid, title, ref)
SELECT refid, title, 'true' FROM refdoc;
INSERT IGNORE 查询抛出:org.h2.jdbc.JdbcSQLException:唯一索引或主键冲突:“CONSTRAINT_INDEX_6 ON PUBLIC.DOCUMENT(DOCID)
我还尝试使用 WHERE NOT EXISTS:
INSERT INTO document (docid, title, ref)
SELECT refid, title, 'true'
FROM refdoc
WHERE NOT EXISTS (
SELECT refid FROM refdoc
INNER JOIN document
ON document.docid = refdoc.refid );
但是尝试连接未索引的表实际上是不可能的 - 我尝试过的涉及连接的尝试都不起作用。
作为最后的手段,我可以使用 FileHashMap 并转储 refdoc 表的内容,然后构建一个巨大的PreparedStatement,例如:
INSERT INTO document (docid, title, ref)
SELECT ?, ?, 'true'
WHERE NOT EXISTS (
SELECT docid FROM document
WHERE docid = ? );
但我显然不想这样做,因为这会花费很长时间。
最佳答案
终于找到了一个不涉及构建100,000,000条记录的批处理语句的解决方案。问题是我需要强制我插入到文档中的 refdocs 尚未在文档表中,并且我只插入 refdoc 表中的唯一行。在此之前我的所有解决方案要么未能避免冲突,要么未能强制执行唯一性,要么涉及没有索引的表上的联接。
这是解决方案 SQL:
CREATE TABLE document (docid varchar NOT NULL, title varchar, abstract varchar, docType varchar NULL);
CREATE TABLE refdoc (refid varchar NOT NULL, title varchar);
INSERT INTO document (docid, title, abstract, docType)
VALUES ('2-s2.0-0000098715', 'title', 'abstract', 'ab');
INSERT INTO refdoc (refid, title)
VALUES ('2-s2.0-0000098715', 'title'),
VALUES ('2-s2.0-33947184743', 'title');
INSERT IGNORE INTO document (docid, title)
SELECT refid, MAX(title)
FROM refdoc
WHERE refid NOT IN (
SELECT docid FROM document )
GROUP BY refid;
ALTER TABLE document
ADD PRIMARY KEY (docid);
ALTER TABLE document
ADD FOREIGN KEY (docType) REFERENCES doctype(abbrev);
现在的逻辑是:
这样做的额外好处是,在插入完成之前不会对文档表建立索引。
我仍然不完全清楚为什么我在没有主键的表上遇到主键约束违规,但这听起来像是要提交到 h2 github 作为错误报告。
关于java - 在 mysql 模式下使用 h2 INSERT IGNORE 引发主键违规,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778305/
我想澄清一些关于违反 MVVM 的问题。因此,我创建了一个解决方案,其中包含一些项目来演示这些案例。 这是解决方案的定义(项目): View (它是一个 WPF 类库,显然它有 View ) View
这个比较器方法有什么问题? 我已阅读: Java error: Comparison method violates its general contract 并理解,如果 c1 > c2,且 c2
public Integer getMaxCount(String id,String type) { String maxCount ="SELECT MAX(ID) AS COUNT FR
代码如下 #include int main() { auto [a] = std::make_tuple(1); return [a]() -> int { return a;
我正在尝试开发一个应用程序,该应用程序将显示缩放以适合屏幕大小的任意图像。但是,在 EDT 上缩放图像会显着降低 UI,因此我决定使用以下代码在后台线程中缩放图像。 final Runnabl
无论如何,是否可以在 Grails 项目中自动查找 I18N 违规?例如, Enabled: 应该被标记,因为它没有使用 获取标签值。 如果 codenarc 对此有规则,那就太好了,但我认为没有。
我想从 Sonar 中排除一些方法(用于分析目的)。 实际上是自动生成的equals()和hashCode()。没有使用大括号等,我并不总是想修复它们。有没有办法只排除某些方法的范围? 最佳答案 您可
我有一些看起来像这样的代码(我用通用变量替换了我的业务变量): Map map = new HashMap(); for (int i = 1; i < 10; i++) { String s
在使用 IList> 时作为方法声明中的参数类型发生 FXCop 违规 It doesnt nest generic type IList> 我该如何解决? 最佳答案 原因是: A nested ty
我有以下代码,我得到了 PMD 违规 SuspiciousEqualsMethodName。 我想知道为什么这会被视为违规? private boolean areEquals(final Objec
令我惊讶的是,Java 有时可以为您检查比较器契约。 例如,当你写一个不遵循传递性的顺序关系时,你得到 java.lang.IllegalArgumentException: Comparison m
我们有一个头文件,其中包含各种浮点精度的一些残差: template struct rsdTarget { static const double value; }; template <> c
我正在尝试更新一篇博客文章,但我从数据库部分收到了唯一的关键错误,然后我没有使用模型并直接访问 ORM,但又没有成功。 这是我具体要编辑的路线 Route::get('/getedit/{slug}'
需要帮助解决 Sonar 问题。我们正在使用一些在 Maven 公共(public)存储库中不存在的第三方 jar。我将它的依赖定义为: api
我开始使用 CheckThreadViolationRepaintManager 来检测 EDT 违规。 它提示: partner = getParameter("partner",generateP
我有 ViewState POJO 类,它们的构造函数带有许多参数。问题是 PMD 对它们抛出 ExcessiveParameterList 违规。 现在,我试图抑制所有以 ViewState.jav
PMD 失败:...规则:UnusedPrivateMethod 优先级:3 避免未使用的私有(private)方法,例如“printMyString(String)” private void an
我写了一个 lisp 程序,它有两个参数,一个目的地和一个 BST 形式的 map 。它在 BST 中搜索目标号码,如果找到目标则打印 (found: path)。如果未找到,则应该打印(未找到:目的
我有以下 Java 方法: private int calculate() { return (bytes[0] & 0xff) + ((bytes[1] & 0xff) << 8); } P
我一直在思考以下问题。考虑两个文件: A.cpp: template void g(T) {} inline void f() { g(1); } B.cpp: template void g(T)
我是一名优秀的程序员,十分优秀!