Сегодня мы рассмотрим управляемый сервис хранилища данных облачной платформы 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) для более подробной информации:
- Пожалуйста, прокомментируйте любые вопросы, и я буду рад помочь.