我正在构建动态sql生成器,并且在联合查询时遇到困难。 当我运行以下查询时:
SELECT NULL AS field;
默认情况下,列类型为BOOL
,它可以与整数类型列结合使用,如下所示:
SELECT field
FROM
(SELECT 21 AS field),
(SELECT NULL AS field)
这会返回成功的结果。 但是当我在一个子查询上使用字符串类型运行类似的查询时,它会失败 这是查询失败的无法联合表:不兼容的类型。 '字段' :STRING' field' :BOOL :
SELECT field
FROM
(SELECT 'hello' AS field),
(SELECT NULL AS field)
推断类型和转换空值的最佳方法是什么。我的sql生成器应该在union上使用几种数据类型,我认为null可以用于所有类型。如果null不能与字符串和其他类型一起使用,那么是否有超级'可用于替换空字段的类型?
答案 0 :(得分:2)
BigQuery为NULL
值分配一个类型,默认情况下是一个整数。要获取字符串NULL
,请转换:
cast(null as string)
我不知道生成器是如何工作的,但您可以安排一个引用正确转换值的查询:
with params as (
select cast(null as string) as null_str
)
select null_str
from params cross join
. . .