Présentation de Dataform

Ce document présente les concepts et les processus Dataform.

Dataform est un service qui permet aux analystes de données de développer, de tester, de contrôler les versions et de planifier des workflows complexes pour la transformation de données dans BigQuery.

Dataform vous permet de gérer la transformation des données dans le processus d'extraction, de chargement et de transformation (ELT, Extraction-Loading-Transformation) pour l'intégration des données. Une fois les données brutes extraites des systèmes sources et chargées dans BigQuery, Dataform vous aide à les transformer en une suite de tables de données bien définies, testées et documentées.

Dataform vous permet d'effectuer les actions de transformation de données suivantes :

  • Développer et exécuter des workflows pour la transformation des données.
  • Collaborer avec les membres de l'équipe au développement de workflows via Git.
  • Gérer un grand nombre de tables et leurs dépendances.
  • Déclarer les données sources et gérer les dépendances des tables.
  • Afficher une visualisation de l'arborescence des dépendances de votre workflow.
  • Gérer les données avec du code SQL dans un dépôt central.
  • Réutiliser du code avec JavaScript.
  • Tester l'exactitude des données avec des tests de qualité sur les tables sources et de sortie.
  • Contrôler les versions du code SQL.
  • Documenter les tables de données dans le code SQL.

Processus de transformation des données dans Dataform

Le workflow de transformation des données pour Dataform est le suivant :

  1. Dataform vous permet de créer des dépôts pour gérer votre code.
  2. Dataform vous permet de créer des espaces de travail pour le développement.
  3. Dataform vous permet de développer des workflows dans un espace de travail de développement.
  4. Dataform compile Dataform Core en SQL.
  5. Dataform exécute l'arborescence des dépendances.

Dataform vous permet de créer des dépôts pour gérer votre code

Dans un dépôt Dataform, vous utilisez Dataform Core, une extension de SQL, pour écrire des fichiers SQLX dans lesquels vous définissez votre workflow. Les dépôts Dataform sont compatibles avec le contrôle des versions. Vous pouvez associer un dépôt Dataform à un fournisseur Git tiers.

Dataform vous permet de créer des espaces de travail pour le développement

Vous pouvez créer des espaces de travail de développement dans un dépôt Dataform pour le développement de Dataform Core. Dans un espace de travail de développement, vous pouvez apporter des modifications au dépôt, les compiler, les tester et les envoyer au dépôt principal via Git.

Dataform vous permet de développer Dataform Core dans un espace de travail de développement

Dans un espace de travail de développement, vous pouvez définir et documenter des tables, leurs dépendances et la logique de transformation pour créer votre workflow. Vous pouvez également configurer des actions en JavaScript.

Dataform compile Dataform Core

Lors de la compilation, Dataform effectue les tâches suivantes :

  • Compile Dataform Core dans un workflow de SQL standard.
  • Ajoute des instructions SQL récurrentes, telles que CREATE TABLE ou INSERT, au code en ligne avec la configuration de votre requête.
  • Transpile (compile source à source) JavaScript en SQL.
  • Résout les dépendances et recherche les erreurs, y compris les dépendances manquantes ou circulaires.
  • Crée l'arborescence des dépendances de toutes les actions à exécuter dans BigQuery.

La compilation Dataform est hermétique pour vérifier la cohérence de la compilation, ce qui signifie que le même code est compilé dans le même résultat de compilation SQL à chaque fois. Dataform compile votre code dans un environnement de bac à sable sans accès à Internet. Aucune action supplémentaire, telle que l'appel d'API externes, n'est disponible lors de la compilation.

Pour déboguer en temps réel, vous pouvez inspecter le workflow compilé de votre projet dans un graphique interactif de votre espace de travail de développement.

Dataform exécute l'arborescence des dépendances

Dans BigQuery, Dataform effectue les tâches suivantes :

  • Exécute les commandes SQL, en suivant l'ordre de l'arborescence des dépendances.
  • Exécute des requêtes d'assertion sur vos tables et vues pour vérifier l'exactitude des données.
  • Exécute d'autres opérations SQL que vous avez définies.

Une fois l'exécution terminée, vous pouvez utiliser vos tables et vues à toutes fins d'analyse.

Vous pouvez afficher les journaux pour voir les tables créées, si les assertions ont réussi ou échoué, combien de temps chaque action a pris et d'autres informations. Vous pouvez également afficher le code SQL exact qui a été exécuté dans BigQuery.

Fonctionnalités de Dataform

Avec Dataform, vous pouvez développer et déployer des tables, des tables incrémentales ou des vues dans BigQuery. Dataform propose un environnement Web pour les activités suivantes :

  • Développement de workflows
  • Connexion à GitHub, GitLab, Azure DevOps Services et Bitbucket
  • Intégration et déploiement continus
  • Exécution du workflow

