首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从一个表(Triplestore)插入数据到另一个表(属性表)

从一个表(Triplestore)插入数据到另一个表(属性表)
EN

Stack Overflow用户
提问于 2013-04-21 04:08:55
回答 2查看 174关注 0票数 1

我需要将RDF数据从triplestore传输到属性表。下面给出了三重存储和属性表的示例。

triplestore

代码语言:javascript
复制
Subject Property Object
  Sub1 prop1 hello
  Sub2 prop1 hello1
  Sub3 prop1 hello2
  Sub1 prop2 world
  Sub2 prop2 world1
  Sub3 prop2 world2
  Sub4 prop3 random

属性表1

代码语言:javascript
复制
Subject prop1 prop2
Sub1    hello world
Sub2    hello1 world1
Sub3    hello2 world2

属性表2

代码语言:javascript
复制
Subject prop3
Sub4  random 

这是我正在使用的数据集的一个非常简化的版本。triplestore表中大约有一百万条记录。根据不同属性和对象的不同分组,必须创建多个属性表。我已经识别并创建了各种属性表?生成属性表的属性是以这样的方式选择的,即主题完全包含在单个属性表中?

我面临的问题是将数据从triplestore插入到属性表。是否有一种方法可以将特定主题的数据插入到单个insert statement.If中的属性表的行中,它不能在单个查询中完成,这是最有效的方法。

我正在使用python创建SQL查询的转储,后者在postgres服务器上运行。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-21 05:00:01

如果您有一个已知的、固定的属性集,这是很容易的。如果您没有一组已知的固定属性,则必须从应用程序、PL/PgSQL或使用tablefunc扩展中的tablefunc函数生成动态SQL。

对于固定属性集,您可以自联接:

http://sqlfiddle.com/#!12/391b7/6

代码语言:javascript
复制
SELECT p1."Subject", p1."Object" AS "prop1", p2."Object" AS "prop2"
FROM triplestore p1
INNER JOIN triplestore p2 ON (p1."Subject" = p2."Subject")
WHERE p1."Property" = 'prop1'
  AND p2."Property" = 'prop2'
ORDER BY p1."Subject";

SELECT p1."Subject", p1."Object" AS "prop1"
FROM triplestore p1
WHERE p1."Property" = 'prop3'
ORDER BY p1."Subject";

要将这些转换为INSERTs,只需使用INSERT ... SELECT

代码语言:javascript
复制
INSERT INTO "Property Table 1"
SELECT p1."Subject", p1."Object" AS "prop1"
FROM triplestore p1
WHERE p1."Property" = 'prop3'
ORDER BY p1."Subject";
票数 1
EN

Stack Overflow用户

发布于 2013-04-21 22:37:12

一般来说,您试图做的工作闻起来有点像EAV (实体属性值)模式--它被广泛认为是反模式。另外,如果我的回答不符合你的需要,我想我不太明白你想要达到什么目的。

如果您的问题是在特定密钥下存储以前未知格式的数据--在您的示例中,这似乎是主题--我建议使用postgres控制hstore分机。使用这将允许您创建一个表,如

代码语言:javascript
复制
create table foo (
  id serial not null primary key,
  subject character varying not null,
  properties hstore
);

其中属性字段本质上就是Ruby所称的"Hash“。您可以将键/值对插入到此存储中(例如,从上面的示例“prop1=>hello”中),并使用等效的语法选择它。

插入相当直截了当:

代码语言:javascript
复制
insert into foo (subject, properties) values ('Sub1', 'prop1=>Hello'::hstore);

与使用其他方法相比,hstore支持btree、gin和gist索引(所有这些都在特定的先决条件下)。在您的情况下,大多数是直接匹配,在属性中搜索某个值,即使btree也能工作,因为它支持hstore的相等操作符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16127878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档