itgendch033:后备数据库需要 Invantive Data Replicator 将 'ExactOnlineXML.XML.SubscriptionLines' 的列数限制为 1,000
itgendch033: Backing databases require Invantive Data Replicator to restrict the number of columns to 1,000 for 'ExactOnlineXML.XML.SubscriptionLines'
当执行批处理脚本从 Exact Online 复制我的数据时,出现以下错误:
Error itgencun016: Exclamation itgendch033: Backing databases require Invantive Data Replicator to restrict the number of columns to 1,000 for 'ExactOnlineXML.XML.SubscriptionLines'.
它发生在以下查询中:
select /*+ ods(true, interval '20 hours') */ count(*)
from ExactOnlineXML.XML.SubscriptionLines
ExactOnlineXML.XML.InvoiceLines
也是如此。
如何在不使列最大化的情况下复制这些表。
Invantive SQL 不限制列名的长度,也不限制 table 或视图的列数。
但是,传统数据库是在另一个时代设计的,通常限制为例如 30..128 个字符的列名和 1.000、1.024 或几千列。记住 Oracle 运行 在 64 KB 上(32 K 代码,32 K 数据);这大约是这个问题和答案的大小:-)
将数据从 Exact Online 复制到传统数据库(如 Oracle、SQL Server 或 PostgreSQL 时),Invantive Data Hub 将使用 Invantive SQL 从中检索数据case Exact Online 然后批量加载到数据库中。
但是,数据必须适合列名和列号。
这就是列名如此怪异的主要原因;它们适合独立于原始列名称的有限数量的字符。生成的视图的列名也通过删除具有唯一 MD5 哈希的中心部分来缩短。
对于列数,Data Hub 只是严格检查您的源没有超过 1.000 列的限制。 Exact Online XML API 没有描述哪些列可以用值填充的文档;只是一个描述所有理论可能性的 XSD,导致数百万列。
大多数 Exact Online XML-based table 已经调整为排除没有值的列名称路径,但它们通常仍然不适合 1.000 列。
可能的解决方案是:
- 使用 Exact Online REST API 变体,它经常出现,有时在功能和性能上也相似(并非总是如此,XML API 是旧的,但总的来说更好地设计可用性)。所以检查是否有
ExactonlineREST..SubscriptionLines
.
- 详尽描述要复制的列。
描述要复制的列
最后一个解决方案有点复杂。它还违背了使用涓流加载(使用网络挂钩)或智能采样等高级策略;它只是一个带或不带版本控制的普通副本。
作为示例,当连接到 Data Replicator 环境时,我 运行 查询了 200 家具有订阅的 Exact 公司:
请注意,/*+ ods(true) */
不存在,但隐式假定;当还连接到 Data Replicator 时默认进行复制。
通过添加 /*+ ods(false) */
,您可以有效地告诉 SQL 引擎不要将要复制的数据发送到 Data Replicator 提供程序的数据库中。
当我运行它时,还有一个错误itgenugs026(请求的列数超过结果网格中显示支持的最大数):
这实际上是一个渲染错误;查询工具中使用的网格将自身限制为 1.000 列。较大的列量会导致非常慢的 UI 响应时间。
通过点击按钮 'Hide empty columns' 或使用 Invantive Data Hub 作为用户界面,您可以获得实际结果:
注意工具提示:标题显示的标签有些自然,但实际的列名称显示在工具提示中。
写下您需要的列名,然后只用您需要的列填写 in-memory table,例如:
create or replace table my_subscriptions@inmemorystorage
as
select /*+ ods(false) */
subscription_number_attr
, subscription_description
from exactonlinexml..subscriptionlines
现在以正常方式复制此 table:
select /*+ ods(true, interval '1 second') */
count(*) some_unneeded_data_to_force_replication
from my_subscriptions@inmemorystorage
请注意,ODS 提示必须存在。 In-memory table 默认情况下从不复制。
刷新可以使用alter persistent cache [force] refresh
,但是in-memorytable必须提前填写
存储库中的结果条目将是:
事实table(请参阅 dcs_.... 了解时间旅行的数据仓库)是:
而默认的命名视图是imy_my_subscriptions_r(imy是'inmemorystorage' driver的缩写):
当执行批处理脚本从 Exact Online 复制我的数据时,出现以下错误:
Error itgencun016: Exclamation itgendch033: Backing databases require Invantive Data Replicator to restrict the number of columns to 1,000 for 'ExactOnlineXML.XML.SubscriptionLines'.
它发生在以下查询中:
select /*+ ods(true, interval '20 hours') */ count(*)
from ExactOnlineXML.XML.SubscriptionLines
ExactOnlineXML.XML.InvoiceLines
也是如此。
如何在不使列最大化的情况下复制这些表。
Invantive SQL 不限制列名的长度,也不限制 table 或视图的列数。
但是,传统数据库是在另一个时代设计的,通常限制为例如 30..128 个字符的列名和 1.000、1.024 或几千列。记住 Oracle 运行 在 64 KB 上(32 K 代码,32 K 数据);这大约是这个问题和答案的大小:-)
将数据从 Exact Online 复制到传统数据库(如 Oracle、SQL Server 或 PostgreSQL 时),Invantive Data Hub 将使用 Invantive SQL 从中检索数据case Exact Online 然后批量加载到数据库中。
但是,数据必须适合列名和列号。
这就是列名如此怪异的主要原因;它们适合独立于原始列名称的有限数量的字符。生成的视图的列名也通过删除具有唯一 MD5 哈希的中心部分来缩短。
对于列数,Data Hub 只是严格检查您的源没有超过 1.000 列的限制。 Exact Online XML API 没有描述哪些列可以用值填充的文档;只是一个描述所有理论可能性的 XSD,导致数百万列。
大多数 Exact Online XML-based table 已经调整为排除没有值的列名称路径,但它们通常仍然不适合 1.000 列。
可能的解决方案是:
- 使用 Exact Online REST API 变体,它经常出现,有时在功能和性能上也相似(并非总是如此,XML API 是旧的,但总的来说更好地设计可用性)。所以检查是否有
ExactonlineREST..SubscriptionLines
. - 详尽描述要复制的列。
描述要复制的列
最后一个解决方案有点复杂。它还违背了使用涓流加载(使用网络挂钩)或智能采样等高级策略;它只是一个带或不带版本控制的普通副本。
作为示例,当连接到 Data Replicator 环境时,我 运行 查询了 200 家具有订阅的 Exact 公司:
请注意,/*+ ods(true) */
不存在,但隐式假定;当还连接到 Data Replicator 时默认进行复制。
通过添加 /*+ ods(false) */
,您可以有效地告诉 SQL 引擎不要将要复制的数据发送到 Data Replicator 提供程序的数据库中。
当我运行它时,还有一个错误itgenugs026(请求的列数超过结果网格中显示支持的最大数):
这实际上是一个渲染错误;查询工具中使用的网格将自身限制为 1.000 列。较大的列量会导致非常慢的 UI 响应时间。
通过点击按钮 'Hide empty columns' 或使用 Invantive Data Hub 作为用户界面,您可以获得实际结果:
注意工具提示:标题显示的标签有些自然,但实际的列名称显示在工具提示中。
写下您需要的列名,然后只用您需要的列填写 in-memory table,例如:
create or replace table my_subscriptions@inmemorystorage
as
select /*+ ods(false) */
subscription_number_attr
, subscription_description
from exactonlinexml..subscriptionlines
现在以正常方式复制此 table:
select /*+ ods(true, interval '1 second') */
count(*) some_unneeded_data_to_force_replication
from my_subscriptions@inmemorystorage
请注意,ODS 提示必须存在。 In-memory table 默认情况下从不复制。
刷新可以使用alter persistent cache [force] refresh
,但是in-memorytable必须提前填写
存储库中的结果条目将是:
事实table(请参阅 dcs_.... 了解时间旅行的数据仓库)是:
而默认的命名视图是imy_my_subscriptions_r(imy是'inmemorystorage' driver的缩写):