BigQuery:SELECT AS STRUCT 未按预期命名结构字段

BigQuery: SELECT AS STRUCT doesn't named struct fields as expected

我定义了以下 UDF 以将字符串转换为字数列表:

CREATE TEMP FUNCTION get_bow_vector(document STRING) RETURNS ARRAY<STRUCT<STRING, INT>> AS ((
  SELECT
  ARRAY(
    SELECT AS STRUCT word AS word, COUNT(1) AS freq
    FROM UNNEST(REGEXP_EXTRACT_ALL(document, r'[\w_]+')) AS word
    GROUP BY word
    ORDER BY freq DESC
  )
));

此 UDF 的大部分工作方式都符合预期:它将一个字符串转换为一个结构数组,其中每个结构都包含一个单词和一个计数。但是,结构的字段未按预期命名为 wordfreq。相反,他们被赋予了匿名字段名称:_field_1_field_2.

我有两个问题:

  1. 如何命名结构的字段?
  2. 如果我不命名结构的字段,我如何访问它们?当我尝试使用 _field_1 时,出现以下错误 Field name _field_1 does not exist in STRUCT<STRING, INT64>

改用下面的方法

CREATE TEMP FUNCTION get_bow_vector(document STRING) 
RETURNS ARRAY<STRUCT<word STRING, freq INT>> AS ((
  SELECT
  ARRAY(
    SELECT AS STRUCT word AS word, COUNT(1) AS freq
    FROM UNNEST(REGEXP_EXTRACT_ALL(document, r'[\w_]+')) AS word
    GROUP BY word
    ORDER BY freq DESC
  )
));