Les sections suivantes décrivent les principales fonctionnalités de Dataform.

Dépôts

Chaque projet Dataform est stocké dans un dépôt. Un dépôt Dataform contient une collection de fichiers de configuration JSON, de fichiers SQLX et de fichiers JavaScript.

Les dépôts Dataform contiennent les types de fichiers suivants :

  • Fichiers de configuration

    Les fichiers de configuration JSON ou SQLX vous permettent de configurer vos workflows. Ils contiennent une configuration générale, des plannings d'exécution ou un schéma pour la création de tables et de vues.

  • Définitions

    Les définitions sont des fichiers SQLX et JavaScript qui définissent de nouvelles tables, vues, et opérations SQL supplémentaires à exécuter dans BigQuery.

  • Inclut

    Les inclusions sont des fichiers JavaScript dans lesquels vous pouvez définir des variables et des fonctions à utiliser dans votre projet.

Chaque dépôt Dataform est connecté à l'agent de service Dataform par défaut ou à un compte de service personnalisé. Vous ne pouvez connecter de nouveaux dépôts qu'à des comptes de service personnalisés. Vous sélectionnez le compte de service personnalisé lorsque vous créez un dépôt ou modifiez le compte de service ultérieurement.

Par défaut, Dataform utilise un agent de service ou un compte de service dérivé du numéro de votre projet au format suivant :

service-YOUR_PROJECT_NUMBER@gcp-sa-dataform.iam.gserviceaccount.com

Contrôle des versions

Dataform utilise le système de contrôle des versions Git pour conserver un enregistrement de chaque modification apportée aux fichiers du projet et pour gérer les versions des fichiers.

Chaque dépôt Dataform peut gérer son propre dépôt Git ou être connecté à un dépôt Git tiers distant. Vous pouvez connecter un dépôt Dataform à un dépôt GitHub, GitLab, Azure DevOps Services ou Bitbucket.

Les utilisateurs contrôlent les versions de leur code de workflow dans les espaces de travail Dataform. Dans un espace de travail Dataform, vous pouvez extraire les modifications du dépôt, valider toutes les modifications ou certaines d'entre elles, et les envoyer aux branches Git du dépôt.

Développement de workflows

Dans Dataform, vous apportez des modifications aux fichiers et aux répertoires dans un espace de travail de développement. Un espace de travail de développement est une copie virtuelle et modifiable du contenu d'un dépôt Git. Dataform préserve l'état des fichiers dans votre espace de travail de développement d'une session à l'autre.

Dans un espace de travail de développement, vous pouvez créer des actions de workflow en utilisant Dataform Core avec SQLX et JavaScript ou seulement avec JavaScript. Vous pouvez mettre en forme automatiquement votre code Dataform Core ou JavaScript.

Chaque élément d'un workflow Dataform, tel qu'une table ou une assertion, correspond à une action que Dataform effectue dans BigQuery. Par exemple, un fichier de définition de table est une action de création ou de mise à jour de la table dans BigQuery.

Dans un espace de travail Dataform, vous pouvez développer les actions de workflow suivantes :

Vous pouvez utiliser JavaScript pour réutiliser votre code de workflow Dataform de différentes manières :

Dataform compile le code de workflow dans votre espace de travail en temps réel. Dans votre espace de travail, vous pouvez afficher les requêtes compilées et les détails des actions dans chaque fichier. Vous pouvez également afficher l'état de la compilation et les erreurs dans le fichier modifié ou dans le dépôt.

Pour tester la sortie d'une requête SQL compilée avant de l'exécuter dans BigQuery, vous pouvez exécuter un aperçu de la requête dans votre espace de travail Dataform.

Pour inspecter l'ensemble du workflow défini dans votre espace de travail, vous pouvez afficher un graphique compilé interactif qui montre toutes les actions compilées de votre workflow et les relations entre elles.

Compilation de workflows

Dataform utilise les paramètres de compilation par défaut, configurés dans le fichier de paramètres de workflow, pour compiler le code de workflow dans votre espace de travail en SQL en temps réel, ce qui crée un résultat de compilation de l'espace de travail.

Vous pouvez remplacer les paramètres de compilation pour personnaliser la façon dont Dataform compile votre workflow dans un résultat de compilation.

Avec les remplacements de compilation d'espace de travail, vous pouvez configurer des remplacements de compilation pour tous les espaces de travail d'un dépôt. Vous pouvez définir des remplacements d'espace de travail dynamiques pour créer des résultats de compilation personnalisés pour chaque espace de travail, en transformant les espaces de travail en environnements de développement isolés. Vous pouvez remplacer le Google Cloud projet dans lequel Dataform exécute le contenu d'un espace de travail, ajouter un préfixe aux noms de toutes les tables compilées, et ajouter un suffixe au schéma par défaut.

