Bq mk -f --view (принудительная замена существующего представления не работает)

Кажется, что флаг -f или --force = true не работает для представлений. Поскольку он все еще выводит следующую ошибку.

could not be created; a table with this name already exists.

Ниже приведена часть команды, которую я использую

bq mk --use_legacy_sql=false -f --description "View on reporting table ..." --view

Используйте bq update, чтобы изменить вид. cloud.google.com/bigquery/docs/managing-views

Graham Polley 31.10.2018 12:32

Спасибо, кажется, я должен использовать обновление bq или вместо DDL Create OR Replace

Anthony Liu 31.10.2018 18:47
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
1 454
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Основываясь на документации, он заставляет создавать таблицы только в том случае, если они уже существуют, не говоря уже о представлениях.

--force or -f
When specified, ignore already exists errors and overwrite the table without prompting. The default value is false.
Ответ принят как подходящий

Вы можете использовать оператор CREATE OR REPLACE VIEW, например

bq query --use_legacy_sql=false "
  CREATE OR REPLACE VIEW dataset.view
  OPTIONS (description='View on reporting table ...') AS
  SELECT ...
"

Дополнительную информацию см. В Документация DDL.

На самом деле, согласно некоторым тестам, которые я проводил, этот параметр не выполняет то, что предлагает документация ([...] and overwrite the table without prompting), даже для таблиц:

$ bq mk test_dataset.test
  Table 'PROJECT:test_dataset.test' successfully created.
$ bq mk test_dataset.test
  BigQuery error in mk operation: Table 'PROJECT:test_dataset.test' could not be created; a table with this name already exists.
$ bq mk -f test_dataset.test
  Table 'PROJECT:test_dataset.test' could not be created; a table with this name already exists.

Кроме того, если посмотреть на описание инструмента CLI, объяснение не такое, как в документации:

$ bq mk --help
  [...]
  -f,--[no]force: Ignore errors reporting that the object already exists.
    (default: 'false')

И на самом деле, если мы посмотрим на статус выхода команды при добавлении или отсутствии флага -f, мы увидим существенную разницу:

$ bq mk test_dataset.test
  BigQuery error in mk operation: Table 'PROJECT:test_dataset.test' could not be created; a table with this name already exists.
$ echo $?
  1
$ bq mk -f test_dataset.test
  Table 'PROJECT:test_dataset.test' could not be created; a table with this name already exists.
$ echo $?
  0

Поэтому я считаю, что в этом случае функциональность правильная (также, как вы можете видеть, когда не добавляется флаг, вывод включает дополнительное сообщение BigQuery error in mk operation, которого нет с флагом), и документация не отражает реальное поведение флага.

Поэтому я уже сообщил об этом внутри компании, чтобы внести необходимые изменения в документацию.

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


Просто чтобы предоставить некоторый заключительный контекст для этого сообщения, документация уже был изменен, чтобы отразить реальную функциональность флага -f:

--force or -f

When specified, if a resource already exists, the exit code is 0. The default value is false.

Другие вопросы по теме