Любой способ l oop через все таблицы в наборе данных в стандартном скрипте BigQuery SQL? - PullRequest
0 голосов
/ 21 января 2020

У меня есть много ежедневных таблиц (названных суффиксом _YYYYMMDD) в наборе данных. Мне нужно записать ежедневный запланированный запрос в l oop через каждую ежедневную таблицу, выполнить объединение с другой динамически изменяющейся таблицей и перезаписать таблицу этого дня в BigQuery. Я изучал «Сценарии в стандарте SQL» и подумал, может ли быть способ перебора таблиц _YYYYMMDD в al oop?

https://cloud.google.com/bigquery/docs/reference/standard-sql/scripting

Заранее спасибо!

1 Ответ

0 голосов
/ 21 января 2020

Я бы предложил вам использовать таблицы с подстановочными знаками, которые позволяют использовать некоторые функции в стандарте SQL с BigQuery. Вы можете прочитать больше и увидеть некоторые примеры здесь .

Кроме того, искомый синтаксис должен быть похож на это:

SELECT 
#columns that you want
FROM
  `<project-id>.<dataset-id>.<table-prefix>*`

Звездочка обозначает, какие таблицы select будет сканировать, в этом случае все таблицы с одинаковым префиксом. С другой стороны, вы также можете использовать _TABLE_SUFFIX для ограничения сканирования ваших таблиц, вы можете прочитать больше об этом здесь . Кроме того, ниже приведен пример того, как это будет выглядеть:

SELECT
  ROUND((max-32)*5/9,1) celsius
FROM
  `bigquery-public-data.noaa_gsod.gsod19*`
WHERE
  _TABLE_SUFFIX = (SELECT SUBSTR(MAX(table_id), LENGTH('gsod19') + 1)
      FROM `bigquery-public-data.noaa_gsod.__TABLES_SUMMARY__`
      WHERE table_id LIKE 'gsod194%')

Надеюсь, это поможет.

ОТВЕТ ОТВЕТА (после комментариев пользователя):

В BigQuery существует метод UPDATE , который позволяет пользователю обновлять данные из определенных столбцов в наборе данных. В вашем случае это может быть подходящим решением. Синтаксис использования обновления следующий:

UPDATE sample_db.UserSessions
SET ip_address = REGEXP_REPLACE(ip_address, r"(\.[0-9]+)$", ".0")
WHERE TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...