从BigQuery表中的数组获取前N个元素

马特525252

我有一个数组列,我想获取N它的第一个元素(保持数组数据类型)。有一些不错的方法吗?理想情况下,无需取消嵌套,将array_agg排序并返回到array。

我也可以这样做(获取前两个元素):

WITH data AS
(
  SELECT 1001 as id, ['a', 'b', 'c'] as array_1
  UNION ALL
  SELECT 1002 as id, ['d', 'e', 'f', 'g'] as array_1
  UNION ALL
  SELECT 1003 as id, ['h', 'i'] as array_1
)
select *,
       [array_1[SAFE_OFFSET(0)], array_1[SAFE_OFFSET(1)]] as my_result
from data

但是显然这不是一个很好的解决方案,因为如果某个数组只有1个元素,它将失败。

艾略特·布罗萨德(Elliott Brossard)

这是带有UDF的常规解决方案,您可以针对任何数组类型进行调用:

CREATE TEMP FUNCTION TopN(arr ANY TYPE, n INT64) AS (
  ARRAY(SELECT x FROM UNNEST(arr) AS x WITH OFFSET off WHERE off < n ORDER BY off)
);

WITH data AS
(
  SELECT 1001 as id, ['a', 'b', 'c'] as array_1
  UNION ALL
  SELECT 1002 as id, ['d', 'e', 'f', 'g'] as array_1
  UNION ALL
  SELECT 1003 as id, ['h', 'i'] as array_1
)
select *, TopN(array_1, 2) AS my_result
from data

它使用了unnest和array函数,听起来好像您不想使用它,但是它具有足够通用的优点,可以将任何数组传递给它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以从枚举中获取前n个元素,然后仍然使用其余的枚举吗?

来自分类Dev

从数组中获取前5个值

来自分类Dev

如何获取Django中的前N个元素?

来自分类Dev

从列表中获取前n个元素

来自分类Dev

C ++从数组中获取前n个元素

来自分类Dev

从列表中获取X个前元素

来自分类Dev

从大型数据集中的R中的data.frame获取排序的前N个元素

来自分类Dev

如何从数组中读取前n个元素

来自分类Dev

从System.Collections.Generic.IEnumerable中获取前n个元素

来自分类Dev

JS-从数组中获取前5个最大元素

来自分类Dev

在回显表的同时从数组中获取第7个元素

来自分类Dev

如何从无限生成器列表中获取前n个元素?

来自分类Dev

Swift从数组中获取x个元素

来自分类Dev

从表中按组删除前n个元素

来自分类Dev

获取数据框中列的前n个元素的均值

来自分类Dev

如何仅获取表中的前3个元素?Selenium Web驱动程序

来自分类Dev

获取指定char数组arduino的前n个元素

来自分类Dev

如何在Hive中获取数组中的前n个元素

来自分类Dev

C ++从数组中获取前n个元素

来自分类Dev

如何在JavaScript中获取数组的第n个元素?

来自分类Dev

是否可以获取Spark Streaming中每个RDD的前n个元素?

来自分类Dev

使用LINQ通过一个查询从数组中获取前五个元素和后五个元素

来自分类Dev

数组的前n个元素(按属性)

来自分类Dev

从sortedmap获取前n个元素

来自分类Dev

如何从数组中读取前n个元素

来自分类Dev

随机获取n个元素数组,并将其插入指定的元素中

来自分类Dev

numpy数组中行的前n个元素

来自分类Dev

获取数组的n个连续元素

来自分类Dev

获取所有/某些元素的列表的前 n 个元素

Related 相关文章

热门标签

归档