我正在使用这样的给定值构建一个表
SELECT * FROM UNNEST
([ STRUCT
(1, 3.07766, 6.31371, 12.7062, 63.65600),
(2, 1.88562, 2.91999, 4.30265, 9.92482),
(3, 1.63774, 2.35336, 3.18243, 5.84089)
])
创建名称为 fn_
的列像这样
我想命名列而不将 AS 语句放入 STRUCT, 所以不喜欢
SELECT * FROM UNNEST
([ STRUCT
(1 as a, 3.07766 as b, 6.31371 as c, 12.7062 as d, 63.65600 as e),
(2, 1.88562, 2.91999, 4.30265, 9.92482),
(3, 1.63774, 2.35336, 3.18243, 5.84089)
])
我知道它有效,但问题是我们可以做类似的事情
SELECT * FROM UNNEST
([ STRUCT
(1, 3.07766, 6.31371, 12.7062, 63.65600),
(2, 1.88562, 2.91999, 4.30265, 9.92482),
(3, 1.63774, 2.35336, 3.18243, 5.84089)
]) as (a, b, c, d, e)
这是因为此 SELECT 是由 Python 代码构造的,用于 MERGE 语句,该语句用构造的表更新表中的现有值。
如果您认为有任何其他方法可以更好地在 BigQuery 中构造具有给定值的临时表,请分享您的想法!
最佳答案
使用下面的选项
SELECT * FROM UNNEST
([ STRUCT<a int64, b float64, c float64, d float64, e float64>
(1, 3.07766, 6.31371, 12.7062, 63.65600),
(2, 1.88562, 2.91999, 4.30265, 9.92482),
(3, 1.63774, 2.35336, 3.18243, 5.84089)
])
从你的 Python 代码的角度来看 - 它应该等同于你想要的。因此,具有列名称的行 - 移至 STRUCT 定义行并且不触及值行
关于sql - 如何将列名称添加到在 BigQuery 中执行取消嵌套结构的选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72637324/