Как вставить данные биллинга из одной таблицы в другую таблицу в BigQuery - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть две таблицы с данными биллинга от GCP в двух разных регионах. Я хочу вставить одну таблицу в другую. Обе таблицы разделены по дням, и GCP записывает большую таблицу для экспорта счетов, поэтому я хочу вставить данные в большую таблицу.

Я пытаюсь сделать следующее:

  1. Экспорт таблицы меньшего размера в Google Cloud Storage (GCS), чтобы ее можно было импортировать в другой регион.
  2. Импорт таблицы из GCS в большой запрос.
  3. Использовать большой Запрос SQL на запуск INSERT INTO dataset.big_billing_table SELECT * FROM dataset.small_billing_table

Однако у меня возникает много проблем, поскольку он не позволяет мне просто вставлять (так как в схеме есть повторяющиеся поля et c) , Пример набора данных можно найти здесь https://bigquery.cloud.google.com/table/data-analytics-pocs: publi c .gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1

Спасибо:)


## Update ##

Поэтому проблема заключалась в экспорте и импорте данных в формате Avro и использовании схемы автоматического определения при импорте таблицы обратно (временные метки путались с целочисленными типами).

Решение

Экспортируйте небольшую таблицу в формате JSON в GCS, используйте GCS для региональной передачи файлов, а затем импортируйте файл JSON в таблицу Bigquery и DONT используйте автоматическое определение схемы ( например, указать схему вручную). Тогда вы можете использовать INSERT INTO без проблем et c.

1 Ответ

1 голос
/ 15 апреля 2020

Мне удалось воспроизвести ваш случай с предоставленным вами примером данных. Я использовал фиктивные таблицы, сгенерированные из приведенных ниже запросов, чтобы подтвердить случаи:

Таблица 1: billing_bigquery

SELECT * FROM `data-analytics-pocs.public.gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1`  
    where service.description ='BigQuery' limit 1000

Таблица 2: billing_pubsub

SELECT * FROM `data-analytics-pocs.public.gcp_billing_export_v1_EXAMPL_E0XD3A_DB33F1`  
    where service.description ='Cloud Pub/Sub' limit 1000

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

Сначала я использовал INSERT TO метод. Однако я хотел бы подчеркнуть, что согласно документации , если ваша таблица секционирована, вы должны включить имена столбцов, которые будут использоваться для вставки новых строк. Поэтому, используя уже показанные фиктивные данные, это будет выглядеть следующим образом:

INSERT INTO `billing_bigquery` ( billing_account_id, service, sku, usage_start_time, usage_end_time, project, labels, system_labels, location, export_time, cost, currency, currency_conversion_rate, usage, credits  )#invoice, cost_type 
SELECT billing_account_id, service, sku, usage_start_time, usage_end_time, project, labels, system_labels, location, export_time, cost, currency, currency_conversion_rate, usage, credits 
FROM `billing_pubsub`

Обратите внимание, что для вложенных полей я просто записываю имя поля, например: service , а не service.description , поскольку они уже будут использованы. Кроме того, я не выбрал все столбцы в наборе данных назначения, но все столбцы, которые я выбрал в таблицах назначения, также должны быть включены в выбор таблицы источника.

Второй метод, вы можете просто использовать Настройки запроса кнопка для добавления small_billing_table к big_billing_table . В консоли BigQuery нажмите Еще >> Настройки запроса . Затем появится окно настроек, и вы go до Таблица назначения , отметьте Установите таблицу назначения для результатов запроса , заполните поля: Имя проекта, Набор данных имя и имя таблицы - это информация таблицы назначения - . Впоследствии в Таблица назначения предпочтения записи проверить Добавить в таблицу , которая согласно документации :

Добавить в таблицу - добавляет результаты запроса в существующую таблицу.

Затем вы запускаете следующий запрос:

Select * from <project.dataset.source_table>

Затем, после его выполнения, необходимо добавить данные таблицы источника в таблице цели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...