BigQuery 是否有安全导航运算符,即其字段导航运算符的空安全变体?
理想情况下,我正在寻找类似于 Swift/TypeScript 中的
?.
、Ruby 中的 &.
等的运算符,但我可以调用的函数也足够了。
现在我的查询如下所示:
SELECT a.b.c.d.e
FROM myTable AS a
WHERE
a.b IS NOT NULL
&& a.b.c IS NOT NULL
&& a.b.c.d IS NOT NULL
&& a.b.c.d.e = "my desired value"
编辑:这实际上不起作用。
在 [12:34] a 中未找到名称 b
我希望它可以是这样的:
SELECT a.b.c.d.e
FROM myTable AS a
WHERE a?.b?.c?.d?.e = "my desired value"
Afaik,bigquery 中没有针对 STRUCT 类型的安全导航运算符。
我能想到的是将嵌套的 STRUCT 类型转换为 JSON 类型,并利用可以安全导航的 json 路径。
WITH myTable AS (
SELECT STRUCT(STRUCT(STRUCT('my_desired_value' AS e) AS d) AS c) AS b
)
SELECT TO_JSON(b).c.d.e, --
TO_JSON(b).f.d.e, -- non-existing path
-- b.f.d.e --> error - Field name f does not exist ...
FROM myTable AS a;
要检查结构体类型的字段路径,可以使用 INFORMATION_SCHEMA.COLUMN_FIELD_PATHS。
SELECT *
FROM `your-project.your_dataset.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS`
WHERE table_name = 'myTable';