Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: getserenityОтветов: 3

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

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

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

google-bigquerybackupviews

Ответы

Ответ 1 · рейтинг 8 · Michael Andrews

Основываясь на существующем ответе, вы можете автоматизировать резервное копирование все просмотры, проанализировав вывод 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

Ответ 2 · рейтинг 5 · Pentium10

Часть 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

Ответ 3 · рейтинг 1 · Pepe Bawagan

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы