使用Invantive SQL进行分布式查询时,请选择Exact Online的不同部门



我有一组SQL语句,使用Invantive SQL的分布式选项,从Exact Online中提取发货信息,并在Freshdesk中为每个发货序列号创建一张票,并将消费者作为联系人。

当在一个登录代码下连接到Exact Online和Freshdesk时,这可以很好地工作。但是,最终用户使用不同的登录代码。在这种情况下,SQL语句集从Exact Online中的测试部门而不是正确的生产部门检索数据。

当不使用分布式选项时,我可以使用更改分区

use 123123

其中,123123是Exact Online国家/地区的唯一部门编号。

当连接到Exact Online和Freshdesk时,我会得到一个:

itgenuse002: List of partitions could not be determined.

如何强制为特定的Exact Online分区执行SQL语句集,而不是为登录代码执行默认的SQL语句集?

显示问题的示例SQL查询:

create or replace table fulladdress@inmemorystorage --STAP 1.
as 
select acad.id
,      acad.name
,      acad.phone
,      acad.email
,      acad.addressline1 || '   ' || acad.postcode || '   ' || acad.city fulladdress
from   ExactonlineREST..Accounts@eolnl acad 
where  acad.status = 'C'

显示的use语句适用于只有一个数据容器的数据库。在这种情况下,只有一个数据容器可以处理这个问题,并且一切都很顺利。

对于InvantiveSQL中的分布式查询,您需要指示使用哪个数据容器的use语句。否则,第一个数据容器将尝试处理它(在这种情况下,可能是没有分区概念的Freshdesk(。这类似于将数据容器别名附加到每个表,如中所示

select ...
from   table@eolnl
join   table2@freshdesk
on     ...

这里eolnlfreshdesk指定了应该在哪里查找表。

因此,在这种情况下使用:

use 123123@eolnl

set语句也是如此。

从您的代码来看,您的连接中似乎运行了多个数据容器。从用户界面,您只能在默认数据容器上设置分区。

但是,有一个简单的代码解决方案可以使用。您必须知道要为其设置分区的数据容器的别名。在use调用中使用该别名(在本示例中,123123是您想要选择的分区(:

use 123123@eolnl

或者使用所有可用分区:

use all@eolnl

最新更新