错误:DDLDML语句不支持写入偏好和分区字段。

问题描述 投票:0回答:1

我试图在BigQuery中使用这个查询来调度一个表。

DECLARE isEmpty DEFAULT (SELECT COUNT(keyword) = 0 from dataset.check_table);

DECLARE isFilled DEFAULT (SELECT COUNT(keyword) > 0 from dataset.check_table);

IF isEmpty
  THEN SELECT * FROM dataset.table_a;

ELSEIF isFilled
  THEN SELECT * FROM dataset.table_b;

END IF;

结果调度不灵,给我"

ERROR: Write preference and partitioning field are not supported with DDL/DML statements

然后,我尝试了一个变通的方法,使用该查询作为一个视图。

CREATE OR REPLACE VIEW dataset.v_table AS

DECLARE isEmpty DEFAULT (SELECT COUNT(keyword) = 0 from dataset.check_table);

DECLARE isFilled DEFAULT (SELECT COUNT(keyword) > 0 from dataset.check_table);

IF isEmpty
  THEN SELECT * FROM dataset.table_a;

ELSEIF isFilled
  THEN SELECT * FROM dataset.table_b;

END IF;

但我做不到,因为它给我另一个错误。

Syntax error: Expected "(" or keyword SELECT or keyword WITH but got keyword DECLARE at [3:1]

这里有谁有任何想法,让我可以做调度?

先谢谢你

google-bigquery scheduled-tasks scheduler
1个回答
1
投票

试试这样做。

SELECT
  *
FROM
  UNNEST( 
    (SELECT
      (
        CASE (SELECT COUNT(keyword)  from dataset.check_table) = 0
        WHEN TRUE 
        THEN ( 
             SELECT ARRAY( 
                           SELECT AS STRUCT *
                           FROM dataset.table_a)
        )
        ELSE (SELECT ARRAY( 
                           SELECT AS STRUCT *
                           FROM dataset.table_b)
        )
        END
      )
   )
)
© www.soinside.com 2019 - 2024. All rights reserved.