bigquery备份所有视图定义

get*_*ity 4 backup views google-bigquery

我正在使用bigquery,并且已经创建了数百个视图。其中大多数未使用,应删除。但是,有可能会使用其中一些,而我不能盲目删除所有内容。因此,我需要以某种方式备份所有视图定义,然后再删除它们。

有人知道一个好方法吗?我不是要保存数据,而只是保存视图定义查询及其名称。

谢谢阅读!

Pen*_*m10 5

第1部分。

发出bq ls命令。该--format标志可用于控制输出。如果要在默认项目以外的项目中列出视图,请以以下格式将项目ID添加到数据集中:[PROJECT_ID]:[DATASET]

bq ls --format=pretty [PROJECT_ID]:[DATASET]
Run Code Online (Sandbox Code Playgroud)

哪里:

[PROJECT_ID]是您的项目ID。
[DATASET]是数据集的名称。

运行命令时,“类型”字段显示TABLEVIEW。例如:

+-------------------------+-------+----------------------+-------------------+
|         tableId         | Type  |        Labels        | Time Partitioning |
+-------------------------+-------+----------------------+-------------------+
| mytable                 | TABLE | department:shipping  |                   |
| myview                  | VIEW  |                      |                   |
+-------------------------+-------+----------------------+-------------------+
Run Code Online (Sandbox Code Playgroud)

第2部分。

发出bq show命令。该--format标志可用于控制输出。如果要获取有关默认项目以外的项目中的视图的信息,请以以下格式将项目ID添加到数据集中:[PROJECT_ID]:[DATASET]。要将视图属性写入文件,请添加> [PATH_TO_FILE]到命令。

bq show --format=prettyjson [PROJECT_ID]:[DATASET].[VIEW] > [PATH_TO_FILE]
Run Code Online (Sandbox Code Playgroud)

哪里:

[PROJECT_ID]是您的项目ID。
[DATASET]是数据集的名称。
[VIEW]是视图的名称。
[PATH_TO_FILE]是本地计算机上输出文件的路径。

例子:

输入以下命令以在mydataset中显示有关myview的信息。mydataset在您的默认项目中。

bq show --format=prettyjson mydataset.myview
Run Code Online (Sandbox Code Playgroud)

输入以下命令以显示有关myview中的信息mydataset。mydataset在myotherproject中,而不是您的默认项目中。视图属性将写入本地文件— /tmp/myview.json

bq show --format=prettyjson myotherproject:mydataset.myview > /tmp/myview.json
Run Code Online (Sandbox Code Playgroud)


小智 5

基于现有答案,您可以通过解析with 的输出来自动备份所有视图:bqjq

#!/bin/bash

DATASETS=$(bq  ls --format=sparse | tail -n+3)
for d in $DATASETS; do
  TABLES=$(bq ls --format=prettyjson "$d" | jq '.[] | "\(.id), \(.type)"')
  IFS=$'\n'
  for table in $TABLES; do
    [[ ! "$table" == *VIEW* ]] && continue
    view=$(echo "$table" | sed -e 's/"//g' | cut -d , -f 1)
    query=$(bq show --format=prettyjson "$view" | jq -r '.view.query')
    echo -e "$query" > "$view.sql"
  done
done
Run Code Online (Sandbox Code Playgroud)