似乎-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
答案 0 :(得分:2)
您可以使用CREATE或REPLACE VIEW语句,例如
bq query --use_legacy_sql=false "
CREATE OR REPLACE VIEW dataset.view
OPTIONS (description='View on reporting table ...') AS
SELECT ...
"
有关更多信息,请参见DDL documentation。
答案 1 :(得分:1)
实际上,根据我正在运行的一些测试,即使对于表,此选项也无法完成文档建议的操作([...] 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
),并且文档并未反映该标志的真实行为。
因此,我已经在内部进行了报告,以便对文档进行必要的更改。
关于通过此标志实现尝试达到的目标的方式,可以使用其他答案和评论中提出的任何变通办法,这些似乎都是不错的选择。
仅为提供这篇文章的最终上下文,documentation已进行了更改,以反映-f
标志的真实功能:
-force或-f
指定后,如果资源已经存在,则退出代码为0。 默认值为false。
答案 2 :(得分:0)
根据文档,它仅强制创建表(如果已存在),不谈论视图
--force or -f
When specified, ignore already exists errors and overwrite the table without prompting. The default value is false.