bq mk -f --view(强制替换现有视图不起作用)

时间:2018-10-31 11:03:02

标签: google-bigquery

似乎-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

3 个答案:

答案 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.