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

Mar*_*ari 4 sql arrays google-bigquery

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

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

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

这曾被问过一次大数据重复记录的数据顺序,但这是4,5年前.

Ell*_*ard 11

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

SELECT
  col1,
  col2,
  ARRAY(SELECT x FROM UNNEST(arr) AS x ORDER BY x) AS arr
FROM MyTable;
Run Code Online (Sandbox Code Playgroud)

这会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;
Run Code Online (Sandbox Code Playgroud)