Automatice la importación de datos en Google BigQuery con Google Cloud Functions

Trabajamos constantemente con Google BigQuery: importamos datos sobre los usuarios, sus pedidos y los costos publicitarios de diferentes fuentes para poder combinarlos entre ellos. ¿Qué nos da esto? Por ejemplo, si tiene una tienda en línea y un cliente hace un pedido por teléfono y luego inicia sesión en el sitio, luego, utilizando Google BigQuery, puede vincular todas sus acciones de forma retroactiva. Puede realizar un seguimiento de la ruta completa del cliente a través del embudo de marketing, desde la primera visita al sitio para comprar en una tienda física, y evaluar las campañas publicitarias teniendo en cuenta las ventas fuera de línea.

En esta colección tenemos 6 scripts de Python para automatizar la importación de datos en Google BigQuery usando las funciones de Google Cloud : FTP; FTPS HTTP (s); Intercomunicador MySQL y SFTP. El principio de funcionamiento es el mismo: al utilizar la solicitud HTTP POST, se llama a la función Cloud, que recibe datos de la fuente y los carga en la tabla Google BigQuery. Si la tabla ya existe en el conjunto de datos seleccionado, se sobrescribirá.

Requisitos básicos


  1. Proyecto en Google Cloud Platform con facturación activada.
  2. Acceso para editar (el rol de "Editor" de los datos de BigQuery) y realizar tareas (el rol del Usuario de las tareas de BigQuery) para la cuenta de servicio de la función Cloud en el proyecto BigQuery donde se cargará la tabla;
  3. Un cliente HTTP para realizar solicitudes POST que invocan la función Cloud.

Pasos de configuración



Nombre: por ejemplo, integración de ftp-bq o cualquier otro nombre adecuado;

Memoria asignada: 2 GB o menos, dependiendo del tamaño del archivo procesado;

Disparador: HTTP;

Código fuente: editor incorporado;

Entorno de tiempo de ejecución: Python 3.X.

  • Copie el contenido del archivo main.py en el editor incorporado, pestaña main.py.
  • Copie el contenido del archivo require.txt en el editor incorporado, la pestaña require.txt.
  • Especifique ftp / ftps / https, y así sucesivamente, como se llama a la función, dependiendo del módulo que esté utilizando.
  • En los parámetros adicionales, aumente el tiempo de espera de 60 segundos. hasta 540 seg. o menor, dependiendo del tamaño del archivo que se procesa.
  • Termine de crear la función Cloud haciendo clic en el botón "Crear".

FTP / FTPS / SFTP


Este módulo está diseñado para transferir archivos desde servidores FTP (FTPS, SFTP) en Google BigQuery utilizando la función Google Cloud. La solución le permite cargar automáticamente datos a Google BigQuery desde un archivo que se actualiza regularmente en el servidor FTP.

El archivo que se obtendrá del servidor apropiado puede tener cualquier extensión adecuada (.json, .txt, .csv), pero debe estar en uno de los siguientes formatos: JSON (delimitado por nueva línea) o valores separados por comas (CSV).

Ejemplo 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 archivos desde servidores HTTPS a Google BigQuery.

Ejemplo 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


Un módulo para automatizar la transferencia de datos de Intercom a Google BigQuery utilizando la función Google Cloud. Actualmente, el módulo le permite importar desde Intercom entidades como: usuarios, empresas, contactos, administradores, conversaciones, equipos, etiquetas, segmentos. Sin embargo, el módulo no admite atributos personalizados.

Ejemplo 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


Se utiliza para transferir archivos desde servidores MySQL a Google BigQuery utilizando la función Google Cloud. Esta solución le permite cargar automáticamente datos a Google BigQuery desde tablas que se actualizan regularmente en el servidor MySQL.

Ejemplo 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) 

Se puede encontrar documentación más detallada para cada módulo en los archivos Léame de cada sección.

Esto es solo el comienzo, y ahora estamos trabajando en scripts para Bitrix y amoCRM, porque vemos que son los más populares entre nuestros clientes. Comparta qué métodos usa para combinar datos y qué integraciones le faltan para esto.

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


All Articles