Как программно составить список доступных местоположений Google BigQuery? - PullRequest
1 голос
/ 01 апреля 2019

Как программно перечислить доступные местоположения Google BigQuery?Мне нужен результат, подобный тому, что есть в таблице на этой странице: https://cloud.google.com/bigquery/docs/locations.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2019

Как сказал @shollyman

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

Тем временем , я хотел добавить вариант 3 к тем двум, которые уже были предложены @Tamir

Это немного наивный вариант с плюсами и минусами , но в зависимости от вашего конкретного случая использования может быть полезным и легко адаптируемым для вашего приложения

Шаг 1 - загрузить страницу (https://cloud.google.com/bigquery/docs/locations) html
Шаг 2 - разобрать и извлечь необходимую информацию

Очевидно, это супер просто для реализации в любом клиенте по вашему выбору

Поскольку я большой поклонник BigQuery - я прошел через "проверку концепции" с помощью BigQuery Tool - Magnus

Я создал рабочий процесс всего с двумя Задачами:
Задача API - загрузить HTML-код страницы в переменную var_payload
и
Задача BigQuery - проанализировать и извлечь нужную информацию из html

«Весь» рабочий процесс так же прост, как и на скриншоте ниже

enter image description here

Запрос, который я использовал в Задаче BigQuery:

CREATE TEMP FUNCTION decode(x STRING) RETURNS STRING
LANGUAGE js AS """
  return he.decode(x);
"""
OPTIONS (library="gs://my_bucket/he.js");
WITH t AS (
 SELECT html, 
   REGEXP_EXTRACT_ALL(
     REGEXP_REPLACE(html, 
       r'\n|<strong>|</strong>|<code>|</code>', ''), 
     r'<table>(.*?)</table>'
   )[OFFSET(0)] x
 FROM (SELECT'''<var_payload>''' AS html)
)
SELECT pos, 
  line[SAFE_OFFSET(0)] Area, 
  line[SAFE_OFFSET(1)] Region_Name, 
  decode(line[SAFE_OFFSET(2)]) Region_Description
FROM (
 SELECT  
   pos, REGEXP_EXTRACT_ALL(line, '<td>(.*?)</td>') line
 FROM t, 
    UNNEST(REGEXP_EXTRACT_ALL(x, r'<tr>(.*?)</tr>')) line 
    WITH OFFSET pos
 WHERE pos > 0
)

Как видите, я использовал в библиотеке . Из его README:

он (для «сущностей HTML») - надежный кодировщик / декодер сущностей HTML, написанный на JavaScript. Он поддерживает все стандартизированные именованные ссылки на символы в соответствии с HTML, обрабатывает неоднозначные амперсанды и другие крайние случаи так же, как браузер ...

После того, как рабочий процесс выполнен и эти два шага выполнены - результат находится в project.dataset.location_extraction, и мы можем запросить эту таблицу, чтобы убедиться, что мы получили то, что ожидается

enter image description here

Примечание: очевидно, что анализ и извлечение информации о необходимых местоположениях довольно упрощены и, несомненно, могут быть улучшены, чтобы быть более гибкими с точки зрения изменения макета исходной страницы

0 голосов
/ 02 апреля 2019

К сожалению, нет API, предоставляющего список поддерживаемых местоположений BigQuery.

Я вижу два варианта, которые могут быть вам полезны:

Вариант 1
Вы можете вручную управлять списком и выставлять этот список своему клиенту через API или любым другим способом, поддерживаемым вашим приложением (вам необходимо следить за обновлениями продукта BigQuery, чтобы следить за обновлениями в этом списке)

Вариант 2
Если ваш вариант использования заключается в предоставлении списка местоположений, которые вы используете для хранения своих собственных данных, вы можете позвонить dataset.list , чтобы получить список местоположений и отобразить / использовать его в своем приложении


    {
          "kind": "bigquery#dataset",
          "id": "id1",
          "datasetReference": {
            "datasetId": "datasetId",
            "projectId": "projectId"
          },
          <b>"location": "US"</b>
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...