Загружайте и запрашивайте данные с помощью инструмента командной строки bq для BigQuery.

1. Введение

BigQuery — это полностью управляемая, не требующая операционных ресурсов и недорогая аналитическая база данных от Google. С BigQuery вы можете запрашивать терабайты данных без администратора базы данных или инфраструктуры. BigQuery использует привычный SQL и модель оплаты только за фактически использованные ресурсы. BigQuery позволяет вам сосредоточиться на анализе данных для получения ценных выводов. В этом практическом занятии вы будете использовать инструмент командной строки bq для загрузки локального CSV-файла в новую таблицу BigQuery.

Что вы узнаете

  • Как использовать инструмент командной строки bq для BigQuery
  • Как загрузить локальные файлы данных в таблицу BigQuery

Что вам понадобится

  • Проект Google Cloud
  • Браузер, например , Google Chrome

2. Настройка

Включить BigQuery

Если у вас еще нет учетной записи Google, вам необходимо ее создать .

  1. Войдите в консоль Google Cloud и перейдите в раздел BigQuery. Вы также можете открыть веб-интерфейс BigQuery напрямую, введя следующий URL-адрес в свой браузер.
https://console.cloud.google.com/bigquery
  1. Примите условия предоставления услуг.
  2. Прежде чем начать использовать BigQuery, необходимо создать проект. Следуйте инструкциям, чтобы создать новый проект.

Выберите название проекта и запишите его идентификатор. 1884405a64ce5765.png

Идентификатор проекта — это уникальное имя для всех проектов Google Cloud. В дальнейшем в этом практическом занятии он будет обозначаться как PROJECT_ID .

В этом практическом задании используются ресурсы BigQuery в пределах ограничений тестовой среды BigQuery . Платежный аккаунт не требуется. Если вы позже захотите снять ограничения тестовой среды, вы можете добавить платежный аккаунт, зарегистрировавшись на бесплатную пробную версию Google Cloud.

Облачная оболочка

Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud.

Активировать Cloud Shell

  1. В консоли Cloud нажмите «Активировать Cloud Shell» . 4292cbf4971c9786.png .

bce75f34b2c53987.png

Если вы никогда раньше не запускали Cloud Shell, вам будет показан промежуточный экран (внизу), описывающий его назначение. В этом случае нажмите «Продолжить» (и вы больше никогда его не увидите). Вот как выглядит этот одноразовый экран:

70f315d7b402b476.png

Подготовка и подключение к Cloud Shell займут всего несколько минут.

fbe3a0674c982259.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Большая часть, если не вся, работа в этом практическом задании может быть выполнена с помощью обычного браузера или вашего Chromebook.

После подключения к Cloud Shell вы увидите, что ваша аутентификация пройдена и что проект уже настроен на ваш идентификатор проекта.

  1. Выполните следующую команду в Cloud Shell, чтобы подтвердить свою аутентификацию:
gcloud auth list

вывод команды

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Выполните следующую команду в Cloud Shell, чтобы убедиться, что команда gcloud знает о вашем проекте:
gcloud config list project

вывод команды

[core]
project = <PROJECT_ID>

Если это не так, вы можете установить это с помощью следующей команды:

gcloud config set project <PROJECT_ID>

вывод команды

Updated property [core/project].

3. Создайте набор данных.

Создайте набор данных для хранения ваших таблиц.

Что такое набор данных?

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

Создайте набор данных

В Cloud Shell используйте команду bq mk для создания набора данных с именем " bq_load_codelab ".

bq mk bq_load_codelab

Просмотреть свойства набора данных

Убедитесь, что вы создали набор данных, просмотрев его свойства с помощью команды bq show.

bq show bq_load_codelab

В результате вы должны увидеть примерно следующий вывод:

Dataset my-project:bq_load_codelab

   Last modified           ACLs          Labels
 ----------------- -------------------- --------
  15 Jun 14:12:49   Owners:
                      projectOwners,
                      your-email@example.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders

4. Создайте файл данных.

BigQuery может загружать данные из нескольких форматов, включая JSON с разделителями строк , Avro и CSV . Для простоты вы будете использовать CSV.

Создайте CSV-файл

В Cloud Shell создайте пустой CSV-файл.

touch customer_transactions.csv

Откройте CSV-файл в редакторе кода в Cloud Shell, выполнив команду `cloudshell edit`. Это откроет новое окно браузера с редактором кода и панелью Cloud Shell.

