Bigquery如果字段存在

时间:2016-10-17 21:56:21

标签: google-bigquery

简短:有没有办法在不存在的BQ字段中查询,为这些字段接收空值?

我的问题几乎相同 BigQuery IF field exists THEN但是在我的情况下,有时我的API可以查询没有某些特定字段(历史表)的表,这种方法失败,因为它需要一个包含该字段的表:

SELECT a, b, c, COALESCE(my_field, 0) as my_field
FROM
(SELECT * FROM <somewhere w/o my_field>),
(SELECT * FROM <somewhere with my_field>)

有没有办法做类似的事情:

SELECT IFEXISTS(a, NULL) as the-field
FROM <somewhere w/o my_field>

3 个答案:

答案 0 :(得分:3)

我们假设你的桌子只有x和y字段!
所以下面的查询将完美地工作

SELECT x, y FROM YourTable

但由于不存在的字段z

,因此低于1会失败
SELECT x, y, z FROM YourTable

解决这个问题的方法如下

SELECT x, y, COALESCE(z, 0) as z
FROM 
(SELECT * FROM YourTable),
(SELECT true AS fake, NULL as z)
WHERE fake IS NULL

答案 1 :(得分:2)

就像@phaigeim一样,我在2019年无法使用Mikhail的答案-我得到了“列名z不明确”。

我使用BigQuery Information Schema表结束检查该列是否存在,否则执行SELECT NULL as z。我在dbt中使用jinja宏进行了此操作,因为我想不出一种在直接SQL中执行此操作的方法。这限制了它的适用性,但是在某些用例中它可能是一个选择。

答案 2 :(得分:0)

我最近遇到了这个问题。显然bigquery has exception handling,所以你可以做

npm i discord.js@latest

假设import React from "react"; import ReactDOM from "react-dom"; import "./styles.css"; class Upload extends React.Component { processFile = async e => { var file = e.target.files[0]; var formdata = new FormData(); formdata.append("file", file); formdata.append("cloud_name", "shirly"); formdata.append("upload_preset", "my-preset"); let res = await fetch( "https://api.cloudinary.com/v1_1/emia/auto/upload", { method: "post", mode: "cors", body: formdata } ); let json = await res.json(); console.log(JSON.stringify(json.secure_url)); }; render() { return ( <div> <h3>Upload</h3> <input type="file" onChange={this.processFile} /> </div> ); } } ReactDOM.render(<Upload />, document.getElementById("container")); 列肯定存在,但是BEGIN SELECT a, b FROM your_table; EXCEPTION WHEN ERROR THEN SELECT a, NULL AS b FROM your_table; END 可能不存在。