我想知道是否可以在Google BigQuery中为各个数组值订购(应用订单)?
我能够通过首先在整个transactonal基表上应用order,然后聚合数组来实现这一点;但是当表太大时,会出现资源错误,以便通过大表进行排序。
所以我想知道是否可以使用SQL或UDF对每个单独的数组值进行排序。
这曾被问过Order of data in bigquery repeated records,但这是4,5年前。
答案 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;