Кажется, что флаг -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 или вместо DDL Create OR Replace
Основываясь на документации, он заставляет создавать таблицы только в том случае, если они уже существуют, не говоря уже о представлениях.
--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.
Используйте
bq update
, чтобы изменить вид. cloud.google.com/bigquery/docs/managing-views