Avec les configurations de version, vous pouvez configurer des modèles de paramètres de compilation pour créer des résultats de compilation d'un dépôt Dataform. Dans une configuration de version, vous pouvez remplacer le Google Cloud projet dans lequel Dataform exécute les résultats de compilation, ajouter un préfixe aux noms de toutes les tables compilées, ajouter un suffixe au schéma par défaut et ajouter des variables de compilation. Vous pouvez également définir la fréquence de création des résultats de compilation. Pour planifier des exécutions de résultats de compilation créés dans une configuration de version sélectionnée, vous pouvez créer une configuration de workflow.

Exécution de workflow

Lors d'une exécution de workflow, Dataform exécute les résultats de compilation des workflows pour créer ou mettre à jour des éléments dans BigQuery.

Pour créer ou actualiser les tables et les vues définies dans votre workflow dans BigQuery, vous pouvez démarrer manuellement une exécution de workflow dans un espace de travail de développement ou planifier des exécutions.

Vous pouvez planifier des exécutions Dataform dans BigQuery de différentes manières :

Vous pouvez également automatiser les exécutions avec des déclencheurs Cloud Build.

Pour déboguer les erreurs, vous pouvez surveiller les exécutions de différentes manières :

Dataform Core

Dataform Core est un méta-langage Open Source permettant de créer des tables et des workflows SQL. Dataform Core étend SQL en fournissant un système de gestion des dépendances, des tests de qualité des données automatisés et une documentation des données.

Vous pouvez utiliser Dataform Core aux fins suivantes :

  • Définir des tables, des vues, des vues matérialisées ou des tables incrémentales.
  • Définir la logique de transformation des données.
  • Déclarer les données sources et gérer les dépendances des tables.
  • Documenter les descriptions des tables et des colonnes dans le code.
  • Réutiliser des fonctions et des variables dans différentes requêtes.
  • Écrire des assertions de données pour vérifier la cohérence des données.

Dans Dataform, vous utilisez Dataform Core pour développer des workflows et déployer des éléments dans BigQuery.

Dataform Core fait partie du framework de modélisation de données Dataform Open Source qui inclut également la CLI Dataform. Vous pouvez compiler et exécuter Dataform Core localement à l'aide de la Dataform CLI en dehors de Google Cloud.

Pour utiliser Dataform Core, vous écrivez des fichiers SQLX. Chaque fichier SQLX contient une requête définissant une relation de base de données que Dataform crée et met à jour dans BigQuery.

Dataform compile votre code Dataform Core en temps réel pour créer un résultat de compilation SQL que vous pouvez exécuter dans BigQuery.

La compilation Dataform est hermétique pour vérifier la cohérence de la compilation, ce qui signifie que le même code est compilé dans le même résultat de compilation SQL à chaque fois. Dataform compile votre code dans un environnement de bac à sable sans accès à Internet. Aucune action supplémentaire, telle que l'appel d'API externes, n'est disponible lors de la compilation.

Bloc de configuration de fichier SQLX

Un fichier SQLX se compose d'un bloc de configuration et d'un corps. Toutes les propriétés de configuration, ainsi que le bloc de configuration lui-même, sont facultatifs. Par conséquent, tout fichier SQL simple est un fichier SQLX valide que Dataform exécute tel quel.

Dans le bloc de configuration, vous pouvez effectuer les actions suivantes :

Spécifier les métadonnées de requête

Vous pouvez configurer la façon dont Dataform matérialise les requêtes dans BigQuery, par exemple le type de table de sortie, la base de données cible ou les libellés à l'aide des métadonnées de configuration.

Documenter les données

Vous pouvez documenter vos tables et leurs champs directement dans le bloc de configuration. La documentation de vos tables est envoyée directement à BigQuery. Vous pouvez analyser cette documentation et l'envoyer à d'autres outils.

Définir des tests de qualité des données

Vous pouvez définir des tests de qualité des données, appelés assertions, pour vérifier l'unicité, les valeurs nulles ou une condition personnalisée. Dataform ajoute les assertions définies dans le bloc de configuration à l'arborescence des dépendances de votre workflow après la création de la table. Vous pouvez également définir des assertions en dehors du bloc de configuration, dans un fichier SQLX distinct.

L'exemple de code suivant montre comment définir le type de table de sortie, documenter la table et définir un test de qualité dans un bloc de configuration d'un fichier SQLX.

config {
  type: "table",
    description: "This table joins orders information from OnlineStore & payment information from PaymentApp",
  columns: {
    order_date: "The date when a customer placed their order",
    id: "Order ID as defined by OnlineStore",
    order_status: "The status of an order e.g. sent, delivered",
    customer_id: "Unique customer ID",
    payment_status: "The status of a payment e.g. pending, paid",
    payment_method: "How the customer chose to pay",
    item_count: "The number of items the customer ordered",
    amount: "The amount the customer paid"
  },
    assertions: {
    uniqueKey: ["id"]
  }
}