cloudshell edit customer_transactions.csv

В редакторе кода введите несколько значений, разделенных запятыми, для загрузки в BigQuery.

ID,Zipcode,Timestamp,Amount,Feedback,SKU
c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5
c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee
c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0

Сохраните CSV-файл, нажав «Файл» > «Редактировать» .

5. Загрузка данных

Используйте команду `bq load` для загрузки CSV-файла в таблицу BigQuery.

bq load \
    --source_format=CSV \
    --skip_leading_rows=1 \
    bq_load_codelab.customer_transactions \
    ./customer_transactions.csv \
    id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string

Вы использовали следующие параметры:

  • --source_format=CSV использует формат данных CSV при анализе файла данных.
  • --skip_leading_rows=1 пропускает первую строку в CSV-файле, поскольку это строка заголовка.
  • Bq_load_codelab.customer_transactions—the first positional argument— определяет, в какую таблицу следует загрузить данные.
  • ./customer_transactions.csv — второй позиционный аргумент — определяет, какой файл следует загрузить. Помимо локальных файлов, команда bq load может загружать файлы из Cloud Storage с gs://my_bucket/path/to/file URIs .
  • Схема, которую можно определить в JSON-файле или в виде списка, разделенного запятыми. (Для простоты использован список, разделенный запятыми.)

В таблице customer_transactions вы использовали следующую схему:

  • Id:string : Идентификатор клиента
  • Zip:string : Почтовый индекс США
  • Ttime:timestamp : Дата и время совершения транзакции
  • Amount:numeric : Сумма транзакции ( числовой столбец хранит данные в десятичной форме, что удобно для денежных значений.)
  • Fdbk:float : Рейтинг по результатам опроса об обратной связи по сделке.
  • Sku:string : Идентификатор приобретенного товара

Получите подробную информацию о таблице.

Убедитесь, что таблица загружена, отобразив ее свойства.

bq show bq_load_codelab.customer_transactions

Выход:

Table my-project:bq_load_codelab.customer_transactions

   Last modified          Schema          Total Rows   Total Bytes
 ----------------- --------------------- ------------ -------------
  15 Jun 15:13:55   |- id: string         3            159
                    |- zip: string
                    |- ttime: timestamp
                    |- amount: numeric
                    |- fdbk: float
                    |- sku: string

6. Выполните запрос к данным.

Теперь, когда ваши данные загружены, вы можете запрашивать их, используя веб-интерфейс BigQuery , команду bq или API. Ваши запросы могут объединять ваши данные с любым набором данных (или наборами данных, если они находятся в одном и том же месте ), к чтению которого у вас есть разрешение.

Выполните стандартный SQL-запрос, который объединяет ваш набор данных с набором данных почтовых индексов США и суммирует транзакции по штатам США. Используйте команду bq query для выполнения запроса.

bq query --nouse_legacy_sql '
SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code
FROM `bq_load_codelab.customer_transactions` c
JOIN `bigquery-public-data.utility_us.zipcode_area` z
ON c.zip = z.zipcode
GROUP BY state_code
'

Результатом выполнения этой команды должно стать примерно следующее:

Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE   
+--------------+------------+
| amount_total | state_code |
+--------------+------------+
|         53.6 | NY         |
|         7.18 | TX         |
+--------------+------------+

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

#standardSQL
SELECT
  /* Total of all transactions in the state. */
  SUM(c.amount) AS amount_total,

  /* State corresponding to the transaction's zipcode. */
  z.state_code AS state_code

/* Query the table you just constructed.
 * Note: If you omit the project from the table ID,
 *       the dataset is read from your project. */
FROM `bq_load_codelab.customer_transactions` c

/* Join the table to the zipcode public dataset. */
JOIN `bigquery-public-data.utility_us.zipcode_area` z

/* Find the state corresponding to the transaction's zipcode. */
ON c.zip = z.zipcode

/* Group over all transactions by state. */
GROUP BY state_code

7. Уборка

Удалите набор данных, созданный с помощью команды bq rm. Используйте флаг -r для удаления всех содержащихся в нем таблиц.

bq rm -r bq_load_codelab

8. Поздравляем!

Вы загрузили таблицу в BigQuery и выполнили запрос к ней!

Что вы осветили

  • Использование инструмента командной строки bq для взаимодействия с BigQuery.
  • Объединение ваших данных и общедоступного набора данных с помощью запроса BigQuery.

Что дальше?

Узнайте больше о: