Список запланированных запросов в BigQuery - PullRequest
1 голос
/ 18 апреля 2019

Мне необходимо (программно) проанализировать детали запланированных запросов в BigQuery (например, какие таблицы обновляются и какие таблицы доступны в SQL). Я сделал нечто подобное для таблиц / представлений BQ с помощью скрипта Apps BigQuery.Tables.list(), но не могу найти API для доступа к запланированным запросам.

Пользовательский интерфейс может перечислять их, поэтому я считаю, что это должно быть возможно программно, например, через API REST. Кто-нибудь знает, возможно ли это, какой интерфейс поддерживается (Apps Script, REST ...) и, возможно, пример того, как его использовать.

Ответы [ 2 ]

4 голосов
/ 18 апреля 2019

Запланированные запросы являются частью службы передачи данных BigQuery, поэтому вы должны использовать ее API. В частности, метод projects.transferConfigs.list. Заполните поле dataSourceIds с scheduled_query и parent с projects/PROJECT_ID. Как указано в комментариях, если вы используете региональное местоположение, такое как европа-запад2, вместо многорегионального (ЕС или США), вы должны использовать projects.locations.transferConfigs.list. Теперь родительский ресурс будет иметь вид projects/PROJECT_ID/locations/REGIONAL_LOCATION.

Кроме того, для других переводов вы можете получить соответствующий dataSourceIds, используя метод projects.dataSources.list. Вот как я получил scheduled_query один.

Ответом будет массив запланированных запросов, таких как:

{
  "name": "projects/<PROJECT_NUMBER>/locations/us/transferConfigs/<TRANSFER_CONFIG_ID>",
  "destinationDatasetId": "<DATASET>",
  "displayName": "hacker-news",
  "updateTime": "2018-11-14T15:39:18.897911Z",
  "dataSourceId": "scheduled_query",
  "schedule": "every 24 hours",
  "nextRunTime": "2019-04-19T15:39:00Z",
  "params": {
    "write_disposition": "WRITE_APPEND",
    "query": "SELECT @run_time AS time,\n  title,\n  author,\n  text\nFROM `bigquery-public-data.hacker_news.stories`\nLIMIT\n  1000",
    "destination_table_name_template": "hacker_daily_news"
  },
  "state": "SUCCEEDED",
  "userId": "<USER_ID>",
  "datasetRegion": "us"
}

Пример вызова API с bash и curl:

#!/bin/bash

# parameter(s)
location=europe-west2

authToken="$(gcloud auth print-access-token)"
projectId=$(gcloud config get-value project 2>\dev\null)

# API call
scheduled_queries=$(curl  -H "Authorization: Bearer $authToken" \
https://bigquerydatatransfer.googleapis.com/v1/projects/$projectId/locations/$location/transferConfigs?dataSourceIds=scheduled_query)

# pretty print results
echo $scheduled_queries | python -m json.tool
0 голосов
/ 30 мая 2019

Вот скрипт оболочки, который уведомит вас в Slack, если какой-либо из ваших запланированных запросов завершится неудачно.Просто интегрируйте в существующий рабочий процесс (как блокирующий или неблокирующий) или включите его в отдельное задание Cron.Я использовал httpie для отправки моего сообщения HTTP, но вы также можете использовать curl или другие.Кроме того, вы также можете изменить свою запись HTTP для любого другого действия.

См. ссылка для потенциальных состояний объекта состояния передачи

#1/bin/bash

sudo apt-get install httpie

location=US
authToken="$(gcloud auth print-access-token)"
projectId=$(gcloud config get-value project 2>\dev\null)

scheduled_queries=$(curl  -H "Authorization: Bearer $authToken" https://bigquerydatatransfer.googleapis.com/v1/projects/$projectId/locations/$location/transferConfigs?dataSourceIds=scheduled_query)

# pretty print results
echo $scheduled_queries | python -m json.tool

length=$(echo "$scheduled_queries" | grep FAILED)
if [ $length -gt 0 ]; then
    echo A SCHEDULED TRANSFER HAS FAILED
    http POST https://hooks.slack.com/services/<your slack channel> text="A SCHEDULED TRANSFER HAS FAILED: HERE IS STDOUT  >>> $scheduled_queries"

else
    echo No errors in scheduled transfers
fi

Если выполняется вне облака илина чем-то, что еще не аутентифицировано, вам нужно будет пройти аутентификацию заранее.Чтобы сделать это, используйте ранее:

echo $PROD_KEY >> temp_json.json
bash gcloud auth activate-service-account --key-file=temp_json.json --project=$PROJ_NAME_PROD

, где $ PROD_KEY - служебный ключ для всего, к чему вы пытаетесь получить доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...