1

我是 U2 Universe 的新手,所以我一直在研究它,并且一直在阅读文档,在 stackoverflow 上搜索,但仍然无法弄清楚为什么全选语句只返回一列 - @ID。我一直在尝试在 SSIS 中使用 u2netdk 执行这些选择语句。

从帐户中选择 *

我做了一些更多的研究,发现一些模糊描述列的帖子必须输入@。我不确定这意味着什么 - @ 是文件还是文件字典的一部分?

此外,我确实设法提取了列出所有可用列的文件的字典,但是当我尝试使用 ADO.NET 连接管理器查询 SSIS 中的某些列时,会出现一个错误,提示找不到列。但是,当我在 TCL 中键入相同的语句时,它会返回带有数据的行。为什么会这样?

谢谢,JT

4

2 回答 2

3

真正的 TL;DR 是添加一个名为“@”的“PH”类型的字典项,并将所需的列放在那里。如果您想使用“SELECT *”,您还需要一个“@SELECT”条目。请注意,多值和单值字段在这里可能无法很好地发挥作用,因为它们应该被视为单独的表。查看标题为“UniVerse 文件和 SQL”的 UniVerse 文档“DBA 的 SQL 管理”的第 6 章,以深入了解这一点。

诸如 UniVerse 之类的 Pick 风格数据结构是原始的 NOSQL,因为它们存在于以前 ANSI SQL 还不是标准并且存储元数据的空间价格非常非常高的时候。

从 UniVerse 中执行 SQL 是很棘手的,因为 SQL 中的数据类型是明确定义的,而 Universe 中的数据和字典是独立的结构,它们是独立存储的,有时甚至是相互独立使用的。当您阅读或写作时,您可以使用字典作为一种键来确定您正在使用的数据类型,但没有什么说您必须这样做。此外,查询语言允许您随时更改您正在使用的字典,并且不符合字典结构的数据只会以意想不到的方式显示,而不是爆炸性地爆炸。这可能令人难以置信的自由或导致疯狂,但这是另一个话题。

为了使 UniVerse 与 SQL 配合得很好,您必须以这样一种方式定义 Dictionary 以使其与数据的底层结构挂钩。当您从 Universe 读取一条记录时,您实际上是在读取一个完整的数据集,其中包含 1 个或多个表嵌套最多 3 层。对于您的情况,我会将您要访问的所有“D”和“I”类型字段放入字典的“@”PH 记录中。在“@”中,它们是否是多值的并不重要。这将使这些字段可用于 SQL 引用,但根据您的字典,您仍然可能会遇到数据问题。

如果你想做“SELECT * FROM foo;” 您需要有一个“@SELECT”语句,它是“@”记录的子集,仅包含单值字段。您需要为每个包含相关字段的多值关联创建 PH 记录,然后加入以获得一个统一的查询。请记住,即使使用所有这些 SQL,在 TCL 提示符下的响应与通过 ODBC 输出的响应不同。

这是一个简单的例子。NAME 和 EMAIL 是单值的,DATE 和 AMOUNT 是多值的。

@
PH
NAME EMAIL DATE AMOUNT

@SELECT
PH
NAME EMAIL

ORDERS
PH
DATE AMOUNT

祝你好运!

于 2017-10-16T14:47:36.537 回答
1

听起来您需要为要查询的表/文件更新 @SELECT 字典记录。您需要为每个 DICT 文件/表(属性 1,空格分隔)填写此记录,其中包含您希望 ODBC/u2netdk 可用的所有字段。

在使您的 Universe 数据库为 ODBC/u2netdk 查询做好准备时,需要进行一些设置。请查看我的其他答案,了解我在为此配置数据库时的阅读和处理建议

https://stackoverflow.com/a/40495059/844685

于 2017-10-16T13:54:46.877 回答