U2 Universe SQL 返回特定列数据的 SSIS 问题

U2 Universe SQL SSIS issue with returning data for specific columns

我是 U2 宇宙的新手,所以我一直在研究它并浏览文档,在 Whosebug 上搜索但仍然无法弄清楚为什么只有 select all 语句 returns 一栏 - @ID。我一直在尝试在 SSIS 中使用 u2netdk 执行这些 select 语句。

SELECT * FROM ACCOUNT

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

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

谢谢, JT

听起来您需要更新要查询的 tables/files 的 @SELECT 字典记录。您需要根据 DICT file/table、(属性 1,space 分隔)填写此记录,其中包含您希望 ODBC/u2netdk.

可用的所有字段

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

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

像 UniVerse 这样的 Pick 风格数据结构是原始的 NOSQL,因为它们存在于以前 ANSI SQL 还不是标准的时候,space 的价格存储元数据非常非常高。

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

为了使 UniVerse 与 SQL 兼容,您必须以这样的方式定义字典,使其与数据的底层结构挂钩。当您从 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

祝你好运!