bigquery резервное копирование всех определений представлений

Я работаю с bigquery, и было создано несколько сотен представлений. Большинство из них не используются, и их следует удалить. Однако есть вероятность, что некоторые из них уже используются, и я не могу просто удалить все вслепую. Поэтому мне нужно каким-то образом сделать резервную копию всех определений представлений перед их удалением.

Кто-нибудь знает хороший способ? Я не пытаюсь сохранять данные, только запросы определения представления и их имена.

Спасибо за чтение!


person getserenity    schedule 15.02.2018    source источник


Ответы (3)


Основываясь на существующем ответе, вы можете автоматизировать резервное копирование < strong> все просмотры, проанализировав вывод bq с помощью jq:

#!/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
person Michael Andrews    schedule 23.01.2019

Часть 1.

Введите команду bq ls. Флаг --format может использоваться для управления выводом. Если вы перечисляете представления в проекте, отличном от вашего проекта по умолчанию, добавьте идентификатор проекта в набор данных в следующем формате: [PROJECT_ID]:[DATASET].

bq ls --format=pretty [PROJECT_ID]:[DATASET]

Где:

[PROJECT_ID] - это идентификатор вашего проекта.
[DATASET] - это имя набора данных.

Когда вы запускаете команду, в поле Тип отображается либо TABLE, либо VIEW. Например:

+-------------------------+-------+----------------------+-------------------+
|         tableId         | Type  |        Labels        | Time Partitioning |
+-------------------------+-------+----------------------+-------------------+
| mytable                 | TABLE | department:shipping  |                   |
| myview                  | VIEW  |                      |                   |
+-------------------------+-------+----------------------+-------------------+

Часть 2.

Введите команду bq show. Флаг --format может использоваться для управления выводом. Если вы получаете информацию о представлении в проекте, отличном от вашего проекта по умолчанию, добавьте идентификатор проекта в набор данных в следующем формате: [PROJECT_ID]:[DATASET]. Чтобы записать свойства представления в файл, добавьте к команде > [PATH_TO_FILE].

bq show --format=prettyjson [PROJECT_ID]:[DATASET].[VIEW] > [PATH_TO_FILE]

Где:

[PROJECT_ID] - идентификатор вашего проекта.
[DATASET] - имя набора данных.
[VIEW] - имя представления.
[PATH_TO_FILE] - это путь к выходному файлу на вашем локальном компьютере.

Примеры:

Введите следующую команду, чтобы отобразить информацию о myview в mydataset. mydataset находится в вашем проекте по умолчанию.

bq show --format=prettyjson mydataset.myview

Введите следующую команду, чтобы отобразить информацию о myview в mydataset. mydataset находится в myotherproject, а не в вашем проекте по умолчанию. Свойства представления записываются в локальный файл - /tmp/myview.json.

bq show --format=prettyjson myotherproject:mydataset.myview > /tmp/myview.json
person Pentium10    schedule 15.02.2018

Вы можете попробовать использовать bqup, который представляет собой скрипт Python, который мы с некоторыми коллегами использовали для регулярной поддержки вверх по представлениям BigQuery и схемам таблиц.

person Pepe Bawagan    schedule 29.05.2019
comment
Больше не устанавливается через pip bqup, а также при клонировании git и при попытке установить не удается - person Lucas Zamboulis; 11.10.2019
comment
@LucasZamboulis Это должно быть pip install bqup. С какой именно ошибкой вы столкнулись? - person Pepe Bawagan; 13.10.2019
comment
Мое плохое, нужно сначала обновить pip с pip install --upgrade pip. - person Lucas Zamboulis; 14.10.2019