De foutmelding behelst de sectie onder “Call conditions limit” op https://ww1.autotask.net/help/DeveloperHelp/Content/APIs/REST/General_Topics/REST_Thresholds_Limits.htm:
You can include up to 500 OR conditions in a single call to the API. If a call contains more than 500 OR statements, you will receive the API response, “Invalid query syntax. Queries are limited to 500 or fewer ‘OR’ conditions.”
Voor eenvoudiger herleidbaarheid zal de standaard foutcode itgenatr005
vervangen worden door itgenatr035
in dit geval.
Deze foutmelding treedt bij deze query op als er tenminste 500 verschillende invoiceID
s klaarstaan in invoices@inmemorystorage
. Door een ingebouwde optimalisatie wordt automatisch gewisseld van het volledig ophalen van BillingItems
naar gefilterd op die benodigd voor de verschillende invoiceID
s.
Het probleem zal waarschijnlijk ook op te wekken zijn via:
select 1 c
from (select distinct invoiceid from (select invoiceid from BillingItems limit 2500)) ive
join BillingItems bim
on bim.InvoiceId = ive.invoiceId
De optimalisatie kan uitgeschakeld worden via een join_set
hint, zoals:
select /*+ join_set(bim, invoiceid, 500) */ 1 c
from (select distinct invoiceid from (select invoiceid from BillingItems limit 2500)) ive
join BillingItems bim
on bim.InvoiceId = ive.invoiceId
Dit zorgt er voor dat de optimalisatie alleen gebruikt wordt als er maximaal 500 verschillende invoiceId
-waardes zijn. Zijn het er meer? Dan worden alle BillingItems
opgehaald en 1-voor-1 gematcht. De snelheid gaat er hiermee meestal niet op vooruit; als er 100.000 billing items zijn binnen Autotask, dan worden alle 100.000 opgehaald. Dit duurt circa 5 minuten.
Een mogelijke tussenoplossing is om de beperking op join set te combineren met een filter dat invoiceid
tussen de hoogste en laagste mogelijke waarde filtert.
Via een apart kanaal zal contact opgenomen worden om toegang te krijgen tot de data t.b.v. verdere analyse op een meer performante wijze.