Google BigQuery: позиция элемента в массиве - PullRequest
0 голосов
/ 21 июня 2020

Возможно ли получить позицию элемента в массиве в Google BigQuery? Что-то вроде функции array_postion в Postgresql?

В частности, мне нужно получить позицию элемента в массиве после unnest array:

WITH data_table AS
(SELECT '{"fruit":[{"apples":5,"oranges":10},{"apples":2,"oranges":4}]}' AS data)

SELECT fruit, ? as position
FROM data_table, UNNEST(JSON_EXTRACT_ARRAY(  data,  '$.fruit')) as fruit

fruit                     |  position
-------------------------------------
{"apples":5,"oranges":10} |  1
{"apples":2,"oranges":4}  |  2

Я пробую обходной путь с помощью row_number (), но я Не уверен насчет сортировки

WITH data_table AS
(SELECT '{"fruit":[{"apples":5,"oranges":10},{"apples":2,"oranges":4}]}' AS data)

SELECT fruit, ROW_NUMBER() OVER() AS position
FROM data_table, UNNEST(JSON_EXTRACT_ARRAY(  data,  '$.fruit')) as fruit

1 Ответ

2 голосов
/ 21 июня 2020

Это возможно с помощью with offset:

WITH data_table AS
(SELECT '{"fruit":[{"apples":5,"oranges":10},{"apples":2,"oranges":4}]}' AS data)

SELECT fruit, i
FROM data_table, UNNEST(JSON_EXTRACT_ARRAY(  data,  '$.fruit')) as fruit with offset as i 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...