Обновление BigQuery Insert для вложенных полей - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть несколько файлов JSON. Файлы имеют два вложенных поля. Файлы создаются ежедневно, поэтому мне нужно выполнять ежедневные операции вставки и обновления в таблице BigQuery. Я поделился схемой таблицы в изображении.

Как выполнить операцию обновления на вложенных полях?

BigQuery dataset

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Немного поздно, но в случае, если кто-то еще ищет. Если вы можете использовать стандартный SQL:

INSERT INTO your_table (optout_time, clicks, profile_id, opens, ... ) 
VALUES (
  1552297347, 
  [
   STRUCT(1539245347 as ts, 'url1' as url), 
   STRUCT(1539245341 as ts, 'url2' as url)
  ], 
  'whatever', 
  [ 
   STRUCT(1539245347 as ts), 
   STRUCT(1539245341 as ts)
  ], 
  ...
)
0 голосов
/ 06 сентября 2018

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

Я предполагаю, что ваши данные в виде JSON с разделителями строк выглядят следующим образом:

 {"optout_time": 1552297349, "clicks": {"ts": 1539245349, "url": "www.google.com"}, "profile_id": "foo", ...}
 {"optout_time": 1532242949, "clicks": {"ts": 1530247349, "url": "www.duckduckgo.com"}, "profile_id": "bar", ...}

Сценарий Python для работы будет выглядеть следующим образом. В качестве аргументов командной строки он принимает имена файлов json:

import json
import sys

from google.cloud import bigquery


dataset_id = "<DATASET-ID>"  # the ID of your dataset
table_id = "<TABLE-ID>"  # the ID of your table

client = bigquery.Client()
table_ref = client.dataset(dataset_id).table(table_id)
table = client.get_table(table_ref)

for f in sys.argv[1:]:
    with open(f) as fh:
        data = [json.loads(x) for x in fh]
        client.insert_rows_json(table, data)

Вложенность выполняется автоматически.

Чтобы узнать, как эта операция будет выглядеть на других языках, вы можете взглянуть на эту документацию .

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