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.
Index <indexValue> är utanför tillåtna gränser. Matrisen har <arraySize> element. Använd try_element_at 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
indexValue ligger utanför gränsen för definierade matriselement för ett element_at(arrayExpr, indexValue)eller elt(arrayExpr, indexValue) uttryck.
Värdet måste vara mellan -arraySize och arraySize, exklusive 0.
Åtgärder för att minska
Hur du åtgärdar det här felet beror på orsaken:
Är matrisens kardinalitet mindre än förväntat?
Åtgärda indatamatrisen och kör frågan igen.
Har
indexValueberäknats felaktigt?Justera
indexValueoch kör frågan igen.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) för att tolerera referenser utanför gränsen.
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_IN_ELEMENT_AT error because of mismatched indexing
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (4) AS T(index);
[INVALID_ARRAY_INDEX_IN_ELEMENT_AT] The index 4 is out of bounds. The array has 3 elements. If necessary set "ANSI_MODE" to false to bypass this error.
-- Increase the aray size to cover the index
> SELECT element_at(array('a', 'b', 'c', 'd'), index) FROM VALUES(1), (4) AS T(index);
a
d
-- Adjusting the index to match the array
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (3) AS T(index);
a
c
-- Tolerating out of bound array index with adjustment to 1-based indexing
> SELECT try_element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (4) AS T(index);
a
NULL
-- Tolerating out of bound by setting ansiConfig in Databricks SQL
> SET ANSI_MODE = false;
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (4) AS T(index);
a
NULL
> SET ANSI_MODE = true;
-- Tolerating out of bound by setting ansiConfig in Databricks Runtime
> SET spark.sql.ansi.enabled = false;
> SELECT element_at(array('a', 'b', 'c'), index) FROM VALUES(1), (4) AS T(index);
a
NULL
> SET spark.sql.ansi.enabled = true;