【问题标题】:Google BigQuery - how to drop table with bq command?Google BigQuery - 如何使用 bq 命令删除表?
【发布时间】:2023-03-19 14:35:01
【问题描述】:

Google BigQuery - bq 命令使您能够创建、加载、查询和更改表。

我没有找到任何关于删除表的文档,很高兴知道如何去做。

我发现 bq 工具更容易实现,而不是为每个命令编写 python 接口。

谢谢。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    扩展@james 的出色答案,我只需要删除数据集中的所有表,而不是实际删除数据集本身。因此,grep 部分对我来说是不必要的,但我仍然需要摆脱

    table_id
    ------------------
    

    列出表格时 bq 返回的标题,因为我使用 sed 删除了前两行:

    for i in $(bq ls -n 9999 my_dataset | sed "1,2 d" | awk '{print $1}'); do bq rm -f my_dataset.$i; done;
    

    也许有一个bq 选项不返回该标头,但如果有,我不知道。

    【讨论】:

      【解决方案2】:

      有没有办法批量删除多个表? – 主动学习者

      在 bash 中,您可以执行以下操作:

      for i in $(bq ls -n 9999 my_dataset | grep keyword | awk '{print $1}'); do bq rm -ft my_dataset.$i; done;
      

      解释:

      • bq ls -n 9999 my_dataset - 在我的数据集中最多列出 9999 个表
      • | grep keyword - 将上一个命令的结果通过管道传输到 grep 中,搜索您的表共有的关键字
      • | awk '{print $1}' - 将前一个命令的结果通过管道传输到 awk 并仅打印第一列
      • 将所有内容包装到 for 循环中
      • do bq rm -ft my_dataset.$i; done; - 从数据集中删除每个表

      我强烈建议在添加“do bq rm”之前运行命令来列出要删除的表。这样,您可以确保只删除您实际要删除的表。

      更新: 参数-ft 现在返回一个错误,应该只是-f 来强制删除,没有提示:

      for i in $(bq ls -n 9999 my_dataset | grep keyword | awk '{print $1}'); do bq rm -f my_dataset.$i; done;
      

      【讨论】:

      • -ft 仍然是一个有效且必需的选项,对于表删除,您只需要单独指定它们 -f -t。
      【解决方案3】:

      找到了:

      bq rm -f -t data_set.table_name
      

      -t 用于表,-f 用于强制,-r 删除命名数据集中的所有表

      很棒的工具。

      【讨论】:

      • 有没有办法批量删除多个表?
      • @activelearner 你可以使用-r. With -r, remove all tables in the named dataset
      【解决方案4】:

      您可以将 Python 代码(在 Jupyter Notebook 上)用于相同目的:

      bigquery_client  = bigquery.Client() #Create a BigQuery service object
      dataset_id='Name of your dataset'
      table_id='Table to be deleted'
      table_ref = bigquery_client.dataset(dataset_id).table(table_id)
      bigquery_client.delete_table(table_ref)  # API request
      print('Table {}:{} deleted.'.format(dataset_id, table_id))
      

      如果要删除完整的数据集:

      如果数据集也包含表。我们想一次性删除包含表的数据集,命令是:

      !bq rm -f -r serene-boulder-203404:Temp1   # It will remove complete data set along with the tables in it
      

      如果您的数据集为空,那么您也可以使用以下命令: 要使用以下命令,请确保您已删除该数据集中的所有表,否则会产生错误(数据集仍在使用中)。

      #Now remove an empty dataset using bq command from Python
      !bq rm -f dataset_id
      print("dataset deleted successfully !!!")
      

      【讨论】:

        【解决方案5】:

        我使用命令行for loop删除了一个月的表数据,但这取决于你的表命名:

        for %d in (01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31) DO bq rm -f -t dataset.tablename_201701%d

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-02-18
          • 2016-01-30
          • 1970-01-01
          • 2014-08-03
          • 2017-12-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多