Automatize a importação de dados para o Google BigQuery com o Google Cloud Functions

Trabalhamos constantemente com o Google BigQuery - importamos dados de usuários, seus pedidos e custos de publicidade de diferentes fontes para poder combiná-los entre si. O que isso nos dá? Por exemplo, se você tem uma loja on-line e um cliente faz um pedido por telefone e, em seguida, efetua login no site, usando o Google BigQuery, é possível vincular todas as suas ações retroativamente. Você pode acompanhar todo o caminho do cliente através do funil de marketing - desde a primeira visita ao site até a compra em uma loja física e avaliar campanhas de publicidade levando em consideração essas vendas off-line.

Nesta coleção, temos 6 scripts python para automatizar a importação de dados no Google BigQuery usando as funções do Google Cloud : FTP; FTPS HTTP (s); Intercomunicador MySQL e SFTP. O princípio de operação é o mesmo: usando a solicitação HTTP POST, a função Cloud é chamada, que recebe dados da origem e os carrega na tabela do Google BigQuery. Se a tabela já existir no conjunto de dados selecionado, ela será substituída.

Requisitos básicos


  1. Projeto no Google Cloud Platform com faturamento ativado.
  2. Acesso para editar (a função “Editor” dos dados do BigQuery) e concluir tarefas (a função das tarefas Usuário do BigQuery) para a conta de serviço da função Nuvem no projeto BigQuery para o qual a tabela será carregada;
  3. Um cliente HTTP para executar solicitações POST que chamam a função Cloud.

Etapas de instalação


  • Acesse o Google Cloud Platform Console e faça login usando sua conta do Google ou registre-se se ainda não tiver uma conta.
  • Vá para o projeto com cobrança ativada ou crie uma nova conta de cobrança para o projeto.
  • Vá para a seção Cloud Functions e clique em Create Feature. Observe que as taxas de nuvem se aplicam .
  • Preencha os seguintes campos:

Nome: por exemplo, ftp-bq-integration ou qualquer outro nome adequado;

Memória alocada: 2 GB ou menos, dependendo do tamanho do arquivo processado;

Gatilho: HTTP;

Código fonte: Editor embutido;

Ambiente de tempo de execução: Python 3.X.

  • Copie o conteúdo do arquivo main.py no editor interno, guia main.py.
  • Copie o conteúdo do arquivo requirements.txt no editor interno, na guia requirements.txt.
  • Especifique ftp / ftps / https e assim por diante, como a função que está sendo chamada, dependendo do módulo que você está usando.
  • Nos parâmetros adicionais, aumente o tempo de espera de 60 segundos. até 540 seg. ou menor, dependendo do tamanho do arquivo que está sendo processado.
  • Termine de criar a função Nuvem clicando no botão "Criar".

FTP / FTPS / SFTP


Este módulo foi projetado para transferir arquivos de servidores FTP (FTPS, SFTP) no Google BigQuery usando a função Google Cloud. A solução permite fazer o upload automático de dados para o Google BigQuery a partir de um arquivo que é atualizado regularmente no servidor FTP.

O arquivo a ser obtido no servidor apropriado pode ter qualquer extensão adequada (.json, .txt, .csv), mas deve estar em um dos seguintes formatos: JSON (delimitado por nova linha) ou valores separados por vírgula (CSV).

Exemplo de uso


from urllib import urlencode from httplib2 import Http trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/ftp/" headers = { "Content-Type": "application/json" } payload = { "ftp": { "user": "ftp.user_name", "psswd": "ftp.password", "path_to_file": "ftp://server_host/path/to/file/" }, "bq": { "project_id": "my_bq_project", "dataset_id": "my_bq_dataset", "table_id": "my_bq_table", "delimiter": ",", "source_format": "NEWLINE_DELIMITED_JSON", "location": "US" } } Http().request(trigger_url, "POST", urlencode(payload), headers = headers) 

HTTP (s)


Módulo para transferir arquivos dos servidores HTTPS para o Google BigQuery.

Exemplo de uso


 from urllib import urlencode from httplib2 import Http trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/https/" headers = { "Content-Type": "application/json" } payload = { "https": { "path_to_file": "https://server_host/path/to/file/", "user": "https.user_name", "psswd": "https.password" }, "bq": { "project_id": "my_bq_project", "dataset_id": "my_bq_dataset", "table_id": "my_bq_table", "delimiter": ",", "source_format": "CSV", "location": "US" } } Http().request(trigger_url, "POST", urlencode(payload), headers = headers) 

Intercomunicador


Um módulo para automatizar a transferência de dados do Intercom para o Google BigQuery usando o recurso Google Cloud. Atualmente, o módulo permite importar da Intercom entidades como: usuários, empresas, contatos, administradores, conversas, equipes, tags, segmentos. No entanto, o módulo não suporta atributos customizados.

Exemplo de uso


 from urllib import urlencode from httplib2 import Http trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/intercom/" headers = { "Content-Type": "application/json" } payload = { "intercom": { "accessToken": "INTERCOM ACCESS TOKEN", "entities": [ "users", "companies", "contacts", "admins", "conversations", "teams", "tags", "segments" ] }, "bq": { "project_id": "YOUR GCP PROJECT", "dataset_id": "YOUR DATASET NAME", "location": "US" } } Http().request(trigger_url, "POST", urlencode(payload), headers = headers) 

MySQL


Usado para transferir arquivos dos servidores MySQL para o Google BigQuery usando a função Google Cloud. Esta solução permite fazer o upload automático de dados para o Google BigQuery a partir de tabelas que são atualizadas regularmente no servidor MySQL.

Exemplo de uso


 from urllib import urlencode from httplib2 import Http trigger_url = "https://REGION-PROJECT_ID.cloudfunctions.net/mysql/" headers = { "Content-Type": "application/json" } payload = { "mysql": { "user": "mysql.user", "psswd": "mysql.password", "host": "host_name", "port”: 3306, "database": "database_name", "table_id": "table_name", "query": "SELECT * FROM table_name" }, "bq": { "project_id": "my_bq_projec", "dataset_id": "my_bq_dataset", "table_id": "my_bq_table" } } Http().request(trigger_url, "POST", urlencode(payload), headers = headers) 

Uma documentação mais detalhada para cada módulo pode ser encontrada nos arquivos leia-me em cada seção.

Isso é apenas o começo, e agora estamos trabalhando em scripts para Bitrix e amoCRM, porque vemos que eles são os mais populares entre nossos clientes. Compartilhe quais métodos você usa para combinar dados e quais integrações faltam para isso.

Source: https://habr.com/ru/post/pt426647/


All Articles