我是U2宇宙的新手,所以我一直在研究它,并且一直在查阅文档,搜索堆栈溢出,但仍然不知道为什么select all语句只返回一个列- @ID。我一直试图使用SSIS中的u2netdk来执行这些select语句。
从帐户中选择*
我做了一些更多的研究,发现一些文章含糊地描述了列必须输入一个@。我不知道这意味着什么-@是文件还是文件字典的一部分?
此外,我确实提取了一个列出所有可用列的文件的字典,但是当我试图使用ADO.NET连接管理器查询SSIS中的某些列时,会出现一个错误,即无法找到列。但是,当我在TCL中键入相同的语句时,它将返回带有数据的行。这一切为什么要发生?
谢谢,JT
发布于 2017-10-16 14:47:36
这里真正的TL;DR是添加一个名为"@“的"PH”类型的字典条目,并将您想要的列放在其中。如果要使用"SELECT *“,还需要"@SELECT”条目。请注意,多值字段和单值字段在这里可能不能很好地发挥作用,因为它们应该被视为单独的表。请参阅UniVerse文档“DBA的”的第6章,该章的标题为"UniVerse文件和SQL“,以了解这一点。
像UniVerse这样的Pick样式的数据结构是原始的NOSQL,因为它们存在于ANSI还不是标准时,而且存储元数据的空间的代价非常非常高。
在UniVerse中执行SQL是很棘手的,因为SQL中的数据类型是显式定义的,而Universe中的数据和字典是独立的结构,它们被存储,有时甚至彼此独立使用。在读或写时,您可能会使用字典作为一种键,以确定您正在处理的数据类型,但您不必说什么。此外,查询语言允许您随时更改正在使用的字典,而不适合字典结构的数据只是以意外的方式显示,而不是异想天开。这可能是难以置信的解放或导致疯狂,但这是另一个话题。
要使UniVerse对SQL发挥良好作用,您必须定义字典,以便将其挂钩到数据的底层结构中。当您从宇宙读取记录(记录)时,本质上是读取一个完整的数据集,其中有一个或多个表,嵌套深度可达3层。对于您的情况,我将接受您想要访问的所有"D“和"I”类型字段,并将它们放在字典的"@“PH记录中。在"@“中,它们是否具有多值并不重要。这将使这些字段可以从SQL中引用,但根据字典的不同,数据可能仍然会出现问题。
如果要执行"SELECT * FROM foo“;则需要有"@SELECT”语句,该语句是"@“记录的子集,仅包含单变量字段。您将希望对每个包含所需关联字段的多值关联进行PH记录,然后将其连接起来,以获得一个统一查询。请记住,即使有了所有这些SQL,在TCL提示符下的响应也将与通过ODBC发出的响应不同。
下面是一个简单的例子。姓名和电子邮件为单值,日期和金额是多值的。
@
PH
NAME EMAIL DATE AMOUNT
@SELECT
PH
NAME EMAIL
ORDERS
PH
DATE AMOUNT祝好运!
发布于 2017-10-16 13:54:46
听起来,您需要更新要查询的表/文件的@SELECT字典记录。您将需要按照DICT文件/表(属性1,空格分隔)填充此记录,并将所有希望提供给ODBC/u2netdk的字段填充到该记录中。
当您的Universe数据库为ODBC/u2netdk查询做好准备时,有一些设置。在配置您的数据库时,请查看我的另一个答案,为您提供有关阅读和处理的建议。
https://stackoverflow.com/questions/46769977
复制相似问题