Dans Dataform, un tableau est l'un des types d'objets qui composent un workflow. Vous pouvez créer des tables qui font référence aux sources de données déclarées pour votre workflow ou à d'autres tables de votre workflow. Dataform compile vos définitions de tables en SQL en temps réel. Lorsque vous déclenchez l'exécution, Dataform exécute le code SQL et crée les tables que vous avez définies dans BigQuery.
Vous pouvez créer les types de tables suivants dans un fichier SQLX type: "table"
:
table
: table standard.incremental
: table incrémentielle.view
: vue Tableau. Pour en savoir plus, consultez Présentation des vues.materialized
: une vue Tableau matérialisée. Pour en savoir plus, consultez Présentation des vues matérialisées.
Vous pouvez également définir des partitions et des clusters de tables.
Pour conserver une trace de l'objectif d'un tableau ou de sa relation avec d'autres tableaux de votre workflow, vous pouvez ajouter de la documentation au tableau ou à ses colonnes sélectionnées.
Pour tester les données d'une table par rapport à des conditions spécifiques, vous pouvez créer des requêtes de test de la qualité des données appelées assertions. Dataform exécute des assertions chaque fois qu'il met à jour votre workflow et vous alerte en cas d'échec.
Pour remplacer le schéma, la base de données et le nom par défaut d'une table sélectionnée, vous pouvez remplacer les paramètres de la table.
Pour désactiver la création de tables ou exécuter une instruction SQL avant ou après la création de tables, vous pouvez configurer des actions supplémentaires.
Pour organiser vos tables dans BigQuery après les avoir exécutées, vous pouvez ajouter des libellés BigQuery. Pour en savoir plus, consultez la section Présentation des libellés.
Pour restreindre l'accès aux données au niveau des colonnes des tables, vous pouvez ajouter des tags avec stratégie BigQuery. Pour en savoir plus, consultez Présentation du contrôle des accès au niveau des colonnes.
En plus de définir des tables dans un fichier SQLX type: "table"
, vous pouvez créer des tables vides en définissant une requête SQL personnalisée dans un fichier SQLX type: "operations"
.
Vous pouvez créer une table vide pour qu'un autre service puisse l'alimenter en données.
Avant de commencer
Dans la console Google Cloud , accédez à la page Dataform.
Créez et initialisez un espace de travail de développement dans votre dépôt.
Facultatif : Déclarez une source de données.
Rôles requis
Pour obtenir les autorisations nécessaires pour effectuer les tâches décrites dans ce document, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Dataform (roles/dataform.editor
) sur les espaces de travail.
Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Créer une table
Cette section explique comment créer des tables avec Dataform Core dans Dataform.
À propos des définitions de tables
Pour définir une table, vous devez définir son type et écrire une instruction SELECT
dans un fichier SQLX type: "table"
. Dataform compile ensuite votre code Dataform Core en SQL, exécute le code SQL et crée les tables que vous avez définies dans BigQuery.
Dans une instruction SELECT
Dataform Core, vous définissez la structure du tableau et référencez d'autres objets de votre workflow.
En plus de définir des tables dans un fichier type: "table"
SLQX, vous pouvez créer des tables vides en définissant une requête SQL personnalisée dans un fichier type: "operations"
SQLX.
Pour en savoir plus, consultez Créer une table vide.
Dépendances de référence avec ref
Pour référencer une action de workflow dans une instruction SELECT
et l'ajouter automatiquement en tant que dépendance, utilisez la fonction ref
. Dataform exécute les dépendances avant les tables qui en dépendent pour vérifier l'ordre correct du pipeline.
La fonction ref
est une fonction Dataform Core intégrée, essentielle à la gestion des dépendances dans Dataform. La fonction ref
vous permet de référencer les objets suivants définis dans votre workflow Dataform et d'en dépendre automatiquement, au lieu de coder en dur le schéma et les noms de tables :
- Tables de tous les types de tables acceptés.
- Déclarations sur les sources de données :
- Opérations SQL personnalisées avec la propriété
hasOutput
définie surtrue
.
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 récurrentes à l'instruction SQL, telles que CREATE
, REPLACE
, INSERT
ou MERGE
.
L'exemple de code suivant montre une définition de table avec l'utilisation 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
Dans la fonction ref
, vous indiquez le nom de la déclaration de table ou de source de données dont vous souhaitez dépendre. Il s'agit généralement du nom du fichier SQLX dans lequel la déclaration de table ou de source de données est définie.
Si le nom d'une table est remplacé, utilisez le nom remplacé dans la fonction ref
.
Par exemple, référencez une table avec config { name: "overridden_name" }
comme ref("overridden_name")
. Pour en savoir plus, consultez Remplacer les paramètres d'une table et Faire référence à une table dont le nom a été remplacé.
Lorsque vous avez plusieurs tables portant le même nom dans différents schémas, vous pouvez faire référence à une table spécifique en fournissant deux arguments à la fonction ref
: le nom du schéma et le nom de la table.
L'exemple de code suivant montre la fonction ref
avec deux arguments pour spécifier une table dans un schéma spécifique :
config { type: "table" }
SELECT * FROM ${ref("schema", "store_clean")}
Vous pouvez également ajouter manuellement des dépendances de table au bloc config
pour les tables, les assertions, les déclarations de sources de données ou les opérations SQL personnalisées qui ne sont pas référencées dans une fonction ref
de l'instruction SELECT
. Dataform exécute ces dépendances avant les tables dépendantes.
L'exemple de code suivant montre une dépendance de table dans le bloc config
:
config { dependencies: [ "unreferenced_table" ] }
SELECT * FROM ...
Pour en savoir plus sur la gestion des dépendances dans votre workflow, consultez Définir des dépendances.
Référencer d'autres tables avec resolve
La fonction resolve
vous permet de faire référence à une déclaration de table ou de source de données dans une instruction SELECT
comme la fonction ref
, mais elle n'ajoute pas la référence en tant que dépendance. Cela signifie que l'objet référencé à l'aide de la fonction resolve
n'affecte pas l'exécution de la table qui utilise la fonction resolve
.
Pour en savoir plus sur les fonctions Dataform Core intégrées, consultez la documentation de référence sur Dataform Core.
Créer un fichier SQLX pour une définition de table
Stockez les fichiers SQLX de définition de table dans le répertoire definitions/
. Pour créer un fichier SQLX dans le répertoire definitions/
, procédez comme suit :
Dans la console Google Cloud , accédez à la page Dataform.
Pour ouvrir un dépôt, cliquez sur son nom.
Pour ouvrir un espace de travail de développement, cliquez sur son nom.
Dans le volet Fichiers, à côté de
definitions/
, cliquez sur Plus.Cliquez sur Créer un fichier.
Dans le champ Ajouter un chemin d'accès au fichier, saisissez le nom du fichier suivi de
.sqlx
aprèsdefinitions/
. Par exemple,definitions/my-table.sqlx
.Les noms de fichiers ne peuvent contenir que des chiffres, des lettres, des traits d'union et des traits de soulignement.
Cliquez sur Créer un fichier.
Définir le type de tableau
Pour créer une définition de type de tableau, procédez comme suit :
- Dans votre espace de travail de développement, dans le volet Fichiers, développez le répertoire
definitions/
. - Sélectionnez le fichier SQLX de définition de table que vous souhaitez modifier.
Dans le fichier, saisissez l'extrait de code suivant :
config { type: "TABLE_TYPE" }
Remplacez TABLE_TYPE par l'un des types de tableau suivants :
table
incremental
view
Facultatif : Pour définir une vue matérialisée, saisissez la propriété
materialized
soustype: "view"
au format suivant :config { type: "view", materialized: true }
Pour en savoir plus, consultez ITableConfig.
Facultatif : Cliquez sur Format.
Définir la structure et les dépendances des tables
Pour écrire une instruction SELECT
de définition de table et définir la structure et les dépendances de la table, procédez comme suit :
- Dans votre espace de travail de développement, dans le volet Fichiers, développez le répertoire
definitions/
. - Sélectionnez le fichier SQLX de définition de table que vous souhaitez modifier.
- Sous le bloc
config
, écrivez une instructionSELECT
. - Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une définition de table avec une instruction SELECT
et la fonction ref
:
config { type: "table" }
SELECT
customers.id AS id,
customers.first_name AS first_name,
customers.last_name AS last_name,
customers.email AS email,
customers.country AS country,
COUNT(orders.id) AS order_count,
SUM(orders.amount) AS total_spent
FROM
dataform-samples.dataform_sample.crm_customers AS customers
LEFT JOIN ${ref('order_stats')} orders
ON customers.id = orders.customer_id
WHERE
customers.id IS NOT NULL
AND customers.first_name <> 'Internal account'
AND country IN ('UK', 'US', 'FR', 'ES', 'NG', 'JP')
GROUP BY 1, 2, 3, 4, 5
Ajouter des dépendances de table manuelles
Pour ajouter des dépendances de table qui ne sont pas référencées dans l'instruction SELECT
, mais qui doivent être exécutées avant la table actuelle, procédez comme suit :
- Dans votre espace de travail de développement, dans le volet Fichiers, développez le répertoire
definitions/
. - Sélectionnez le fichier SQLX de définition de table que vous souhaitez modifier.
Dans le bloc
config
du tableau, saisissez l'extrait de code suivant :dependencies: [ "DEPENDENCY_TABLE", ]
Remplacez DEPENDENCY_TABLE par le nom du fichier de la table que vous souhaitez ajouter en tant que dépendance. Vous pouvez saisir plusieurs noms de fichiers.
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre deux tables ajoutées en tant que dépendances de table manuelles au bloc config
d'un fichier de définition de table :
config { dependencies: [ "some_table", "some_other_table" ] }
Remplacer les paramètres de table
Vous pouvez remplacer le schéma, la base de données et le nom par défaut d'une table sélectionnée.
Par défaut, une table suit le schéma et la configuration de la base de données que vous définissez dans workflow_settings.yaml
. Le nom d'une table est identique à celui du fichier SQLX de définition de table.
Pour remplacer le schéma et le nom d'une table sélectionnée, procédez comme suit :
Accédez à votre espace de travail de développement.
Dans le volet Fichiers, développez
definitions/
.Ouvrez un fichier de définition de table SQLX.
Dans le bloc
config
, saisissez l'extrait de code suivant :{ schema: "OVERRIDDEN_SCHEMA", database: "OVERRIDDEN_DATABASE", name: "OVERRIDDEN_NAME" }
Remplacez les éléments suivants :
OVERRIDDEN_SCHEMA
: ensemble de données BigQuery dans lequel vous souhaitez créer la table.OVERRIDDEN_DATABASE
: ID du projet BigQuery dans lequel vous souhaitez créer la table.OVERRIDDEN_NAME
: nom de la table, qui est différent du nom de fichier de définition de table SQLX.
Facultatif : Cliquez sur Format.
Pour en savoir plus, consultez Faire référence à une table avec un nom de table remplacé.
Créer des partitions et des clusters de tables
Cette section vous explique comment utiliser Dataform Core pour créer des partitions et des clusters de tables. BigQuery accepte les tables partitionnées et le clustering de tables. Pour en savoir plus, consultez les pages Présentation des tables partitionnées et Créer et utiliser des tables en cluster.
Créer une partition de table
Pour créer une partition de table, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Ouvrez un fichier SQLX de définition de table.
Dans le bloc
config
, ajoutez le blocbigquery
sous la déclaration du type de tableau, au format suivant :config { type: "table", bigquery: { } }
Dans le bloc
bigquery
, saisissez l'extrait de code suivant :partitionBy: "PARTITION_EXPRESSION"
Remplacez PARTITION_EXPRESSION par une expression pour partitionner la table.
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre comment partitionner une table par heure dans un fichier SQLX de définition de table :
config {
type: "table",
bigquery: {
partitionBy: "DATETIME_TRUNC(<timestamp_column>, HOUR)"
}
}
L'exemple de code suivant montre comment partitionner une table par une valeur entière dans un fichier SQLX de définition de table :
config {
type: "table",
bigquery: {
partitionBy: "RANGE_BUCKET(<integer_column>, GENERATE_ARRAY(0, 1000000, 1000))"
}
}
Définir un filtre de partitionnement
Pour définir un filtre de partition, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Ouvrez un fichier SQLX de définition de table partitionnée.
Dans le bloc
bigquery
, saisissez l'extrait de code suivant :requirePartitionFilter : true
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre un filtre de partition défini dans le bloc bigquery
d'un fichier SQLX de table partitionnée :
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
requirePartitionFilter : true
}
}
SELECT CURRENT_TIMESTAMP() AS ts
Pour en savoir plus sur le filtre de partition dans BigQuery, consultez Définir l'attribut de filtrage de partition requis sur une table partitionnée.
Définir une durée de conservation pour les partitions
Pour contrôler la durée de conservation de toutes les partitions d'une table partitionnée, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Ouvrez un fichier SQLX de définition de table partitionnée.
Dans le bloc
bigquery
, saisissez l'extrait de code suivant :partitionExpirationDays: NUMBER_OF_DAYS
Remplacez NUMBER_OF_DAYS par le nombre de jours pendant lesquels vous souhaitez conserver les partitions.
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une période de conservation des partitions définie sur 14 jours dans le bloc bigquery
d'un fichier SQLX de table partitionnée :
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
partitionExpirationDays: 14,
}
}
SELECT CURRENT_TIMESTAMP() AS ts
Créer un cluster de tables
Pour créer un cluster de tables, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Ouvrez un fichier SQLX de définition de table.
Dans le bloc
bigquery
, saisissez l'extrait de code suivant :clusterBy: ["CLUSTER_COLUMN"]
Remplacez CLUSTER_COLUMN par le nom de la colonne selon laquelle vous souhaitez regrouper la table. Pour en savoir plus, consultez clustering_column_list.
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une table partitionnée et mise en cluster par les colonnes name
et revenue
:
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
clusterBy: ["name", "revenue"]
}
}
SELECT CURRENT_TIMESTAMP() as ts, name, revenue
Configurer une table incrémentale
Cette section vous explique comment utiliser Dataform Core pour configurer une table incrémentielle.
À propos des tables incrémentales
Dataform met à jour les tables différemment selon leur type. Lors de chaque exécution d'une table ou d'une vue, Dataform régénère l'intégralité de la table ou de la vue à partir de zéro.
Lorsque vous définissez une table incrémentale, Dataform la crée de toutes pièces uniquement la première fois. Lors des exécutions suivantes, Dataform n'insère ou ne fusionne que les nouvelles lignes dans la table incrémentielle en fonction des conditions que vous configurez.
Dataform n'insère de nouvelles lignes que dans les colonnes qui existent déjà dans la table incrémentielle. Si vous modifiez la requête de définition de table incrémentielle (par exemple, en ajoutant une colonne), vous devez reconstruire la table à partir de zéro. Pour ce faire, la prochaine fois que vous déclencherez une exécution de la table, sélectionnez l'option Exécuter avec actualisation complète.
Voici quelques cas d'utilisation courants des tables incrémentielles :
- Optimisation des performances
- Pour certains types de données, comme les journaux Web ou les données analytiques, vous pouvez choisir de ne traiter que les nouveaux enregistrements au lieu de retraiter l'intégralité du tableau.
- Réduction de la latence
- Vous pouvez utiliser des tables incrémentielles pour exécuter des workflows rapidement, mais fréquemment, ce qui réduit la latence en aval des tables de sortie.
- Instantanés quotidiens
- Vous pouvez configurer une table incrémentielle pour créer des instantanés quotidiens des données de la table, par exemple pour l'analyse longitudinale des paramètres utilisateur stockés dans une base de données de production.
Traiter un sous-ensemble de lignes dans une table incrémentielle
Pour déterminer un sous-ensemble de lignes que Dataform doit traiter à chaque exécution, ajoutez une clause conditionnelle WHERE
au fichier de définition SQLX de la table incrémentielle. Dans la clause WHERE
, vous pouvez spécifier une condition incrémentielle et une condition non incrémentielle. Dataform applique la condition incrémentielle lors de l'exécution de la table sans actualisation complète, et la condition non incrémentielle lors de l'exécution avec actualisation complète.
Pour configurer une table incrémentielle, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Ouvrez un fichier SQLX de définition de table incrémentielle.
Saisissez une clause
WHERE
au format suivant :config { type: "incremental" } SELECT_STATEMENT ${when(incremental(), `WHERE INCREMENTAL_CONDITION`, `WHERE NON_INCREMENTAL_CONDITION`) }
Remplacez les éléments suivants :
- SELECT_STATEMENT : instruction
SELECT
qui définit votre table. - INCREMENTAL_CONDITION : condition que vous spécifiez dans la clause
WHERE
pour sélectionner les lignes que Dataform doit traiter lors de l'exécution de la table sans actualisation complète. - NON_INCREMENTAL_CONDITION : condition que vous spécifiez dans la clause
WHERE
pour sélectionner les lignes que Dataform doit traiter lors de l'exécution de la table avec une actualisation complète.
- SELECT_STATEMENT : instruction
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre un tableau incrémentiel qui traite de manière incrémentielle les lignes de la table productiondb.logs
:
config { type: "incremental" }
SELECT timestamp, message FROM ${ref("productiondb", "logs")}
${when(incremental(),
`WHERE date > (SELECT MAX(date) FROM ${self()}) AND country = "UK"`,
`WHERE country = "UK"`)}
L'exemple de code suivant montre une table incrémentielle qui crée un instantané de la table productiondb.customers
:
config { type: "incremental" }
SELECT CURRENT_DATE() AS snapshot_date, customer_id, name, account_settings FROM ${ref("productiondb", "customers")}
${when(incremental(), `WHERE snapshot_date > (SELECT MAX(snapshot_date) FROM ${self()})`) }
Fusionner des lignes dans un tableau incrémentiel
Pour vérifier qu'une table incrémentielle ne contient qu'une seule ligne correspondant à une combinaison de colonnes sélectionnée, définissez les colonnes sélectionnées sur uniqueKey
afin de fusionner les lignes qui ont la même valeur uniqueKey
. Lorsque vous mettez à jour la table, Dataform fusionne les lignes ayant la même valeur uniqueKey
au lieu de les ajouter.
Pour configurer la fusion dans une table incrémentielle, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Sélectionnez un fichier SQLX de définition de table incrémentielle.
Dans le bloc
config
, définissez les colonnes sélectionnées suruniqueKey
au format suivant :uniqueKey: ["COLUMN_NAME"]
Remplacez COLUMN_NAME par le nom d'une colonne sélectionnée.
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une table incrémentielle avec la colonne transaction_id
définie sur uniqueKey
pour vérifier qu'elle contient toujours une ligne :
config {
type: "incremental",
uniqueKey: ["transaction_id"]
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Filtrer des lignes dans un tableau incrémentiel
Dans une table partitionnée incrémentielle, pour éviter que Dataform n'analyse l'intégralité de la table afin de trouver les lignes correspondantes, définissez updatePartitionFilter
pour ne prendre en compte qu'un sous-ensemble d'enregistrements.
L'exemple de code suivant montre une table partitionnée incrémentielle avec la fusion configurée en définissant les propriétés uniqueKey
et updatePartitionFilter
:
config {
type: "incremental",
uniqueKey: ["transaction_id"],
bigquery: {
partitionBy: "DATE(timestamp)",
updatePartitionFilter:
"timestamp >= timestamp_sub(current_timestamp(), interval 24 hour)"
}
}
SELECT timestamp, action FROM weblogs.user_actions
${ when(incremental(), `WHERE timestamp > (SELECT MAX(timestamp) FROM ${self()})`) }
Éviter les analyses complètes de table lors de l'ingestion à partir d'une table partitionnée
Lorsque vous créez une table incrémentielle qui fait référence à une table partitionnée, nous vous recommandons de créer la requête de votre table de manière à éviter les analyses complètes de la table partitionnée lors de chaque mise à jour incrémentielle.
Vous pouvez limiter le nombre de partitions analysées par BigQuery pour mettre à jour la table incrémentielle en utilisant une expression constante dans la requête de votre table. Pour transformer une valeur de la table partitionnée en expression constante, utilisez le scripting BigQuery pour déclarer la valeur en tant que variable dans le bloc pre_operations
. Ensuite, utilisez la variable comme expression constante dans une clause WHERE
d'une requête SELECT
.
Avec cette configuration, Dataform met à jour la table incrémentielle en fonction des partitions les plus récentes de la table partitionnée référencée, sans analyser l'intégralité de la table.
Pour configurer une table incrémentielle qui référence une table partitionnée et évite les analyses complètes de la table, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Sélectionnez un fichier SQLX de définition de table incrémentielle.
- Dans le bloc
pre_operations
, déclarez une variable avec le scripting BigQuery. - Filtrez l'instruction
SELECT
qui définit la table avec une clauseWHERE
qui fait référence à la variable déclarée. - Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une table incrémentielle dans laquelle la table raw_events
référencée est partitionnée par event_timestamp
:
config {
type: "incremental",
}
pre_operations {
DECLARE event_timestamp_checkpoint DEFAULT (
${when(incremental(),
`SELECT max(event_timestamp) FROM ${self()}`,
`SELECT timestamp("2000-01-01")`)}
)
}
SELECT
*
FROM
${ref("raw_events")}
WHERE event_timestamp > event_timestamp_checkpoint
Dans l'exemple de code précédent, la variable event_timestamp_checkpoint
est définie dans le bloc pre_operations
. La variable event_timestamp_checkpoint
est ensuite utilisée comme expression constante dans la clause WHERE
.
Recréer une table incrémentale à partir de zéro avec une actualisation complète
Vous pouvez forcer la reconstruction complète d'une table incrémentielle à l'aide de l'interface de ligne de commande avec l'option --full-refresh
ou de l'option Exécuter avec actualisation complète lorsque vous déclenchez l'exécution d'un workflow.
Lorsque vous sélectionnez l'option d'actualisation complète dans votre espace de travail de développement ou à l'aide de la CLI Dataform, Dataform ignore le paramètre ${when(incremental(), ... }
lors de l'exécution et recrée la table avec une instruction CREATE OR REPLACE
.
Protéger une table incrémentale contre l'actualisation complète
Pour éviter qu'une table incrémentielle ne soit reconstruite de zéro et qu'il y ait une perte de données potentielle, vous pouvez la définir comme protected
. Vous pouvez empêcher la reconstruction d'une table incrémentielle si votre source de données est temporaire.
Pour marquer une table incrémentielle comme protected
:
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Sélectionnez un fichier SQLX de définition de table incrémentielle.
- Dans le bloc
config
, saisissezprotected: true
. - Facultatif : Cliquez sur Format.
L'exemple de code suivant montre un tableau incrémentiel marqué comme protected
:
config {
type: "incremental",
protected: true
}
SELECT ...
Ajouter une documentation de table
Cette section vous explique comment ajouter des descriptions d'une table, de ses colonnes et de ses enregistrements à un fichier SQLX Dataform Core.
Vous pouvez ajouter des descriptions de tables, de colonnes et d'enregistrements à tous les types de tables dans Dataform : tables, tables incrémentielles et vues.
Vous pouvez documenter les éléments suivants :
- Objectif de la table.
- Contenu ou rôle des colonnes ou des enregistrements dans le tableau.
- Relation entre la table et les autres actions de votre workflow, par exemple les tables ou les vues qui dépendent de la table actuelle.
- Assertions appliquées au tableau.
- Pré-opérations ou post-opérations appliquées à la table.
- Propriétaire de la table (utilisateur qui l'a créée). Ces informations peuvent être utiles si plusieurs membres de l'équipe travaillent sur un workflow.
Ajouter une description de tableau
Pour ajouter une description à une table dans un fichier SQLX, procédez comme suit :
Dans la console Google Cloud , accédez à la page Dataform.
Sélectionnez un dépôt.
Sélectionnez un espace de travail de développement.
Dans le volet Fichiers, cliquez sur le fichier SQLX de définition de table que vous souhaitez modifier.
Dans le bloc
config
du fichier, saisissez la description de la table au format suivant :description: "Description of the table",
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre une description de table ajoutée au bloc config
d'un fichier de définition de table SQLX :
config {
type: "table",
description: "Description of the table",
}
Ajouter des descriptions de colonnes et d'enregistrements
Pour ajouter des descriptions de colonnes et d'enregistrements individuels à un fichier SQLX, procédez comme suit :
- Dans le bloc
config
de votre fichier de définition de table, saisissezcolumns: {}
. Dans
columns: {}
, saisissez les descriptions de colonnes au format suivant :column_name: "Description of the column",
Dans
columns: {}
, saisissez les descriptions des enregistrements au format suivant :record_name: { description: "Description of the record", columns: { record_column_name: "Description of the record column" } }
Facultatif : Cliquez sur Format.
L'exemple de code suivant montre les descriptions de tables, de colonnes et d'enregistrements dans le bloc config
d'un fichier de définition de table SQLX :
config {
type: "table",
description: "Description of the table.",
columns: {
column1_name: "Description of the first column",
column2_name: "Description of the second column",
column3_name: "Description of the third column",
record_name: {
description: "Description of the record.",
columns: {
record_column1_name: "Description of the first record column",
record_column2_name: "Description of the second record column",
}
}
}
}
SELECT
"first_column_value" AS column_1_name,
"second_column_value" AS column_2_name,
"third_column_value" AS column_3_name,
STRUCT("first" AS record_column1_name,
"second" AS record_column2_name) AS record_name
Réutiliser la documentation des colonnes avec des inclusions
Vous pouvez réutiliser les descriptions de colonnes dans Dataform dans votre workflow SQL avec les inclusions JavaScript. Vous pouvez réutiliser la documentation des colonnes si vous avez plusieurs colonnes avec le même nom et la même description dans votre workflow SQL.
- Pour créer une description de colonne réutilisable, définissez une constante d'inclusion JavaScript avec le nom de la colonne et sa description.
Vous pouvez définir une constante avec la description d'une seule colonne, ou une constante avec une description d'ensemble ou de colonne pour réutiliser les descriptions de toutes les colonnes d'un tableau. Pour en savoir plus sur la création et l'utilisation d'inclusions dans Dataform, consultez Réutiliser du code dans un même dépôt avec des inclusions.
L'exemple de code suivant montre plusieurs constantes avec des descriptions de colonnes individuelles définies dans le fichier JavaScript includes/docs.js
:
// filename is includes/docs.js
const user_id = `A unique identifier for a user`;
const age = `The age of a user`;
const creation_date = `The date this user signed up`;
const user_tenure = `The number of years since the user's creation date`;
const badge_count = `The all-time number of badges the user has received`;
const questions_and_answer_count = `The all-time number of questions and answers the user has created`;
const question_count = `The all-time number of questions the user has created`;
const answer_count = `The all-time number of answers the user has created`;
const last_badge_received_at = `The time the user received their most recent badge`;
const last_posted_at = `The time the user last posted a question or answer`;
const last_question_posted_at = `The time the user last posted an answer`;
const last_answer_posted_at = `The time the user last posted a question`;
module.exports = {
user_id,
age,
creation_date,
user_tenure,
badge_count,
questions_and_answer_count,
question_count,
answer_count,
last_badge_received_at,
last_posted_at,
last_question_posted_at,
last_answer_posted_at,
};
L'exemple de code suivant montre les constantes user_id
et age
, définies dans includes/docs.js
, utilisées dans le fichier de définition de table SQLX definitions/my_table.sqlx
pour générer la documentation des colonnes sélectionnées dans la table :
config {
type: "table",
description: "Table description.",
columns: {
user_id: docs.user_id,
column2_name: "Description of the second column",
column3_name: "Description of the third column",
age: docs.age,
}
}
SELECT ...
L'exemple de code suivant montre une constante avec un ensemble de descriptions de colonnes définies dans le fichier JavaScript includes/docs.js
:
// filename is includes/docs.js
const columns = {
user_id = `A unique identifier for a user`,
age = `The age of a user`,
creation_date = `The date this user signed up`,
user_tenure = `The number of years since the user's creation date`,
badge_count = `The all-time number of badges the user has received`,
questions_and_answer_count = `The all-time number of questions and answers the user has created`,
question_count = `The all-time number of questions the user has created`,
answer_count = `The all-time number of answers the user has created`,
last_badge_received_at = `The time the user received their most recent badge`,
last_posted_at = `The time the user last posted a question or answer`,
last_question_posted_at = `The time the user last posted an answer`,
last_answer_posted_at = `The time the user last posted a question`,
}
module.exports = {
columns
};
L'exemple de code suivant montre la constante columns
, qui est définie dans includes/table_docs.js
et utilisée dans le fichier de définition de table SQLX definitions/my_table.sqlx
pour générer la documentation de toutes les colonnes de la table :
config { type: "table",
description: "My table description",
columns: docs.columns
}
SELECT 1 AS one
Ajouter des libellés BigQuery
Cette section vous explique comment ajouter des libellés aux tables dans Dataform.
BigQuery permet d'ajouter des libellés aux ressources. Pour en savoir plus sur les libellés dans BigQuery, consultez Présentation des libellés.
Pour ajouter un libellé BigQuery à une table dans Dataform, ajoutez-le au bloc bigquery
dans le bloc config
du fichier SQLX de définition de table.
Pour ajouter un libellé BigQuery à un fichier de définition de table, procédez comme suit :
- Accédez à votre espace de travail de développement.
- Dans le volet Fichiers, développez
definitions/
. - Sélectionnez un fichier de définition de table SQLX.
Dans le bloc
config
, ajoutez un libellé au format suivant :bigquery: { labels: { LABEL1: "VALUE_OF_LABEL1" } }
Remplacez les éléments suivants :
- LABEL1 : nom de votre libellé
- VALUE_OF_LABEL1 : valeur de votre libellé
Facultatif : Pour ajouter un libellé dont le nom contient des caractères spéciaux, saisissez-le entre guillemets (
""
).Facultatif : Cliquez sur Format.
L'exemple de code suivant montre les libellés department:shipping
et cost-center:logistics
ajoutés au bloc bigquery
dans un fichier SQLX de définition de table partitionnée :
config {
type: "table",
bigquery: {
partitionBy: "DATE(ts)",
labels: {
department: "shipping",
"cost-center": "logistics"
}
}
}
SELECT CURRENT_TIMESTAMP() AS ts
Étapes suivantes
- Pour savoir comment tester les données de table avec des assertions, consultez Tester la qualité des données.
- Pour savoir comment définir des tables avec JavaScript, consultez Créer des workflows exclusivement avec JavaScript.
- Pour savoir comment réutiliser du code avec des inclusions, consultez Réutiliser du code dans un même dépôt avec des inclusions.
- Pour savoir comment utiliser l'interface de ligne de commande Dataform, consultez Utiliser la CLI Dataform.