запрос bigquery или оператор ddl для create_if_needed и write_append - PullRequest
0 голосов
/ 05 ноября 2019

По программным причинам я хотел бы выполнить один и тот же оператор DDL дважды:

    INSERT INTO dataset.tabledest(id, vi)
    SELECT 'test' AS id,
      'value' AS vi
    FROM dataset.tablesource
  • При первом вызове я хотел бы создать таблицу, если она не существуети добавьте результаты запроса
  • Во второй раз, когда он вызывается, я бы хотел добавить результаты

Используя API BigQuery, это можно сделать следующим образом:

  • использовать оператор выбора только как запрос
  • установить таблицу назначения в качестве параметра (например, используя R bigrquery API, , destination_table='...',)
  • установить write_disposition='WRITE_APPEND'
  • set create_disposition='CREATE_IF_NEEDED'

Я не уверен, что это можно сделать с помощью одного запроса, который не требует дополнительных внешних параметров, передаваемых API.

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Как упомянул @ yun-zhang, выполнение этого в одном выражении может оказаться невозможным.

В качестве альтернативы вы также можете использовать CREATE TABLE IF NOT EXISTS ... вместо проверки вхождения таблицы в INFORMATION_SCHEMA.

1 голос
/ 05 ноября 2019

Нет способа использовать одиночный запрос, в то время как это можно сделать с помощью скрипта, проверив существование таблицы из 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 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...