【问题标题】:How to slice BigQuery Array - Select all items except last如何对 BigQuery 数组进行切片 - 选择除最后一个以外的所有项目
【发布时间】:2020-04-27 06:39:10
【问题描述】:

我有一个数组

SELECT [1,2,3]

我想选择除最后一个以外的所有元素,所以返回

SELECT [1,2]

我该怎么做?

【问题讨论】:

  • 您的费率很低。对 SO 很重要 - 您可以使用已发布答案左侧投票下方的勾号 mark accepted answer。请参阅meta.stackexchange.com/questions/5234/… 了解为什么它很重要!对vote on answer 也很重要。投票选出有帮助的答案。 ...您可以检查当有人回答您的问题时该怎么做 - stackoverflow.com/help/someone-answers。遵循这些简单的规则,您可以提高自己的声誉分数,同时让我们有动力回答您的问题:o) 请考虑!
  • 好的,谢谢选择了一个。对于这样一项基本任务,他们看起来都太复杂了,所以我最终解决了对它的需求
  • 想与社区分享您的解决方法吗?
  • 不记得了,这是我用例特有的东西,不一定直接解决上述问题
  • 好的 - 没问题 :o)

标签: arrays google-bigquery


【解决方案1】:

以下是 BigQuery 标准 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      

【讨论】:

    【解决方案2】:

    我创建了一个查询来模拟您想要的行为。

    首先我用数组创建一个表。

    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

    【讨论】:

      猜你喜欢
      • 2019-07-13
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      • 2022-11-10
      相关资源
      最近更新 更多