Corps de fichier SQLX

Dans le corps d'un fichier SQLX, vous pouvez effectuer les actions suivantes :

Définir une table

Pour définir une table, vous pouvez utiliser des instructions SQL SELECT et la fonction ref.

La fonction ref est une fonction intégrée SQLX essentielle à la gestion des dépendances dans Dataform. La fonction ref vous permet de référencer des tables définies dans votre projet Dataform au lieu de coder en dur les noms de schéma et de table de votre table de données.

Dataform utilise la fonction ref pour créer une arborescence des dépendances de toutes les tables à créer ou à mettre à jour. Après la compilation, Dataform ajoute des instructions récurrentes telles que CREATE, REPLACE ou INSERT.

L'exemple de code suivant montre comment référencer une table dans un fichier SQLX avec la fonction ref.

config { type: "table" }

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM ${ref("store_clean")}

GROUP BY 1, 2, 3

Le résultat ressemble à ce qui suit :

CREATE OR REPLACE TABLE Dataform.orders AS

SELECT
  order_date AS date,
  order_id AS order_id,
  order_status AS order_status,
  SUM(item_count) AS item_count,
  SUM(amount) AS revenue

FROM Dataform_stg.store_clean

GROUP BY 1, 2, 3

Pour en savoir plus sur la gestion des dépendances supplémentaires, par exemple, l'exécution conditionnelle de code ou l'utilisation d'autres fonctions intégrées de Dataform Core, consultez la documentation de référence de Dataform Core.

Définir des opérations SQL supplémentaires

Pour configurer Dataform afin qu'il exécute une ou plusieurs instructions SQL avant ou après la création d'une table ou d'une vue, vous pouvez spécifier des opérations de pré-requête et de post-requête.

L'exemple de code suivant montre comment configurer les autorisations d'accès aux tables ou aux vues dans une opération de post-requête.

SELECT * FROM ...

post_operations {
  GRANT `roles/bigquery.dataViewer` ON TABLE ${self()} TO "group:someusers@dataform.co"
}

Encapsuler le code SQL

Pour définir des fonctions réutilisables afin de générer des parties répétitives de code SQL, vous pouvez utiliser des blocs JavaScript. Vous ne pouvez réutiliser le code défini dans un bloc JavaScript que dans le fichier SQLX où le bloc est défini. Pour réutiliser du code dans l'ensemble de votre dépôt, vous pouvez créer des inclusions.

Pour modifier dynamiquement une requête, vous pouvez utiliser JavaScript en ligne n'importe où dans le corps.

L'exemple de code suivant montre comment définir un bloc JavaScript dans un fichier SQLX et l'utiliser en ligne dans une requête :

js {
  const columnName = "foo";
}

SELECT 1 AS ${columnName} FROM "..."

Limites

Dataform présente les limitations connues décrites ci-dessous :

  • Dataform s'exécute sur un environnement d'exécution V8 simple et n'est pas compatible avec les fonctionnalités et modules supplémentaires fournis par Node.js. Google Cloud Si votre base de code existante nécessite des modules Node.js, vous devez supprimer ces dépendances.

    Les projets sans champ de nom dans package.json génèrent des différences sur package-lock.json chaque fois que des packages sont installés. Pour éviter cela, vous devez ajouter une propriété name dans package.json.

  • Les URL git+https:// pour les dépendances dans package.json ne sont pas acceptées.

    Convertissez ces URL en URL d'archive https:// simples. Par exemple, convertissez git+https://github.com/dataform-co/dataform-segment.git#1.5 en https://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz.

  • L'exécution manuelle de tests unitaires n'est pas disponible.

  • La recherche de contenu de fichier dans les espaces de travail de développement n'est pas disponible.

  • À partir de Dataform Core 3.0.0., Dataform ne distribue pas d'image Docker. Vous pouvez créer votre propre image Docker de Dataform, que vous pouvez utiliser pour exécuter l'équivalent des commandes de la CLI Dataform. Pour créer votre propre image Docker, consultez la section Conteneuriser une application dans la documentation Docker.

  • Les méthodes d'API Dataform suivantes ne sont pas conformes aux AIP.134 car elles traitent l'entrée générique * comme une requête incorrecte et mettent à jour tous les champs au lieu de définir des champs lorsque field_mask est omis :

  • Si une exécution de configuration de workflow planifiée ne se termine pas avant le début de l'exécution planifiée suivante, l'exécution planifiée suivante est ignorée et marquée comme une erreur.

Étape suivante