Сегодня мы рассмотрим управляемый сервис хранилища данных облачной платформы Google «BigQuery» и посмотрим, как мы можем быстро создать массивное хранилище данных корпоративного уровня.

Google описывает BigQuery как «бессерверное, масштабируемое и экономичное облачное хранилище данных, разработанное, чтобы помочь вам быстро принимать обоснованные решения, чтобы вы могли с легкостью трансформировать свой бизнес». . Давайте сломаем это утверждение и поймем его силу.

  • Бессерверные: это полностью управляемая услуга, позволяющая организации не планировать мощность серверов заранее и не вносить какие-либо изменения в инфраструктуру. Это также гарантирует, что организация может начать с малого и расти по мере роста данных без какого-либо влияния на бизнес.
  • Высокая масштабируемость: BigQuery может запрашивать более петабайт хранилища данных. Он может быстро анализировать гигабайты и петабайты данных с помощью ANSI SQL с молниеносной скоростью и с нулевыми операционными издержками.
  • Экономичность. Поскольку это управляемая услуга, организациям необходимо платить только за используемые ресурсы хранения и вычислений. Для предприятий предлагается фиксированная цена; тем самым позволяя неограниченное количество запросов.

Цель : запрашивать ТБ данных и наблюдать за временем ответа.

  • Пожалуйста, создайте облачную учетную запись Google по адресу https://console.cloud.google.com/getting-started. Вы получите 300$ кредита.
  • После создания учетной записи войдите в облачную консоль Google: http://console.cloud.google.com/. Вы будете посещать панель инструментов, показывающую общий статус.
  • Щелкните значок «Гамбургер» в левом верхнем углу и перейдите в раздел «IAM&Admin» -> «Управление ресурсами», как показано ниже:

  • Нажмите «Создать проект» вверху. Создайте платежный аккаунт, если он еще не создан. Укажите необходимые данные для создания проекта:

  • После создания проекта перейдите на главную страницу -> Big Data -> BigQuery, как показано ниже:

  • Ниже откроется веб-интерфейс BigQuery. Вы можете увидеть проект в верхней части. Если он не показывает только что созданный проект, вы можете изменить его.

  • Теперь мы добрались до веб-интерфейса BigQuery. Этот интерфейс позволяет выполнять все операции для управляемого сервиса BigQuery.
  • Теперь есть две важные терминологии, которые нам нужно помнить при работе с BigQuery. Набор данных и таблица. DataSet можно описать как набор таблиц, а таблица — это физический объект, в котором будут сохраняться данные.
  • Для этого сеанса мы будем ссылаться на набор данных с несколькими таблицами, в которых хранятся петабайты данных, и мы увидим всю мощь BigQuery.
  • Для анализа этой статьи мы будем использовать розничный набор данных в петабайтах. Пожалуйста, обратитесь к приведенному ниже запросу. В приведенном ниже запросе «google.com:bigquery-petabyte» представлен общедоступный проект с набором данных «retail_petabyte» и таблицей «sales_partitioned_clustered» в наборе данных.
SELECT * 
  FROM `google.com:bigquery-petabyte.retail_petabyte.sales_partitioned_clustered`
WHERE customerKey = "1440806400000-262"
  • Давайте вставим запрос и посмотрим на несколько вещей. Мы только что вставили запрос и еще ничего не выполнили. Обратите внимание на зеленую галочку в середине крайнего правого края изображения. BigQuery проверяет данные и сообщает нам предполагаемый размер данных, которые будет обрабатывать этот запрос. Его данные объемом 1,1 петабайта.

  • Безусловно, запрос, который мы вставили выше, не очень удобен для выполнения, потому что нецелесообразно извлекать данные в петабайтах.
  • Теперь мы будем использовать ту же таблицу и перепишем запрос для более осмысленного анализа. Проанализируем данные о продажах по дням. Пожалуйста, обратитесь к приведенному ниже запросу.
SELECT
  ROUND(SUM(totalSale),2) AS sale,
  DATE(orderDate) day
FROM
  `google.com:bigquery-petabyte.retail_petabyte.sales_partitioned_clustered`
