Utilisation
view: my_view {
derived_table: {
increment_key: "created_date"
...
}
}
|
Hiérarchie
increment_key- ou - increment_key |
Valeur par défaut
Aucun
Acceptation
Nom d'une dimension LookML basée sur le temps
Règles spéciales
increment_key n'est compatible qu'avec les tables persistantes et uniquement pour certains dialectes.
|
Définition
Vous pouvez créer des tables PDT incrémentielles dans votre projet si votre dialecte les prend en charge. Une augmentation de table PDT est une table dérivée persistante (PDT) créée par Looker en ajoutant des données à jour à la table, au lieu de régénérer la totalité de la table. Pour en savoir plus, consultez la page de documentation sur les PDT incrémentales.
increment_key est le paramètre qui transforme une PDT en PDT incrémentale en spécifiant l'incrément de temps pour lequel de nouvelles données doivent être interrogées et ajoutées à la PDT. En plus de increment_key, vous pouvez éventuellement fournir un increment_offset pour spécifier le nombre de périodes précédentes (selon la granularité de la clé d'incrémentation) qui sont régénérées pour tenir compte des données tardives.
Le
increment_keyd'une PDT est indépendant du déclencheur de persistance de la PDT. Consultez la page de documentation sur les PDT incrémentales pour obtenir des exemples de scénarios illustrant l'interaction deincrement_key,increment_offsetet de la stratégie de persistance.Le paramètre
increment_keyne fonctionne qu'avec les dialectes compatibles et uniquement avec les tables qui ont une stratégie de persistance, comme les tables PDT et les tables agrégées (qui sont un type de table PDT).
increment_key doit spécifier une dimension LookML basée sur le temps :
- Pour les PDT basées sur LookML, le
increment_keydoit être basé sur une dimension LookML définie dans la vue sur laquelle est basé leexplore_sourcede la PDT. Pour obtenir un exemple, consultez la section Créer une PDT incrémentale basée sur LookML sur cette page. - Pour les tables agrégées, le
increment_keydoit être basé sur une dimension LookML définie dans la vue sur laquelle repose l'exploration de la table agrégée. Pour obtenir un exemple, consultez la section Créer une table agrégée incrémentielle sur cette page. - Pour les tables PDT basées sur SQL, le
increment_keydoit être basé sur une dimension LookML définie dans le fichier de vue de la PDT. Pour obtenir un exemple, consultez la section Créer une PDT incrémentale basée sur SQL sur cette page.
En outre, increment_key doit être :
- Une heure absolue tronquée, comme le jour, le mois, l'année, le trimestre fiscal, etc. Les périodes telles que le jour de la semaine ne sont pas acceptées.
- Un code temporel qui augmente de manière prévisible avec les nouvelles données, comme la date de création de la commande. En d'autres termes, un code temporel ne doit être utilisé comme clé d'incrément que si les données les plus récentes ajoutées à la table ont également le code temporel le plus récent. Un code temporel tel que la date de naissance de l'utilisateur ne fonctionnerait pas comme clé d'incrément, car il n'augmente pas de manière fiable lorsque de nouveaux utilisateurs sont ajoutés à la table.
Créer une PDT incrémentale basée sur LookML
Pour transformer une PDT basée sur LookML (native) en PDT incrémentielle, utilisez le paramètre increment_key pour spécifier le nom d'une dimension LookML basée sur le temps. La dimension doit être définie dans la vue sur laquelle est basé le explore_source du PDT.
Par exemple, voici un fichier de vue pour une table PDT basée sur LookML, à l'aide du paramètre LookML explore_source. La PDT est créée à partir de l'exploration flights, qui dans ce cas est basée sur la vue flights :
view: flights_lookml_incremental_pdt {
derived_table: {
indexes: ["id"]
increment_key: "departure_date"
increment_offset: 3
datagroup_trigger: flights_default_datagroup
distribution_style: all
explore_source: flights {
column: id {}
column: carrier {}
column: departure_date {}
}
}
dimension: id {
type: number
}
dimension: carrier {
type: string
}
dimension: departure_date {
type: date
}
}
Cette table sera générée intégralement lorsque la première requête sera exécutée sur elle. Après cela, la PDT sera régénérée en augmentations d'une journée (increment_key: departure_date), en remontant trois jours en arrière (increment_offset: 3).
La dimension departure_date correspond en fait à la période de la dimension departure.date (Pour en savoir plus sur le fonctionnement des groupes de dimensions, consultez la page de documentation sur le paramètre dimension_group.) Le groupe de dimensions et la période sont tous deux définis par la vue flights, qui est la explore_source de cette PDT. Voici comment le groupe de dimensions departure est défini dans le fichier d'affichage flights :
...
dimension_group: departure {
type: time
timeframes: [
raw,
date,
week,
month,
year
]
sql: ${TABLE}.dep_time ;;
}
...
Créer une PDT incrémentielle basée sur SQL
Looker vous recommande d'utiliser des tables dérivées basées sur LookML (natives) comme base pour les PDT incrémentielles, plutôt que des tables dérivées basées sur SQL. Les tables dérivées natives gèrent de manière inhérente la logique complexe requise pour les PDT incrémentielles. Les PDT basées sur SQL reposent sur une logique créée manuellement, qui est sujette aux erreurs lorsqu'elle est utilisée avec des fonctionnalités très complexes.
Pour définir une table PDT basée sur SQL incrémentielle, utilisez increment_key et (facultativement) increment_offset comme vous le feriez avec une table PDT basée sur LookML. Toutefois, comme les tables PDT basées sur SQL ne sont pas basées sur des fichiers de vue LookML, des exigences supplémentaires s'appliquent pour transformer une table PDT basée sur SQL en table PDT incrémentielle :
- Vous devez baser la clé d'incrément sur une dimension LookML basée sur le temps que vous définissez dans le fichier de vue de la PDT.
- Vous devez fournir un filtre Liquid
dans le PDT pour connecter la clé d'incrément à la colonne horaire de la base de données sur laquelle la clé d'incrément est basée. Le filtre{% incrementcondition %} doit spécifier le nom de la colonne dans votre base de données, et non un alias SQL ni le nom d'une dimension basée sur la colonne (voir l'exemple suivant).{% incrementcondition %}
Le format de base du filtre Liquid est le suivant :
WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}
Par exemple, voici le fichier de vue pour une PDT basée sur SQL qui est reconstruite par incréments d'un jour (increment_key: "dep_date"), où les données des trois derniers jours seront ajoutées à la table lors de sa reconstruction (increment_offset: 3) :
view: sql_based_incremental_date_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "dep_date"
increment_offset: 3
distribution_style: all
sql: SELECT
flights.id2 AS "id",
flights.origin AS "origin",
DATE(flights.leaving_time ) AS "departure"
FROM public.flights AS flights
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
;;
}
dimension_group: dep {
type: time
timeframes: [date, week, month, year]
datatype: date
sql: ${TABLE}.departure
;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
Notez les points suivants concernant cet exemple :
- La table dérivée est basée sur une instruction SQL. L'instruction SQL crée une colonne dans la table dérivée, basée sur la colonne
flights.leaving_timede la base de données. L'aliasdepartureest attribué à la colonne. - Le fichier de vue de la PDT définit un groupe de dimensions appelé
dep.- Le paramètre
sqldu groupe de dimensions indique que le groupe de dimensions est basé sur la colonnedeparturedu tableau dérivé. - Le paramètre
timeframesdu groupe de dimensions inclutdatecomme période.
- Le paramètre
- Le
increment_keyde la table dérivée utilise la dimensiondep_date, qui est une dimension basée sur la périodedatedu groupe de dimensionsdep. (Pour en savoir plus sur le fonctionnement des groupes de dimensions, consultez la page de documentation sur le paramètredimension_group.) - Le filtre Liquid
est utilisé pour connecter la clé d'incrément à la colonne{% incrementcondition %}flights.leaving_timede la base de données. doit spécifier le nom d'une colonne{% incrementcondition %}TIMESTAMPde votre base de données (ou doit correspondre à une colonneTIMESTAMPde votre base de données).- L'
doit être évalué par rapport à ce qui est disponible dans la clause{% incrementcondition %}FROMqui définit votre PDT, comme les colonnes de la table spécifiée dans la clauseFROM. ne peut pas faire référence au résultat de l'instruction{% incrementcondition %}SELECT, comme un alias qui a été attribué à une colonne dans l'instruction SQL ou le nom d'une dimension basée sur la colonne. Dans cet exemple, est{% incrementcondition %}flights.leaving_time. Étant donné que la clauseFROMspécifie la tableflights, peut faire référence aux colonnes de la table{% incrementcondition %}flights. - Le
doit pointer vers la même colonne de base de données que celle utilisée pour la clé d'incrément. Dans cet exemple, la clé d'incrément est{% incrementcondition %}dep_date, une dimension définie par la colonnedeparturedans le PDT, qui est un alias de la colonneflights.leaving_timedans la base de données. Le filtre pointe donc versflights.leaving_time:
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
Vous pouvez ajouter des éléments à la clause WHERE pour créer d'autres filtres. Par exemple, si la table de base de données remonte à de nombreuses années, vous pouvez créer un filtre pour que la création initiale de la PDT n'utilise que les données postérieures à une certaine date. Ce WHERE crée un PDT avec des données postérieures au 1er janvier 2020 :
WHERE {% incrementcondition %} flights.leaving_time {% endincrementcondition %}
AND flights.leaving_time > '2020-01-01'
Vous pouvez également utiliser la clause WHERE pour analyser les données dans SQL et les convertir en code temporel, puis leur attribuer un alias. Par exemple, la PDT incrémentielle suivante utilise un incrément de 15 minutes basé sur text_column, qui correspond à des données de chaîne analysées en données d'horodatage :
view: sql_based_incremental_15min_pdt {
derived_table: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_minute15"
increment_offset: 1
sql: SELECT PARSE_TIMESTAMP("%c", flights.text_column) as parsed_timestamp_column,
flights.id2 AS "id",
flights.origin AS "origin",
FROM public.flights AS flights
WHERE {% incrementcondition %} PARSE_TIMESTAMP("%c", flights.text_column)
{% endincrementcondition %} ;;
}
dimension_group: event {
type: time
timeframes: [raw, minute15, hour, date, week, month, year]
datatype: timestamp
sql: ${TABLE}.parsed_timestamp_column ;;
}
dimension: id {
type: number
}
dimension: origin {
type: string
}
}
Vous pouvez utiliser l'alias pour le SQL dans la définition du groupe de dimensions sql, mais vous devez utiliser l'expression SQL dans la clause WHERE. Ensuite, comme minute15 a été configuré comme période dans le groupe de dimensions event, vous pouvez utiliser event_minute15 comme clé d'incrément pour obtenir un incrément de 15 minutes pour la PDT.
Créer une table agrégée incrémentale
Pour créer un tableau agrégé incrémentiel, ajoutez increment_key et (facultativement) increment_offset sous le paramètre materialization du paramètre aggregate_table. Utilisez le paramètre increment_key pour spécifier le nom d'une dimension LookML basée sur le temps. La dimension doit être définie dans la vue sur laquelle repose l'exploration de la table agrégée.
Par exemple, cette table agrégée est basée sur l'exploration accidents, qui est basée sur la vue accidents dans ce cas. La table agrégée est reconstruite par incréments d'une semaine (increment_key: event_week), sur deux semaines (increment_offset: 2) :
explore: accidents {
. . .
aggregate_table: accidents_daily {
query: {
dimensions: [event_date, id, weather_condition]
measures: [count]
}
materialization: {
datagroup_trigger: flights_default_datagroup
increment_key: "event_week"
increment_offset: 2
}
}
}
La clé d'incrément utilise la dimension event_week, qui est basée sur la période week du groupe de dimensions event. (Pour en savoir plus sur le fonctionnement des groupes de dimensions, consultez la page de documentation sur le paramètre dimension_group.) Le groupe de dimensions et la période sont tous deux définis dans la vue accidents :
. . .
view: accidents {
. . .
dimension_group: event {
type: time
timeframes: [
raw,
date,
week,
year
]
sql: ${TABLE}.event_date ;;
}
. . .
}
Éléments à prendre en compte
Optimiser la table source pour les requêtes temporelles
Assurez-vous que la table source de l'augmentation de table PDT est optimisée pour les requêtes temporelles. Plus précisément, la colonne basée sur le temps utilisée pour la clé d'incrément doit avoir une stratégie d'optimisation, telle que partitionnement, sortkeys, indexes ou toute autre stratégie d'optimisation compatible avec votre dialecte. L'optimisation de la table source est fortement recommandée car, à chaque mise à jour de l'augmentation de table, Looker demande à la table source de déterminer les dernières valeurs de la colonne temporelle utilisée pour la clé d'incrémentation. Si la table source n'est pas optimisée pour ces requêtes, la requête des dernières valeurs par Looker peut être lente et coûteuse.
Dialectes de base de données pris en charge pour les augmentations de tables PDT
Pour que Looker prenne en charge les PDT incrémentielles dans votre projet Looker, votre dialecte de base de données doit prendre en charge les commandes du langage de définition de données (LDD) qui permettent de supprimer et d'insérer des lignes.
Le tableau suivant répertorie les dialectes prenant en charge les tables PDT incrémentielles dans la dernière version de Looker :
| Dialecte | Compatibilité |
|---|---|
| Actian Avalanche | |
| Amazon Athena | |
| Amazon Aurora MySQL | |
| Amazon Redshift | |
| Amazon Redshift 2.1+ | |
| Amazon Redshift Serverless 2.1+ | |
| Apache Druid | |
| Apache Druid 0.13+ | |
| Apache Druid 0.18+ | |
| Apache Hive 2.3+ | |
| Apache Hive 3.1.2+ | |
| Apache Spark 3+ | |
| ClickHouse | |
| Cloudera Impala 3.1+ | |
| Cloudera Impala 3.1+ with Native Driver | |
| Cloudera Impala with Native Driver | |
| DataVirtuality | |
| Databricks | |
| Denodo 7 | |
| Denodo 8 & 9 | |
| Dremio | |
| Dremio 11+ | |
| Exasol | |
| Google BigQuery Legacy SQL | |
| Google BigQuery Standard SQL | |
| Google Cloud PostgreSQL | |
| Google Cloud SQL | |
| Google Spanner | |
| Greenplum | |
| HyperSQL | |
| IBM Netezza | |
| MariaDB | |
| Microsoft Azure PostgreSQL | |
| Microsoft Azure SQL Database | |
| Microsoft Azure Synapse Analytics | |
| Microsoft SQL Server 2008+ | |
| Microsoft SQL Server 2012+ | |
| Microsoft SQL Server 2016 | |
| Microsoft SQL Server 2017+ | |
| MongoBI | |
| MySQL | |
| MySQL 8.0.12+ | |
| Oracle | |
| Oracle ADWC | |
| PostgreSQL 9.5+ | |
| PostgreSQL pre-9.5 | |
| PrestoDB | |
| PrestoSQL | |
| SAP HANA | |
| SAP HANA 2+ | |
| SingleStore | |
| SingleStore 7+ | |
| Snowflake | |
| Teradata | |
| Trino | |
| Vector | |
| Vertica |