Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De index <indexValue> ligt buiten bereik. De matrix bevat <arraySize> elementen. Gebruik de SQL-functie get() om het toegangselement op een ongeldige index te tolereren en in plaats daarvan NULL te retourneren. Stel indien nodig <ansiConfig> in op 'false' om deze fout te omzeilen.
Parameters
- indexValue: de aangevraagde index in de matrix.
 - arraySize: de kardinaliteit van de matrix.
 - ansiConfig: de configuratie-instelling voor het wijzigen van de ANSI-modus.
 
Uitleg
In tegenstelling tot element_at en eltmoet een verwijzing indexValue in een array met behulp van de arrayExpr[indexValue] syntaxis tussen 0 voor het eerste element en arraySize - 1 voor het laatste element.
Een negatieve indexValue of een waarde groter dan of gelijk aan arraySize is niet toegestaan.
Mitigatie
De oplossing voor deze fout is afhankelijk van de intentie:
Gaat de opgegeven
indexValueuit van indexering op basis van één?Gebruik element_at(arrayExpr, indexValue), elt(arrayExpr, indexValue)' of arrayExpr[indexValue - 1] om het juiste matrixelement op te lossen.
Verwacht het
indexValuenegatieve element ten opzichte van het einde van de matrix op te halen?Gebruik element_at(arrayExpr, indexValue) of elt(arrayExpr, indexValue)`. Pas indien nodig aan voor indexering op basis van 1.
Verwacht u dat er een
NULLwaarde wordt geretourneerd voor elementen buiten de kardinaliteit van de index?Als u de expressie kunt wijzigen, gebruikt u try_element_at(arrayExpr, indexValue + 1) om verwijzingen buiten de grenzen te tolereren. Let op de indexering op basis van 1 voor
try_element_at.Als u de expressie als laatste redmiddel niet kunt wijzigen, stelt u de
ansiConfigtijdelijk in opfalseom verwijzingen buiten de grenzen te tolereren.
Voorbeelden
-- An INVALID_ARRAY_INDEX error because of mismatched indexing
> SELECT array('a', 'b', 'c')[index] FROM VALUES(1), (3) AS T(index);
  [INVALID_ARRAY_INDEX] The index 3 is out of bounds. The array has 3 elements. If necessary set "ANSI_MODE" to false to bypass this error.
-- Using element_at instead for 1-based indexing
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (3) AS T(index);
  a
  c
-- Adjusting the index to be 0-based
> SELECT array('a', 'b', 'c')[index -1] FROM VALUES(1), (3) AS T(index);
-- Tolerating out of bound array index with adjustment to 1-based indexing
> SELECT try_element_at(array('a', 'b', 'c'), index + 1) FROM VALUES(1), (3) AS T(index);
  b
  NULL
-- An INVALID_ARRAY_INDEX error because of negative index
> SELECT array('a', 'b', 'c')[index] FROM VALUES(-1), (2) AS T(index);
  [INVALID_ARRAY_INDEX] The index -1 is out of bounds. The array has 3 elements. If necessary set "ANSI_MODE" to "false" to bypass this error.
-- Using element_at to index relative to the end of the array
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(-1), (2) AS T(index);
  c
  b
-- Tolerating an out of bound index by setting ansiConfig in Databricks SQL
> SET ANSI_MODE = false;
> SELECT array('a', 'b', 'c')[index] FROM VALUES(1), (3) AS T(index);
  b
  NULL
> SET ANSI_MODE = true;
-- Tolerating an out of bound index by setting ansiConfig in Databricks Runtime
> SET spark.sql.ansi.enabled = false;
> SELECT array('a', 'b', 'c')[index] FROM VALUES(1), (3) AS T(index);
  b
  NULL
> SET spark.sql.ansi.enabled = true;