WHERE
  customerKey = '1297468800000-526'
GROUP BY
  day
ORDER BY
  day DESC
  • Давайте посмотрим, сколько данных будет обрабатывать этот запрос, чтобы получить требуемый результат. По оценкам, это 31,9 терабайт данных.

  • Мы можем дополнительно оптимизировать его, обрабатывая данные только за необходимые дни, а не за все дни. Пожалуйста, обратитесь к запросу ниже. Теперь мы добавили условие time orderDate, и это обеспечит обработку ограниченных данных.
SELECT
  CAST(SUM(totalSale) AS INT64) AS sale,
  DATE(orderDate) day
FROM
  `google.com:bigquery-petabyte.retail_petabyte.sales_partitioned_clustered`
WHERE
  customerKey = "1104796800000-155"
  AND orderDate BETWEEN TIMESTAMP("2005-01-04")
  AND TIMESTAMP("2005-02-04")
GROUP BY
  day
ORDER BY
  day DESC
  • Давайте посмотрим, сколько данных будет обрабатывать этот запрос, чтобы получить требуемый результат. По оценкам, это 265,7 ГБ.

  • Как мы видим, данных, которые не обрабатываются, значительно меньше для требуемого результата. Давайте запустим запрос и посмотрим, сколько времени потребуется для получения результата. Нажмите кнопку «Выполнить» и дождитесь завершения запроса.

  • Ух ты!!! Как мы видим выше, запрос занял 5,4 секунды и обработал всего 360,9 МБ. Очень важно помнить, что 265,7 ГБ были оценочными, а 360,9 МБ — фактически обработанными данными.
  • Повторите запрос еще раз и посмотрите время ответа.

  • Вау!!! Это заняло 0,1 секунды. Почему это случилось? Причина такого поведения в том, что данные из предыдущего вывода были кэшированы. Если вы повторно запустите запрос, BigQuery поймет, что все данные готовы к кэшированию, и выдаст результат из кэша. По умолчанию кэширование включено в консоли веб-интерфейса. Вы можете отключить то же самое, посетив «Дополнительные настройки запроса» и сняв флажок «Использовать кэшированные результаты».

  • Давайте запустим немного более сложный запрос и посмотрим время ответа. В этом запросе мы вычисляем среднее значение дня для каждого продукта.
SELECT
  AVG(s.totalSale) OVER (PARTITION BY p.name ORDER BY orderDay ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS runningAverage,
  p.name AS productName,
  s.orderDay AS orderDay
FROM (
  SELECT
    SUM(lines.totalSale) AS totalSale,
    DATE(orderDate) AS orderDay,
    lines.productKey AS productKey
  FROM
    `google.com:bigquery-petabyte.retail_petabyte.sales_partitioned_clustered`,
    UNNEST(salesOrderLines) AS lines
  WHERE
    orderdate BETWEEN "2011-01-01"
    AND "2011-01-07"
  GROUP BY
    orderDay,
    productKey ) s
JOIN
  `google.com:bigquery-petabyte.retail_petabyte.products` p
ON
  s.productKey = p.productKey
WHERE
  REGEXP_CONTAINS(s.productKey, r'^110453[0-9]{7}\-[0-9]{3}$')
ORDER BY
  orderDay
  • Давайте запустим запрос и посмотрим на результат. На выполнение ушло 12 секунд, и было обработано 426,2 ГБ данных.

  • Я надеюсь, что это дало хорошее представление о возможностях BigQuery для создания больших хранилищ данных.
  • BigQuery предлагает множество других функций в отношении обработки данных. Пожалуйста, посетите документацию для получения более подробной информации: https://cloud.google.com/bigquery/docs
  • Он также обеспечивает машинное обучение BigQuery через SQL. Пожалуйста, обратитесь к статье (https://medium.com/analytics-vidhya/introduction-to-machine-learning-in-google-bigquery-452194ec2bed) и документации (https://cloud.google.com/bigquery). -ml/docs/bigqueryml-intro) для более подробной информации:
  • Пожалуйста, прокомментируйте любые вопросы, и я буду рад помочь.