Ce document présente les concepts et les processus de Dataform.
Service permettant aux analystes de données de développer, de tester, de contrôler les versions et de planifier des workflows SQL 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) pour l'intégration des données. Une fois que les données brutes ont été extraites des systèmes sources et chargées dans BigQuery, Dataform vous aide à les transformer en ensemble de tables de données bien défini, testé et documenté.
Dataform vous permet d'effectuer les actions de transformation de données suivantes:
- Développer et exécuter des workflows de transformation de données.
- Collaborez avec les membres de votre équipe sur le développement de workflows via Git.
- Gérer un grand nombre de tables et leurs dépendances
- Déclarez les données sources et gérez les dépendances de table.
- Affichez une visualisation de l'arborescence des dépendances de votre workflow.
- Gérez les données avec du code SQL dans un dépôt central.
- Réutiliser du code avec JavaScript
- Vérifiez l'exactitude des données à l'aide de tests de qualité sur les tables source et de sortie.
- Contrôler les versions du code SQL
- Documentez 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:
- Dataform vous permet de créer des dépôts pour gérer votre code.
- Dataform vous permet de créer des espaces de travail pour le développement.
- Dataform vous permet de développer des workflows dans un espace de travail de développement.
- Dataform compile le noyau Dataform en SQL.
- 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 le noyau Dataform, 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 du noyau Dataform. Dans un espace de travail de développement, vous pouvez modifier le dépôt, le compiler, le tester et le transférer vers le dépôt principal via Git.
Dataform vous permet de développer le noyau Dataform 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 le noyau Dataform
Lors de la compilation, Dataform effectue les tâches suivantes:
- Compilé le noyau Dataform dans un workflow de SQL standard.
- Ajoute des instructions SQL standards, telles que
CREATE TABLE
ouINSERT
, au code en ligne avec votre configuration de requête. - Transpile (compile de 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 garantir la cohérence de la compilation. Autrement dit, le même code est compilé pour obtenir le même résultat de compilation SQL à chaque fois. Dataform compile votre code dans un environnement 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 dans 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.
Après l'exécution, vous pouvez utiliser vos tables et vues pour tous vos besoins d'analyse.
Vous pouvez afficher les journaux pour voir quelles tables ont été créées, si les assertions ont réussi ou échoué, la durée de chaque action 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émentielles ou des vues dans BigQuery. Dataform propose un environnement Web pour les activités suivantes:
- Développement de workflow
- 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 planifications d'exécution ou un schéma pour créer des tables et des 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 associé à un compte de service. Vous pouvez sélectionner un compte de service lorsque vous créez un dépôt ou modifier le compte de service ultérieurement.
Par défaut, Dataform utilise un compte de service dérivé de votre numéro de 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 de projet et pour gérer les versions de 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 associer 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 des modifications du dépôt, valider toutes les modifications ou certaines d'entre elles, puis les envoyer vers les branches Git du dépôt.
Développement de workflow
Dans Dataform, vous modifiez les fichiers et les 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 conserve l'état des fichiers de votre espace de travail de développement entre les sessions.
Dans un espace de travail de développement, vous pouvez développer des actions de workflow SQL à l'aide du noyau Dataform avec SQLX et JavaScript, ou exclusivement avec JavaScript. Vous pouvez mettre en forme automatiquement votre code JavaScript ou Dataform Core.
Chaque élément d'un workflow Dataform, comme une table ou une assertion, correspond à une action effectuée par Dataform 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:
- Déclarations de données sources
- Tables et vues
- Tables incrémentielles
- Partitions et clusters de tables
- Dépendances entre les actions
- Documentation des tables
- Opérations SQL personnalisées
- Étiquettes BigQuery
- Tags avec stratégie BigQuery
- Tags Dataform
- Tests de qualité des données, appelés assertions
Vous pouvez utiliser JavaScript pour réutiliser le code de votre workflow Dataform de différentes manières:
- Dans un fichier avec encapsulation de code
- Dans un dépôt avec des inclusions
- Dans les dépôts avec des packages
Dataform compile le code du 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 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 une prévisualisation 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 présente 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 du workflow, pour compiler le code du workflow dans votre espace de travail en SQL en temps réel, créant ainsi 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 en résultat de compilation.
Les remplacements de compilation d'espace de travail vous permettent de 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, transformant les espaces de travail en environnements de développement isolés. Vous pouvez remplacer le projet Google Cloud dans lequel Dataform exécutera 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 projet Google Cloud dans lequel Dataform exécutera 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 les exécutions des résultats de compilation créés dans une configuration de version sélectionnée, vous pouvez créer une configuration de workflow.
Exécution du workflow
Lors de l'exécution du workflow, Dataform exécute les résultats de compilation des workflows pour créer ou mettre à jour des composants dans BigQuery.
Pour créer ou actualiser les tables et les vues définies dans votre workflow dans BigQuery, vous pouvez lancer 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:
- Créer des configurations de workflow pour planifier l'exécution des résultats de compilation créés dans les configurations de version
- Planifier des exécutions avec Cloud Composer
- Planifier des exécutions avec Workflows et Cloud Scheduler
Pour déboguer les erreurs, vous pouvez surveiller les exécutions de différentes manières:
- Afficher les journaux d'exécution détaillés de Dataform
- Afficher les journaux d'audit pour Dataform
- Afficher les journaux Cloud Logging pour Dataform
Noyau Dataform
Le noyau Dataform est un métalangage Open Source permettant de créer des tables et des workflows SQL. Le noyau Dataform é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 le noyau Dataform aux fins suivantes:
- Définir des tables, des vues, des vues matérialisées ou des tables incrémentielles
- Définir la logique de transformation des données
- Déclarer des données sources et gérer les dépendances de table
- 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 assurer la cohérence des données
Dans Dataform, vous utilisez le noyau Dataform pour développer des workflows et déployer des composants dans BigQuery.
Le noyau Dataform fait partie du framework de modélisation de données Open Source Dataform, qui inclut également la CLI Dataform. Vous pouvez compiler et exécuter le noyau Dataform en local via la CLI Dataform en dehors de Google Cloud.
Pour utiliser le noyau Dataform, vous devez écrire des fichiers SQLX. Chaque fichier SQLX contient une requête qui définit une relation de base de données que Dataform crée et met à jour dans BigQuery.
Dataform compile votre code de base Dataform 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 garantir la cohérence de la compilation. Autrement dit, le même code est compilé pour obtenir 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 du fichier SQLX
Un fichier SQLX se compose d'un bloc de configuration et d'un corps. Toutes les propriétés de configuration et le bloc de configuration lui-même sont facultatifs. Par conséquent, tout fichier SQL brut est un fichier SQLX valide que Dataform exécute tel quel.
Dans le bloc de configuration, vous pouvez effectuer les actions suivantes:
- Spécifiez les métadonnées de la requête.
- Documentez les données.
- Définir des tests de qualité des données.
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 transmise directement à BigQuery. Vous pouvez analyser cette documentation et la diffuser vers 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 affirmations, 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 du tableau. 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 du fichier SQLX
Dans le corps d'un fichier SQLX, vous pouvez effectuer les actions suivantes:
- Définissez une table et ses dépendances.
- Définissez des opérations SQL supplémentaires à exécuter dans BigQuery.
- Générez du code SQL avec JavaScript.
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 les tables définies dans votre projet Dataform au lieu de coder en dur le schéma et les noms de table de votre table de données.
Dataform utilise la fonction ref
pour créer un arbre de dépendances de toutes les tables à créer ou à mettre à jour. Après la compilation, Dataform ajoute des instructions standards telles que CREATE
, REPLACE
ou INSERT
.
L'exemple de code suivant montre comment faire référence à un tableau dans un fichier SQLX à l'aide de 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 du code de manière conditionnelle, à l'aide d'autres fonctions intégrées de Dataform, consultez la documentation de référence de Dataform.
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 avant et après la requête.
L'exemple de code suivant montre comment configurer les autorisations d'accès aux tables ou aux vues dans une opération 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 SLQX dans lequel 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 du code JavaScript intégré 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 limites connues suivantes:
Dataform dans Google Cloud s'exécute sur un environnement d'exécution V8 standard et n'est pas compatible avec les fonctionnalités et modules supplémentaires fournis par Node.js. Si votre codebase 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 surpackage-lock.json
chaque fois que des paquets sont installés. Pour éviter ce résultat, vous devez ajouter une propriéténame
danspackage.json
.Les URL
git
+https://
pour les dépendances danspackage.json
ne sont pas acceptées.Convertissez ces URL en URL d'archive
https://
standard. Par exemple, convertissezgit+https://github.com/dataform-co/dataform-segment.git#1.5
enhttps://github.com/dataform-co/dataform-segment/archive/1.5.tar.gz
.Il n'est pas possible d'exécuter manuellement des tests unitaires.
La recherche dans le contenu des fichiers dans les espaces de travail de développement n'est pas disponible.
À partir de Dataform core
3.0.0.
, Dataform ne distribue plus 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 Intégrer une application en conteneur dans la documentation Docker.Les méthodes d'API Dataform suivantes ne respectent pas les consignes de l'AIP.134 en traitant l'entrée de caractère générique
*
comme une requête incorrecte et en mettant à jour tous les champs au lieu de définir des champs lorsquefield_mask
est omis:
Étape suivante
- Pour en savoir plus sur le cycle de vie du code dans Dataform, consultez la section Présentation du cycle de vie du code dans Dataform.
- Pour en savoir plus sur les dépôts Dataform, consultez la section Présentation des dépôts.
- Pour en savoir plus sur les espaces de travail Dataform, consultez la section Présentation du développement dans un espace de travail.
- Pour en savoir plus sur le développement de workflows dans Dataform, consultez la page Présentation des workflows SQL.
- Pour en savoir plus sur la CLI Dataform, consultez Utiliser la CLI Dataform.