由于编程原因,我想发出两次相同的DDL语句:
INSERT INTO dataset.tabledest(id, vi)
SELECT 'test' AS id,
'value' AS vi
FROM dataset.tablesource
- 第一次调用它时,如果表不存在,我希望它创建表,并附加查询结果
- 第二次调用时,我希望它附加结果
使用BigQuery API,这可以通过以下方式完成:
- 仅将select语句用作查询
- 将目标表设置为参数(例如,使用R bigrquery API
, destination_table='...',
( - 设置
write_disposition='WRITE_APPEND'
- 设置
create_disposition='CREATE_IF_NEEDED'
我不确定这是否可以通过一个不需要传递给API的额外外部参数的单一查询来实现。
正如@yun zhang所提到的,在一条语句中完成这项工作可能是不可能的。
或者,如果不存在,也可以使用CREATE TABLE。。。代替在INFORMATION_SCHEMA中检查表的出现。
没有一种方法可以使用单个查询,而可以通过从information_schema检查表的存在来使用脚本。
IF NOT EXISTS (SELECT 1 FROM dataset.INFORMATION_SCHEMA.TABLES WHERE table_name = 'tabledest') THEN
CREATE TABLE dataset.tabledest (...);
END IF;
INSERT dataset.tabledest SELECT ...
(另一个答案提醒(或者,你可以做:
CREATE TABLE IF NOT EXISTS dataset.tabledest (...);
INSERT dataset.tabledest SELECT ...