Exemplo de uma implementação stream
de eventos do Wikipedia, postando no Google Gloud Platform.
- Evento de mudança de informação do Wikipedia, gera um arquivo no formato JSON.
- A mensagem gerada é lida e postada no Cloud Pub/Sub.
- As mensagens postadas no Cloud Pub/Sub, são processadas via Cloud Dataflow e armazenadas no Cloud Storage.
- Para cada arquivo materializado no Cloud Storage, o trigger do Cloud Functions realiza o load dos dados no BigQuery.
No Google Cloud Console, gere e faça download de uma service account
com permissão de administrador para postar as mensagens no Pub/Sub.
Na pasta setup
, edite o arquivo project.env
com a definição das variáveis de ambiente do seu projeto, em seguida execute: source setup/project.env
.
export GOOGLE_APPLICATION_CREDENTIALS=/home/Downloads/your-service-account.json
export PROJECT_ID=my-project-id
export TOPIC_ID=wikipedia-stream
No Google Cloud Console, acesse o Cloud Storage, e crie 02 (dois) buckets:
- Crie o bucket aonde as mensagens serão armazenadas:
gs://wikipedia-messages
. - Crie o bucket que servirá para fazer o deploy da function:
gs://setup
. - Faça upload do arquivo
setup/function.zip
para o bucket:gs://setup
.
Faça o deploy da function executando o comando abaixo, via Google Cloud Shell.
gcloud functions deploy my-function-name \
--region us-east1 \
--runtime python37 \
--entry-point gcs2bigquery \
--trigger-resource wikipedia-messages \
--trigger-event google.storage.object.finalize \
--source gs://setup/function.zip \
--set-env-vars PROJECT_ID=my-project_id,DATASET_ID=wikipedia,TABLE_ID=change_events
Nesse estágio, será executado um script python que escuta alterações no wikipedia e faz upload diretament no Cloud Pub/Sub.
- Acesse a pasta
stream
. - Instale as dependências:
pip3 install -r requirements.txt
- Execute:
python3 stream.py
No Google Cloud Console, acesse o Cloud Dataflow, e inicie o template job definido como Cloud Pub/Sub to Text Files on Cloud Storage
, com os seguintes argumentos:
- Nome do Job:
wikipedia-stream
. - Input Cloud Pub/Sub topic:
projects/<my-project-id>/topics/wikipedia-stream
. - Output Cloud Storage directory:
gs://wikipedia-messages/
. - Output file prefix:
wikipedia-
. - Local temporário:
gs://setup/tmp
. - Output file suffix:
.json
.
Finalmente, após o fechamento da primeira janela de 5 minutos de processamento do Cloud Dataflow, será possível consultar os dados na tabela.
- https://medium.com/google-cloud/import-json-into-bigquery-with-google-cloud-functions-31facea134bf
- https://wikitech.wikimedia.org/wiki/EventStreams
- https://www.mediawiki.org/wiki/Manual:RCFeed
- https://pypi.org/project/sseclient/
- https://googleapis.github.io/google-cloud-python/latest/
- https://github.com/GoogleCloudPlatform/python-docs-samples/
- https://cloud.google.com/functions/docs/how-to
- https://cloud.google.com/sdk/gcloud/reference/beta/functions/deploy
- https://cloud.google.com/dataflow/docs/templates/executing-templates#modelos-fornecidos-pelo-google