小编Ube*_*der的帖子

检索SQL Server中没有子元素的元素

我正在使用SQL Server 2008,我想要检索XML元素并返回元素本身及其属性,不带任何子元素和没有text().例如,以下XML有4个节点(doc,apple,b,banana):

<doc>
<apple type="bramley"> tasty <b>yum!</b> </apple>
<banana color="yellow" shape="bendy"> nice in smoothies </banana>
</doc>
Run Code Online (Sandbox Code Playgroud)

我想回复:

<doc/>
<apple type="bramley"/>
<b/>
<banana color="yellow" shape="bendy"/>
Run Code Online (Sandbox Code Playgroud)

例如,应该返回没有任何子节点的doc,并且应该在没有b子节点的情况下返回apple.但问题是,如果我使用SQL Server节点和查询方法,我无法删除子节点.使用SQL Server 2008,我最接近的是:

declare @x xml = '<doc>
  <apple type="bramley"> tasty <b>yum!</b> </apple>
  <banana color="yellow" shape="bendy"> nice in smoothies </banana>
</doc>';

select 
  c.query('local-name(.)') as Node,
  c.query('for $e in . return <xx> {$e/@*} </xx>') as Attr
from @x.nodes('//*') as T(c);
Run Code Online (Sandbox Code Playgroud)

这将获取每个节点的名称(使用local-name)和节点的属性并返回:

Node    Attr
----    ----
doc     <xx />
apple …
Run Code Online (Sandbox Code Playgroud)

xml sql-server xpath xquery sql-server-2008

6
推荐指数
1
解决办法
1210
查看次数

SQL Server 中的分组依据 varbinary (MAX) 或 varchar (MAX)

在 SQL Server 2008 R2 联机丛书中,这意味着分组列的最大列大小为 8060 字节。

“对于不包含 CUBE 或 ROLLUP 的 GROUP BY 子句,group_by_expression 项的数量受到 GROUP BY 列大小、聚合列以及查询中涉及的聚合值的限制。此限制源于 8,060 字节的限制保存中间查询结果所需的中间工作表。”

但您可以按 varbinary (max) 列进行分组:

create table dbo.T(
  name varchar(100),
  info varbinary(max)
);
insert into dbo.T values ('aardvark', Convert(varbinary(max),Replicate(Convert(varchar(max),'A'),100000)))
select info, count(*) from T group by info;
Run Code Online (Sandbox Code Playgroud)

上面的代码在 SQL Server 2008 R2 以及可能更高的版本中运行良好。我是否误读了在线书籍?有谁知道是否允许按大对象类型分组?我也用谷歌搜索过这个没有结果。

sql-server sql-server-2008-r2

5
推荐指数
1
解决办法
3312
查看次数

DBpedia入门

我想开始使用DBpedia.目前我所知道的是,DBpedia是维基百科数据的结构化形式,可以使用SPARQL进行查询.对我来说,DBpedia的基本思想(给维基百科数据的结构)看起来真的太棒了,所以如果我的问题是基本的,请放轻松.

我的目标

从DBpedia获取简单的数据摘录.例如世界各国及其首都和人口.或者获得100名随机名人,他们的日期和出生地以及简短的描述.最终我想查询元数据以查找DBpedia中的"实体"类型(例如山脉?里弗斯?城市?)及其"属性".但这是一个单独的问题,一旦我掌握了基础知识,我就可以进行实验.

到目前为止我发现了什么

在谷歌我找到了http://wiki.dbpedia.org/develop/getting-started,但我认为它是关于安装所有的DBpedia,我只想查询它.

另外我发现https://mickael.kerjean.me/2016/05/20/walkthrough-dbpedia-and-triplestore/但它假设您已经设置了SPARQL或SNORQL,我看不到如何执行此操作.

麻生太郎我找到了https://docs.data.world/tutorials/sparql/Your_First_Sparql_Query.html这是SPARQL的指南,但它再次假设你正在使用他们自己的DataWorld环境.

在Stackoverflow上,我从DBpedia找到了来自DBpediaList国家的列表国家,但他们再次假设您已经设置了SPARQL环境.

问题(S)

  1. 我用什么软件来编写关于DBpedia数据的简单查询 - 我需要SPARQL还是SNORQL?我是在本地安装还是使用基于Web的工具?我使用Windows 10,我对SQL查询很满意.
  2. 一旦我设置了软件,获取世界各国和首都及人口列表的最简单查询是什么?
  3. 另外,我如何编写一个基本查询来返回(比方说)100个随机的人及其基本细节?

sparql dbpedia

5
推荐指数
1
解决办法
1363
查看次数

我对处理器,内核,线程和并行性的理解是否正确?

我一直试图深入了解这些概念是如何相关的.让我举一个简单的例子,解释一下思考,以便你能够纠正它.

假设我想尝试对两个数组进行排序

int[] A = { ... }; // very large, very unsorted 
int[] B = { ... }; // very large, very unsorted 
Run Code Online (Sandbox Code Playgroud)

通过对它们进行排序"与我的系统并行,我可以对它们进行排序".我充分利用了这样一个事实,即Parallel.ForEach做了很多东西,我只是写

var arrays = new List<int[]>(A, B);
Paralell.ForEach(arrays, (arr) => { Array.Sort(arr); });
Run Code Online (Sandbox Code Playgroud)

现在让我说我在具有以下规范的机器上编译并运行它:

  1. 1个处理器,1个核心
  2. 1个处理器,多个核心
  3. 2个处理器,每个处理器至少有一个核心

在情况1中,绝对不可能获得性能增益.它对A进行排序,然后对B进行排序,就像在常规foreach循环中一样.

在案例2中,也没有性能提升,因为除非你有多个处理器,否则你的机器不能"一次做多于一件事. "即使最终在不同的线程中对它们进行排序,控制线程的CPU也会A的一点排序,B的一点点排序,A的一点点等等,这不仅仅比排序所有的A然后全部的B更有效.

由于前一种情况中提到的原因,案例3是唯一可能获得性能提升的案例.

有人会批评我的理解吗?这是对还是错?(我没有计算机科学专业.所以请在曲线上给我评分.)

c# parallel-processing multithreading asynchronous task

1
推荐指数
1
解决办法
213
查看次数