如何在BigQuery标准SQL中对数组进行排序?

时间:2017-12-04 14:29:43

标签: sql arrays google-bigquery

我想知道是否可以在Google BigQuery中为各个数组值订购(应用订单)?

我能够通过首先在整个transactonal基表上应用order,然后聚合数组来实现这一点;但是当表太大时,会出现资源错误,以便通过大表进行排序。

所以我想知道是否可以使用SQL或UDF对每个单独的数组值进行排序。

这曾被问过Order of data in bigquery repeated records,但这是4,5年前。

1 个答案:

答案 0 :(得分:10)

当然,您可以使用ARRAY功能。它支持可选的ORDER BY子句。您还没有提供示例数据,但假设您有一个名为arr的顶级数组列,您可以执行以下操作:

SELECT
  col1,
  col2,
  ARRAY(SELECT x FROM UNNEST(arr) AS x ORDER BY x) AS arr
FROM MyTable;

这会按其值排序arr的元素。如果您实际拥有结构类型的数组,例如ARRAY<STRUCT<a INT64, b STRING>>,则可以按结构字段之一进行排序:

SELECT
  col1,
  col2,
  ARRAY(SELECT x FROM UNNEST(arr) AS x ORDER BY a) AS arr
FROM MyTable;