2

Мы разрабатываем проект, который предназначен для обработки наших данных журнала. Идея заключается в томGoogle Cloud Storage <-> Google App Engine -> Google BigQuery

  • журнал обновления данных из локальной logstash в Google Cloud Storage
  • написать питон скрипт для вставки задания, чтобы импортировать данные из журналов Google Cloud Storage в Google BigQuery
  • скрипта записи питона для обработки данных в Сам BigQuery

Примечание. для скрипта python мы думаем, работает ли он на движке Google или в вычислительном компьютере Google.

Вопросов

  • Является ли это практическое решение?
  • Структура данных журнала изменяется довольно часто, это вызовет ошибку при вставке в BigQuery. Как мы будем обрабатывать ее в скрипте python?
  • Включение, мы должны повторно запустить данные журнала в определенный период. Как мы можем это сделать? Нужно написать скрипт python?

Благодаря

ответ

2

Существует streaming data solution, о котором уже упоминалось, но если вы пытаетесь переместить большой блок данных журналов, а не настраивать непрерывный поток, вместо этого вы можете использовать маршрут вместо асинхронных заданий загрузки.

В GCS library действует как большинство библиотек питона файлов при использовании в Google App Engine, и может хранить файлы для импорта в облачных ведрах хранения:

import cloudstorage as gcs 

filePath = "/CloudStorageBucket/dir/dir/logs.json" 
with gcs.open(filePath, "w") as f: 
    f.write(SomeLogData) 
    f.close() 

Вы можете проинструктировать Большой запрос, чтобы загрузить список CSV или новой строки -delimited JSON файлов в Cloud Storage, путем создания рабочих мест загрузки через API: (Примечание: вы должны use oauth 2)

from apiclient.discovery import build 

service = build("bigquery", "v2", http = oAuthedHttp) 

job = { 
    "configuration": { 
     "load": { 
     "sourceUris": ["gs://CloudStorageBucket/dir/dir/logs.json"], 
     "schema": { 
      "files" : [ 
       {"name": "Column1", 
       "type": "STRING"}, 
       ... 
       ] 
     }, 
     "destinationTable": { 
      "projectId": "Example-BigQuery-ProjectId", 
      "datasetId": "LogsDataset", 
      "tableId": "LogsTable" 
     }, 
     "sourceFormat" : "NEWLINE_DELIMITED_JSON" 
     "createDisposition": "CREATE_IF_NEEDED" 
     } 
    } 
    } 

response = service.jobs().insert(
     projectId = "Example-BigQuery-ProjectId", 
     body = job 
     ).execute() 

вы можете прочитать больше о том, как создать Big Query load jobs, если вы хотите установить О.Т. ее свойства, такие как запись или запись строк в CSV-файле. Вы также можете посмотреть other good examples, как загружать данные, включая подсказки командной строки.

Edit:

Чтобы ответить на более конкретные вопросы:

Является ли это практическое решение?

Да. Мы экспортируем журналы Google App Engine в облачное хранилище и импортируем в BigQuery, используя отложенные задачи. Некоторые использовали map reduce jobs, но это может быть излишним, если вам не нужно перетасовывать или уменьшать.

Структура изменения данных журнала довольно часто это вызовет ошибку когда вставки в BigQuery.How мы будем обрабатывать его в питон скрипт?

Это не должно быть проблемой, если вы разбираете сообщения до того, как они достигнут большого запроса. Лучшим дизайном будет перенос сообщений, временных меток, уровней и т. Д. В Большой запрос, а затем переварить его запросами.

В случае необходимости, мы должны повторно запустить данные журнала в конкретный период. Как мы можем это сделать? нужно написать скрипт python?

Поток данных не даст вам резервных копий, если вы не настроили их самостоятельно в BigQuery. Использование метода, описанного выше, автоматически даст вам резервные копии в облачном хранилище Google, что является предпочтительным.

Знайте, что BigQuery является базой данных OLAP, а не транзакционной, поэтому обычно лучше перестраивать таблицы каждый раз, когда вы добавляете больше данных журнала, вместо того, чтобы пытаться вставлять новые данные. Это противоречит интуиции, но BigQuery предназначен для этого, так как он can import 10,000 files/1TB за раз. Используя разбиение на страницы с заданием на запись, вы можете теоретически импортировать сотни тысяч записей довольно быстро. Потоковая передача данных была бы идеальной, если вы не заботитесь о резервных журналах.

3

Существует новый API для streaming data directly into BigQuery, который может быть лучше подходит для вашего случая использования.

Вместо того, чтобы использовать задания для загрузки данных в BigQuery, вы можете выбрать поток ваших данных в BigQuery одной записи в то время, используя tabledata(). Метод insertAll(). Этот подход позволяет запрашивать данные без задержки запуска задания загрузки. Перед выбором подхода необходимо рассмотреть несколько важных компромиссов .

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

+0

Не могли бы вы дать мне более подробную информацию? Я новичок в облачном решении Google. – user3769827

+0

, если вы передаете необработанные данные в bigquery, вы всегда можете обрабатывать эти данные в BigQuery для преобразования и загрузки в другие таблицы. Он решает часть вашего вопроса о том, как повторно запускать данные, которые являются IMO, проще, чем создавать скрипты. – koma

Смежные вопросы