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 的大部分工作方式都符合预期:它将一个字符串转换为一个结构数组,其中每个结构都包含一个单词和一个计数。但是,结构的字段未按预期命名为 word
和 freq
。相反,他们被赋予了匿名字段名称:_field_1
和 _field_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
)
));
我定义了以下 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 的大部分工作方式都符合预期:它将一个字符串转换为一个结构数组,其中每个结构都包含一个单词和一个计数。但是,结构的字段未按预期命名为 word
和 freq
。相反,他们被赋予了匿名字段名称:_field_1
和 _field_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
)
));