简短:有没有办法在不存在的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>
答案 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
可能不存在。