Présentation de Dataform Core

Ce document présente Dataform Core et explique comment l'utiliser dans Dataform.

Présentation de Dataform Core

Dataform Core est un métalangage Open Source permettant de créer des tables et des workflows SQL. Dataform Core étend le langage SQL en fournissant un système de gestion des dépendances, des tests automatisés de qualité des données 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émentielles
  • Définir la logique de transformation des données
  • Déclarer des données sources et gérer les dépendances des tables
  • Documenter les descriptions de tables et de colonnes dans le code
  • Réutiliser des fonctions et des variables dans différentes requêtes
  • Écrire des assertions de données pour garantir la cohérence des données

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

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

Pour utiliser Dataform Core, vous devez écrire des fichiers SQLX. Chaque fichier SQLX contient une requête qui définit une relation de base de données créée et mise à jour par Dataform dans BigQuery.

Dataform compile votre code principal 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 assurer la cohérence de la compilation, ce qui signifie que le même code est compilé à chaque fois avec le même résultat de compilation SQL. 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 et le bloc de configuration lui-même sont facultatifs. Ainsi, tout fichier SQL brut est un fichier SQLX valide que Dataform exécute tel quel.

Dans le bloc "config", vous pouvez effectuer les actions suivantes:

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

Vous pouvez configurer la manière 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.

Données du document

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 transmettre à 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 de 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 du fichier SQLX

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

Définir un tableau

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

La fonction ref est une fonction SQLX intégrée qui est 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 de 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 supplémentaire des dépendances, par exemple l'exécution de code conditionnelle à l'aide d'autres fonctions intégrées principales de Dataform, consultez la documentation de référence sur 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 pré-requête et post-requête.

L'exemple de code suivant vous 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 permettant 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 où le bloc est défini. Pour réutiliser le code dans l'ensemble de votre dépôt, vous pouvez créer des inclusions.

Pour modifier une requête de façon dynamique, 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 de manière intégrée dans une requête:

js {
  const columnName = "foo";
}

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

Étapes suivantes