我想知道如果列存在,我是否可以选择列的值,否则只选择null.换句话说,我想"提升"select语句来处理列不存在时的情况.
SELECT uniqueId
, columnTwo
, /*WHEN columnThree exists THEN columnThree ELSE NULL END*/ AS columnThree
FROM (subQuery) s
Run Code Online (Sandbox Code Playgroud)
请注意,我正在努力巩固我的数据模型和设计.我希望在未来几周内排除这种逻辑,但我真的想超越这个问题,因为数据模型修复比我现在要解决的更耗费时间.
另请注意,我希望能够在一个查询中执行此操作.所以我不是在寻找像这样的答案
首先检查子查询中的列.然后修改您的查询以适当地处理子查询中的列.
我们正在将csv文件加载到BigQuery中.每个文件都将创建一个单独的表.
当我们从这些表中选择时,我们主要使用表查询liek这样做:
SELECT foo, bar
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")'));
Run Code Online (Sandbox Code Playgroud)
现在我们已经为新文件添加了新字段.因此,我们现在还有"baz",而不仅仅是字段"foo"和"bar".
当我运行以下查询时,我得到错误,其中一个较旧的表上不存在字段"baz".
SELECT foo, bar, baz
FROM TABLE_QUERY(name_stub,'table_id CONTAINS "_something" and msec_to_timestamp(creation_time) > date_add(current_timestamp(), -90, "day")'));
Run Code Online (Sandbox Code Playgroud)
有没有办法选择"baz"并且只有没有列的表的默认值?
简短:有没有办法在不存在的 BQ 字段中进行查询,并为这些字段接收空值?
我几乎遇到了BigQuery IF 字段存在 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>)
Run Code Online (Sandbox Code Playgroud)
有没有办法做这样的事情:
SELECT IFEXISTS(a, NULL) as the-field
FROM <somewhere w/o my_field>
Run Code Online (Sandbox Code Playgroud)