sql - 如何将列名称添加到在 BigQuery 中执行取消嵌套结构的选择

标签 sql google-bigquery unnest

我正在使用这样的给定值构建一个表

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_ 的列像这样

<表类=“s-表”> <标题> <第>行 f0_ f1_ f2_ f3_ f4_

我想命名列而不将 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/

相关文章:

sql - 我如何从两个不同的表详细信息中求和?

java - bigquery.tables().list() 通过 JAVA 返回 null

sql - BigQuery 请求、生成组合并计算交集

google-bigquery - 更改现有 bigquery 表中的聚簇列

matlab - 如果 MATLAB Rb2020 中的行和列维度彼此不一致,如何取消嵌套具有嵌套数据和文本内容的元胞数组?

sql - 将多维数组转换为记录

sql - 分割给定字符串并准备 case 语句

sql - 如何使用 NHibernate 构建字符串查询?

c# - 当一个人在 neo4j 中拥有 max(age) 等信息时,我该如何返回他的信息?

sql - 在另一个语句中使用 RETURNING-data