Существует 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 за раз. Используя разбиение на страницы с заданием на запись, вы можете теоретически импортировать сотни тысяч записей довольно быстро. Потоковая передача данных была бы идеальной, если вы не заботитесь о резервных журналах.
Не могли бы вы дать мне более подробную информацию? Я новичок в облачном решении Google. – user3769827
, если вы передаете необработанные данные в bigquery, вы всегда можете обрабатывать эти данные в BigQuery для преобразования и загрузки в другие таблицы. Он решает часть вашего вопроса о том, как повторно запускать данные, которые являются IMO, проще, чем создавать скрипты. – koma