当前位置:网站首页>Comment utiliser l'entrepôt de données pour créer une table de synchronisation

Comment utiliser l'entrepôt de données pour créer une table de synchronisation

2022-06-23 23:57:00 Huawei Cloud Developer Alliance

Résumé:Comment le faire rapidement?,Créer un calendrier approprié pour votre entreprise,Comment utiliser le tableau des séries chronologiques pour vraiment tirer parti des avantages.

Cet article est partagé par Huawei Cloud Community《GaussDB(DWS)Pour vous rapprocherIoTLe temps-Pratiques exemplaires en matière de construction de tableaux chronologiques》,Auteur:AndyCao.

Créer la première table de synchronisation

Commençons par une introduction à la création d'un calendrier

Format syntaxique

CREATE TABLE [ IF NOT EXISTS ] table_name
({ column_name data_type [ kv_type ] 
    | LIKE source_table [like_option [...] ] }
}
    [, ... ])
[ WITH ( {storage_parameter = value}  [, ... ] ) ]

[ TABLESPACE tablespace_name ]
[ DISTRIBUTE BY  HASH ( column_name [,...])]
[ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
[ table_partitioning_clauses ]
[ PARTITION BY { 
        {RANGE (partition_key) ( partition_less_than_item [, ... ] )} 
 } [ { ENABLE | DISABLE } ROW MOVEMENT ] ]; 

Parmi euxlikeOptionslike_optionPour:{ INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL }

Syntaxe de création de tableaux pour les tableaux de séries chronologiques , Hérite largement de la syntaxe de la ligne et de la colonne , Réduction des coûts d'apprentissage pour les utilisateurs , Plus facile à comprendre et à utiliser . Dans notre dernier blog, , Diviser les colonnes du tableau des séries chronologiques en trois types kv_typeType(tag、field、time), Comment spécifier la colonne correspondante comme type approprié , Aide - nous à améliorer l'importation 、 Performance des scénarios tels que les requêtes , Rendre le scénario opérationnel plus efficace ?

Nous continuons avec le scénario du groupe électrogène comme exemple , Créer un calendrier pour stocker les données d'échantillonnage du groupe électrogène :

CREATE TABLE IF NOT EXISTS GENERATOR(
dynamo text TSTag,
manufacturer text TSTag,
model text TSTag,
location text TSTag,
ID bigint TSTag,
voltage numeric TSField,
power bigint TSTag,
frequency numeric TSField,
angle numeric TSField,
time timestamptz TSTime) with (orientation=TIMESERIES, period='7 days', ttl='1 month') distribute by hash(model);

Nous pouvons voir, Dans l'énoncé ci - dessus :

  • Pour ne pas changer avec le temps , Colonne décrivant les informations de propriété du générateur ( Informations sur le générateur 、Fabricant、Modèle、Emplacement、ID)Est réglé àtagColonnes, La colonne correspondante doit être spécifiée comme suit lors de la construction du tableau: TSTag;
  • Dimensions des données échantillonnées (Tension、Puissance、Fréquence、 Angle de phase actuel ) Ces valeurs d'échantillonnage correspondantes varient avec le temps , Nous définissons ces dimensions à fieldColonnes, Le type de données de l'instruction de création de table est spécifié comme suit: TSField;
  • La dernière colonne que nous avons spécifiée comme la colonne temps time,Stockagefield Informations sur le temps correspondant aux données de colonne , La table sera spécifiée comme TSTime.

Lors de l'écriture d'une déclaration de création de table ,PourtagOrdre des colonnes, Nous pouvons optimiser , Sera unique (distinctValeur) Les colonnes les plus élevées doivent être précédées autant que possible. , Cela améliore la performance des scénarios séquentiels . Si l'utilisateur n'a pas optimisé manuellement ,GaussDB(DWS) IoT L'entrepôt de données peut également aider l'utilisateur à améliorer la performance du scénario séquentiel de façon adaptative , Plus tard, nous allons consacrer un article à ce sujet. Technologie noire.

En plus, Assurez - vous de spécifier les paramètres au niveau de la table lors de la création de la table de synchronisation orientationLa propriété est définie àtimeseries. Le calendrier n'a pas besoin d'être spécifié manuellement DISTRIBUTE BYEtPARTITION BY, Par défaut, tous les tagRépartition des colonnes, Et la partition est silencieuse tstim Colonne de temps spécifiée .

Pourcreate table likeSyntaxe, Cette syntaxe exige que les noms de colonnes et les correspondances soient automatiquement hérités de la table source kv_typeType. Donc si le tableau source n'est pas un tableau chronologique , Le nouveau tableau est un tableau chronologique , Colonne correspondante kv_type Le type n'a pas pu être déterminé ,Impossible de créer avec succès.

Type de colonne du tableau chronologique

Les trois séries chronologiques ci - dessus kv_type Les attributs sont décrits brièvement :(Attributs de dimension(TSTag), Propriétés de l'indicateur (TSField),Propriétés temporelles(TSTime), Chaque colonne supporte les types ( Comme dans une déclaration de création de table text、int、numericAttendez.) Quelle est la différence? ? Pouvez - vous ne pas définir kv_typeType?

La table de synchronisation doit d'abord spécifier un attribut de temps (TSTime), Et un seul peut être spécifié ,EtTSTime La colonne de type ne peut pas être supprimée .Il y a au moins unTSTagEtTSFieldColonnes, Sinon, le rapport de construction est erroné .

TSTag Type de support de colonne :text, char, bool, int, big int.

TSTime Type de support de colonne :timestamp with time zone, timestamp without time zone.CompatibleOracle Dans la base de données de syntaxe ,- Oui.dateType. En ce qui concerne les opérations liées au fuseau horaire , Veuillez sélectionner un type de temps avec fuseau horaire .

TSField Les types de données supportés par les colonnes sont compatibles avec le tableau des colonnes

Définir automatiquement les limites des zones

Les tableaux de séries chronologiques ont la capacité de gérer le cycle de vie des données . Des centaines de millions de données affluent chaque jour , Pour les données d'il y a longtemps , Il est moins précieux et rarement visité , Les anciennes données inutiles peuvent être supprimées périodiquement . Et parce que les dernières données arrivent, , Besoin d'ajouter périodiquement de nouvelles partitions à la table , Éviter que de nouvelles données ne soient pas stockées . Par conséquent, la table de synchronisation doit avoir la capacité d'ajouter et de supprimer des partitions à temps. .

La chronologie est TSTIME Colonne comme clé de partition , Créer une table de partition avec gestion automatique de partition , Nous aide à réduire considérablement le travail des opérations o & M . Dans l'instruction de création de table ci - dessus , Comme vous pouvez le voir dans les entrées de paramètres au niveau du tableau , Le tableau de synchronisation spécifie deux paramètres pour la gestion automatique des partitions periodEtttl.

  • period: Définir l'intervalle de création automatique des partitions ,La valeur par défaut est1 day, Plage de valeurs:1 hour ~ 100 years. La tâche de partition auto - incrémentale est créée par défaut pour la table de synchronisation . Créer dynamiquement des partitions pour nous , Assurez - vous qu'il y a suffisamment de partitions pour importer des données à ce moment - ci .
  • ttl: Définir l'heure d'élimination automatique des partitions ,Plage de valeurs:1 hour ~ 100 years. Par défaut, aucune tâche de partition obsolète n'est créée , Vous devez spécifier manuellement la table en cours de construction par l'utilisateur , Ou passer après la construction du compteur ALTER TABLEConfiguration syntaxique. La stratégie d'élimination des partitions est basée sur le calcul nowtime - Partitionboundary > ttl, Les partitions qui remplissent cette condition seront dropLaisse tomber.. Aide l'utilisateur à nettoyer périodiquement les anciennes données périmées .

Dans l'exemple ci - dessus, , L'instruction de création de table de la table de séquence ne spécifie pas de partition , Quelle est l'heure de début de la partition? .Pour la commodité de l'utilisateur, Les limites de notre zone sont définies comme suit:

  • periodSet to“Heures” , La valeur limite de départ de la zone est le point entier de l'heure suivante , L'intervalle entre les partitions est periodValeur de
  • periodSet to“Oh, mon Dieu.” , La valeur limite de départ de la zone est zéro le jour suivant , L'intervalle entre les partitions est periodValeur de
  • periodSet to“Mois” , La valeur limite de départ de la partition est zéro le mois prochain , L'intervalle entre les partitions est periodValeur de
  • periodSet to“Année” , La limite de départ de la partition est zéro l'année prochaine , L'intervalle entre les partitions est periodValeur de
tsdb=# CREATE TABLE IF NOT EXISTS GENERATOR(
tsdb(# dynamo text TSTag,
tsdb(# manufacturer text TSTag,
tsdb(# model text TSTag,
tsdb(# location text TSTag,
tsdb(# ID bigint TSTag,
tsdb(# voltage numeric TSField,
tsdb(# power bigint TSTag,
tsdb(# frequency numeric TSField,
tsdb(# angle numeric TSField,
tsdb(# time timestamptz TSTime) with (orientation=TIMESERIES, period='1 hour', ttl='1 month') distribute by hash(model);
CREATE TABLE

tsdb=# select now();
              now
-------------------------------
 2022-05-25 15:28:38.520757+08
(1 row)
tsdb=# select relname, boundaries from pg_partition where parentid=(select oid from pg_class where relname='generator') order by boundaries ;
    relname     |         boundaries
----------------+----------------------------
 default_part_1 | {"2022-05-25 16:00:00+08"}
 default_part_2 | {"2022-05-25 17:00:00+08"}
 p1653505200    | {"2022-05-26 03:00:00+08"}
 p1653541200    | {"2022-05-26 13:00:00+08"}
 p1653577200    | {"2022-05-26 23:00:00+08"}
 ......

Cette façon d'utiliser, Permet aux utilisateurs de créer facilement et rapidement des listes de synchronisation . Bien sûr, nous soutenons également la spécification manuelle par l'utilisateur de la valeur de départ de la limite de partition lors de la construction de la table . Description plus détaillée des fonctions de gestion automatique des partitions ,Peut être référencé《GaussDB(DWS) Introduction à la gestion automatique des partitions 》.

tsdb=# select now();
              now
-------------------------------
 2022-05-31 20:36:09.700096+08
(1 row)

tsdb=# CREATE TABLE IF NOT EXISTS GENERATOR(
tsdb(# dynamo text TSTag,
tsdb(# manufacturer text TSTag,
tsdb(# model text TSTag,
tsdb(# location text TSTag,
tsdb(# ID bigint TSTag,
tsdb(# voltage numeric TSField,
tsdb(# power bigint TSTag,
tsdb(# frequency numeric TSField,
tsdb(# angle numeric TSField,
tsdb(# time timestamptz TSTime) with (orientation=TIMESERIES, period='1 day') distribute by hash(model)
tsdb-# partition by range(time)
tsdb-# (
tsdb(# PARTITION P1 VALUES LESS THAN('2022-05-30 16:32:45'),
tsdb(# PARTITION P2 VALUES LESS THAN('2022-05-31 16:56:12')
tsdb(# );
WARNING:  partition boundary is less than current time.
CREATE TABLE

tsdb=# select relname, boundaries from pg_partition where parentid=(select oid from pg_class where relname='generator') order by boundaries ;
   relname   |         boundaries
-------------+----------------------------
 p1          | {"2022-05-30 16:32:45+08"}
 p2          | {"2022-05-31 16:56:12+08"}
 p1654073772 | {"2022-06-01 16:56:12+08"}
 p1654160172 | {"2022-06-02 16:56:12+08"}
 ......

Jusqu'ici., Nous avons construit notre première chronologie , Ensuite, nous allons cibler le calendrier DDL Pratique détaillée de diverses opérations ,Aidez tout le monde à bien apprendre、 Bonne utilisation de la base de données des séries chronologiques , Un meilleur service aux utilisateurs .

Cliquez sur suivre,Pour la première fois, découvrez la nouvelle technologie Huawei Cloud~

原网站

版权声明
本文为[Huawei Cloud Developer Alliance]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/174/202206232135550958.html