Как нарезать массив BigQuery - выбрать все элементы, кроме последнего - PullRequest
0 голосов
/ 09 января 2020

У меня есть массив

SELECT [1,2,3]

Я хотел бы выбрать все элементы, кроме последнего, поэтому верните

SELECT [1,2]

Как мне это сделать?

Ответы [ 2 ]

3 голосов
/ 09 января 2020

Ниже для BigQuery Standard SQL

#standardSQL
WITH test AS (
  SELECT [1,2,3] original_array UNION ALL
  SELECT [101,102,103, 104, 105]
)
SELECT original_array,
  ARRAY(
    SELECT * EXCEPT(OFFSET)
    FROM test.original_array WITH OFFSET
    WHERE OFFSET < ARRAY_LENGTH(test.original_array) - 1
  ) new_array
FROM test

с результатом

Row original_array  new_array    
1   1               1    
    2               2    
    3        
2   101             101  
    102             102  
    103             103  
    104             104  
    105      
0 голосов
/ 09 января 2020

Я создал запрос для имитации желаемого поведения.

Сначала я создаю таблицу с массивом.

WITH table_test AS (SELECT [1,2,3] as ARRAY_TEST)

И после этого я запускаю запрос, используя ORDINAL функция [1] для получения каждого элемента из каждой позиции в массиве, кроме последнего элемента -1.

SELECT ARRAY_TEST[ORDINAL(count_list)] 
  FROM UNNEST((SELECT GENERATE_ARRAY(1, (SELECT ARRAY_LENGTH(ARRAY_TEST)-1)) 
FROM table_test)) count_list, table_test

Если вы хотите удалить больше значений из очереди, измените значение -1 .

[1] https://cloud.google.com/bigquery/docs/reference/standard-sql/array_functions#offset_and_ordinal

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...