BigQuery позволяет читать данные из таблиц Google BigQuery и записывать в них, включая публичные наборы данных.
Для чтения используется REST API BigQuery (tabledata.list), поэтому поддерживается чтение только нативных таблиц (представления, materialized view и внешние таблицы читать нельзя). Для записи используются потоковые вставки (tabledata.insertAll), для которых в проекте должен быть включён биллинг.
Записи неатомарны: большой INSERT отправляется батчами (не более 500 строк в запросе; кроме того, он разбивается так, чтобы не превысить ограничение BigQuery на размер запроса в 10 МБ), при этом один запрос может быть выполнен лишь частично (BigQuery может закоммитить некоторые строки запроса, отклонив остальные с insertErrors), а последующий батч может быть отклонён после успешного принятия предыдущих. В обоих случаях уже закоммиченные строки остаются в BigQuery, а запрос завершается с ошибкой. Каждая строка содержит стабильный insertId (полученный из идентификатора запроса и порядкового номера строки), чтобы BigQuery по возможности выполнял дедупликацию повторно отправленных строк. Поскольку insertId зависит от порядкового номера, повторный запуск того же INSERT выполняет дедупликацию только в том случае, если строки передаются в том же порядке (например, в однопоточном режиме с max_threads = 1 и max_insert_threads = 1). Подробнее см. в ограничениях табличной функции bigquery.
Создание таблицы
REQUIRED без выражения значения по умолчанию, можно читать, но нельзя записывать в неё: потоковые вставки BigQuery отклоняют строки без такого поля, поэтому такой INSERT отклоняется заранее. Если для опущенного поля REQUIRED указано defaultValueExpression, BigQuery подставляет значение по умолчанию, и в таблицу по-прежнему можно записывать данные. NULLABLE RECORD сопоставляется с Nullable(Tuple(...)), поэтому записи со значением NULL передаются без потерь при записи и последующем чтении. При явном объявлении столбцов поле RECORD можно объявить как обычный Tuple(...), но при этом NULL для всей записи будет преобразован в кортеж по умолчанию; единственное допустимое отличие от выведенного типа — удаление Nullable, оборачивающего Tuple поля RECORD, причём только у этой же записи: nullable нельзя перенести на другую (внутреннюю или внешнюю) запись.
Параметры движка
project— проект Google Cloud, которому принадлежит набор данных.dataset— имя набора данных.table— имя таблицы.access_token— токен доступа OAuth 2.0 (необязательный позиционный аргумент).
key = value. Полный список ключей и описание методов аутентификации см. в табличной функции bigquery. Необходимо указать ровно один метод аутентификации; для постоянной таблицы service_account_key или refresh_token предпочтительнее access_token, поскольку срок действия токенов доступа истекает в течение часа.