将bigquery查询或ddl语句转换为create_if_fneed和write_append



由于编程原因,我想发出两次相同的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 ...

相关内容

  • 没有找到相关文章