Automatisez l'importation de données dans Google BigQuery avec Google Cloud Functions

Nous travaillons constamment avec Google BigQuery - nous importons des données sur les utilisateurs, leurs commandes et leurs frais publicitaires de différentes sources afin de pouvoir les combiner entre eux. Qu'est-ce que cela nous donne? Par exemple, si vous avez une boutique en ligne et qu'un client passe une commande par téléphone, puis se connecte au site, à l'aide de Google BigQuery, vous pouvez lier toutes ses actions rétroactivement. Vous pouvez suivre l'intégralité du parcours du client à travers l'entonnoir marketing - de la première visite sur le site à l'achat dans un magasin de brique et de mortier, et évaluer les campagnes publicitaires en tenant compte de ces ventes hors ligne.

Dans cette collection, nous avons 6 scripts python pour automatiser l'importation de données dans Google BigQuery à l' aide des fonctions de Google Cloud : FTP; FTPS HTTP (s); Interphone MySQL et SFTP. Le principe de fonctionnement est le même: à l'aide de la requête HTTP POST, la fonction Cloud est appelée, qui reçoit les données de la source et les charge dans la table Google BigQuery. Si la table existe déjà dans le jeu de données sélectionné, elle sera remplacée.

Exigences de base


  1. Projet dans Google Cloud Platform avec facturation activée.
  2. Accès pour éditer (le rôle «Editeur» des données BigQuery) et effectuer des tâches (le rôle de l'Utilisateur des tâches BigQuery) pour le compte de service de la fonction Cloud dans le projet BigQuery où la table sera téléchargée;
  3. Un client HTTP pour effectuer des requêtes POST qui appellent la fonction Cloud.

Étapes de configuration


  • Accédez à la console Google Cloud Platform et connectez-vous à l'aide de votre compte Google, ou inscrivez-vous si vous n'avez pas encore de compte.
  • Accédez au projet avec la facturation activée ou créez un nouveau compte de facturation pour le projet.
  • Accédez à la section Cloud Functions et cliquez sur Create Feature. Veuillez noter que des frais de cloud s'appliquent .
  • Remplissez les champs suivants:

Nom: par exemple, ftp-bq-integration ou tout autre nom approprié;

Mémoire allouée: 2 Go ou moins, selon la taille du fichier traité;

Déclencheur: HTTP;

Code source: éditeur intégré;

Environnement d'exécution: Python 3.X.

  • Copiez le contenu du fichier main.py dans l'éditeur intégré, onglet main.py.
  • Copiez le contenu du fichier requirements.txt dans l'éditeur intégré, l'onglet requirements.txt.
  • Spécifiez ftp / ftps / https, etc., en tant que fonction appelée, selon le module que vous utilisez.
  • Dans les paramètres supplémentaires, augmentez le temps d'attente de 60 secondes. jusqu'à 540 sec. ou plus petit, selon la taille du fichier en cours de traitement.
  • Terminez la création de la fonction Cloud en cliquant sur le bouton «Créer».

FTP / FTPS / SFTP


Ce module est conçu pour transférer des fichiers depuis des serveurs FTP (FTPS, SFTP) dans Google BigQuery en utilisant la fonction Google Cloud. La solution vous permet de télécharger automatiquement des données vers Google BigQuery à partir d'un fichier régulièrement mis à jour sur le serveur FTP.

Le fichier à obtenir sur le serveur approprié peut avoir n'importe quelle extension appropriée (.json, .txt, .csv), mais doit être dans l'un des formats suivants: JSON (délimité par une nouvelle ligne) ou valeurs séparées par des virgules (CSV).

Exemple d'utilisation


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)


Module de transfert de fichiers des serveurs HTTPS vers Google BigQuery.

Exemple d'utilisation


 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) 

Interphone


Un module pour automatiser le transfert de données d'Intercom vers Google BigQuery à l'aide de la fonctionnalité Google Cloud. Actuellement, le module vous permet d'importer depuis Intercom des entités telles que: utilisateurs, entreprises, contacts, administrateurs, conversations, équipes, tags, segments. Cependant, le module ne prend pas en charge les attributs personnalisés.

Exemple d'utilisation


 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


Utilisé pour transférer des fichiers des serveurs MySQL vers Google BigQuery à l'aide de la fonction Google Cloud. Cette solution vous permet de télécharger automatiquement des données vers Google BigQuery à partir de tables régulièrement mises à jour sur le serveur MySQL.

Exemple d'utilisation


 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) 

Une documentation plus détaillée pour chaque module peut être trouvée dans les fichiers Lisez-moi de chaque section.

Ce n'est que le début, et maintenant nous travaillons sur des scripts pour Bitrix et amoCRM, car nous voyons qu'ils sont les plus populaires parmi nos clients. Partagez les méthodes que vous utilisez pour combiner les données et les intégrations qui vous manquent pour cela.

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


All Articles