Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Indexet <indexValue> ligger utanför gränserna. Matrisen har <arraySize> element. Använd SQL-funktionen get() för att tolerera åtkomst av element vid ogiltigt index och returnera NULL i stället. Om det behövs anger du <ansiConfig> till "false" för att kringgå det här felet.
Parametrar
- indexValue: Det begärda indexet i matrisen.
- arraySize: Matrisens kardinalitet.
- ansiConfig: Konfigurationsinställningen för att ändra ANSI-läge.
Förklaring
Till skillnad från element_at och eltmåste en referens indexValue till en matris med hjälp av arrayExpr[indexValue] syntax vara mellan 0 för det första elementet och arraySize - 1 för det sista elementet.
Ett negativt indexValue eller ett värde som är större eller lika med arraySize tillåts inte.
Förmildrande omständighet
Hur du åtgärdar det här felet beror på avsikten:
Förutsätter den angivna
indexValue1-baserad indexering?Använd element_at(arrayExpr, indexValue), elt(arrayExpr, indexValue)eller arrayExpr[indexValue - 1] för att lösa rätt matriselement.
Är
indexValuenegativt och förväntas hämta element från slutet av arrayen?Använd element_at(arrayExpr, indexValue) eller elt(arrayExpr, indexValue). Justera för 1-baserad indexering om det behövs.
Förväntar du dig att ett
NULLvärde returneras för element utanför indexets kardinalitet?Om du kan ändra uttrycket använder du try_element_at(arrayExpr, indexValue + 1) för att tolerera referenser utanför gränsen. Observera den 1-baserade indexeringen för
try_element_at.Om du inte kan ändra uttrycket, som en sista utväg, ställer du tillfälligt in
ansiConfigpåfalseför att tolerera referenser utanför gränsen.
Exempel
-- 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;