首页 > 解决方案 > 标准 SQL (BigQuery) 中的用户定义数据类型?

问题描述

是否可以在标准 SQL 中创建用户定义的数据类型,然后可以从 SQL 代码本身中引用?

例如,假设我想创建一个函数,它需要两个实例STRUCT- 每个实例包含三个 type 条目STRING。这需要写这样的东西;

CREATE TEMP FUNCTION myFunc(x STRUCT<STRING, STRING, STRING>, y STRUCT<STRING, STRING, STRING>) AS (...);

不过,我想做的是这样的(伪代码);

CREATE TYPE myType STRUCT<STRING, STRING, STRING>
CREATE TEMP FUNCTION myFunc(x myType, y myType) AS (...)

标签: sqlgoogle-bigquery

解决方案


类似的方法是使用 ANY TYPE 来创建您的函数,例如:

CREATE TEMP FUNCTION myFunc(x ANY TYPE, y ANY TYPE) AS (...);

要回答评论中的问题,如果需要强类型检查,您仍然可以这样做并使用检查 myFunc() 的参数以在类型不兼容时报告错误:

CREATE TEMP FUNCTION check_type_x(x ANY TYPE) AS (STRUCT(x.a, x.b, x.c));


SELECT myFunc(check_type_x(col1), check_type_x(col2));

推荐阅读