Site icon Blog ARC Optimizer

Tirer parti des vues virtuelles pour l’analyse ad hoc

Tirer parti des vues virtuelles pour l’analyse ad hoc


En raison de leur nature immédiate et pas si définie, des questions ponctuelles et ponctuelles peuvent ressembler à des exercices d’incendie. Pour les analystes, cela signifie moins de temps pour les projets à long terme et la préparation et l’analyse des données qui ne sont pas toujours prêtes pour un outil BI. Pour les ingénieurs de données, cela signifie exposer certaines informations dans les tableaux et les vues aux outils BI afin que les analystes puissent construire des requêtes sur ces tables.

Il n’y a généralement rien de vite dans ces demandes ad hoc. Le processus d’exploration, de prototypage et de validation des données pour répondre à des questions définitivement définies est longue et à forte intensité de ressources. De plus, l’introduction de données non structurées et semi-structurées ajoute une couche de complexité.

Pour réduire la charge dans les équipes de données, les organisations peuvent améliorer la façon dont elles gèrent l’analyse ad hoc. Bien que la promotion de l’alphabétisation des données aide, tous les utilisateurs ne peuvent pas transformer les données brutes en explication. Même avec un large accès aux données, les analystes et les ingénieurs jouent toujours un rôle crucial dans la surface et l’interprétation des informations.

Progress MarkLogic Server 12 a introduit des vues virtuelles Pour aider à générer des cycles de développement plus rapides et à réduire les temps d’attente aux données critiques, tout en optimisant les ressources de votre système.

Construire des vues relationnelles sur des données non structurées

Que vous enregistrez des informations à partir d’une expérience scientifique, résulte d’un test de sécurité ou de transactions d’un système financier, les utilisateurs doivent les consommer d’une manière qui fonctionne pour eux. Les systèmes exposent souvent ces données dans les flux de JSON ou de XML. Bien que ces formats soient parfaits pour la rétention record ou les API, les analystes et les PME sont utilisés pour exécuter des rapports en utilisant des outils BI et des services publics de science des données qui attendent des lignes et des colonnes.

La plate-forme MarkLogic a toujours pris en charge les analystes avec un accès sécurisé aux informations complètes et régies. Les informations pour les rapports et l’analyse sont intégrées à partir de documents non structurés et une lentille relationnelle est appliquée dessus pour la préparer pour les outils d’intelligence basés sur SQL.

Via le serveur MarkLogic Extraction du lecteur de modèle caractéristique, les ingénieurs peuvent Configurez un mappage de ces structures de documents sur des vues contenant des lignes et des colonnes. Cela diffère de ETL (Extract-Transform-wad-wad) car vous ne créez pas de copie de l’enregistrement. Ces données sont projetées dans ces vues de manière cohérente transactionnelle. Vous insérez l’enregistrement une fois et il est disponible sous forme de document (JSON / XML), de recherche de recherche et d’entrée d’affichage. Cela réduit les efforts et doit synchroniser les données entre les systèmes. Il garantit également que toutes vos méthodes de consommation sont cohérentes.

Pour aider à livrer ces points de vue plus rapidement, le Vues virtuelles La fonctionnalité dans MarkLogic Server 12.0 vous permet de générer un TDE à la volée, sans réindexer toutes les données de la base de données.

Vues matérialisées et virtuelles

Avant MarkLogic Server 12.0, toutes les vues définies par TDE ont été matérialisées. Cela crée un index unique dans le système. Bien que les enregistrements soient traités par le système, ces vues seront mises à jour dans le cadre d’une transaction. Ce processus d’indexation garantit que chaque champ défini est extrait et enregistré. Cela permet des analyses robustes en plus de la plate-forme MarkLogic. Cependant, l’utilisation de vues matérialisées ajoute au temps d’indexation ainsi qu’au stockage.

Tous les cas d’utilisation ne nécessitent pas un modèle d’index aussi optimisé. La fonction Virtual Views exploite l’index universel MarkLogic. Dans le cadre de notre traitement des enregistrements, la structure et le contenu sont indexés pour la recherche. Cela nous permet de créer des applications riches et robustes d’utilisateurs finaux à l’aide de la grammaire de recherche et des agrégations à facettes. Comme les bases de données relationnelles traditionnelles, vous pouvez exécuter des requêtes sur ces vues et activer un index matérialisé si vous en avez besoin. Cela rend votre empreinte de base de données plus petite et permet une requête ad hoc plus flexible pour les charges de travail analytiques.

La configuration

Voyons les TDE virtuels en action. Vous aurez d’abord besoin de Installer MarkLogic Server 12.0. Suivez les instructions de configuration et créez un utilisateur à des fins de démonstration.

Nous utiliserons Flux marklogique Pour charger des exemples de données dans la base de données des documents par défaut. La commande suivante prendra un ensemble JSON agrégé et le chargera sous forme de documents dans la base de données. Vous pouvez également charger des données à partir de divers formats.

./bin/flux import-aggregate-json-files \
    --json-lines \
    --path viscosity.json \
    --connection-string "user:password@localhost:8000" \
    --permissions rest-reader,read,rest-writer,update \
    --collections http://example.com/tests/viscosity \
    --uri-template "/data/viscosity/{sample_guid}.json"

Vérifiez que les documents ont été chargés en se connectant au Console de requête Marklogic et cliquer explorer sur la base de données des documents. Vous pouvez également exécuter une requête de recherche pour voir que les enregistrements sont en cours dans le système.

'use strict';

const op = require('/MarkLogic/optic');

op.fromSearchDocs(cts.collectionQuery('http://example.com/tests/viscosity))
  .offsetLimit(0, 10)
  .result(); 

Définition des vues

Nous allons maintenant définir notre modèle contre les données que nous aimerions nous projeter dans les vues. Remarque Nous pouvons configurer le modèle pour rendre toutes les données matérialisées ou virtuelles au niveau supérieur. Ou nous pouvons spécifier des champs individuels pour se matérialiser pour une analyse et un tri plus efficaces.

La première étape consiste à revoir la forme de vos données et à déterminer quels champs nous extraire. Nous avons généré des tests d’expérience en laboratoire d’échantillons. Ce document contient des métadonnées et des mesures de haut niveau tout au long du test.

{
    "sample_guid": "12b95849-f5b7-4398-9ab7-347f9f6d2b84",
    "sample_number": 4,
    "chemical_name": "chemical B",
    "test_date": "2024-10-17T11:15:12Z",
    "test_operator": "Dorothy Thayre",
    "test_method": "method 1",
    "measure": [
        {
            "viscosity": 6.47,
            "temperature": 9.71,
            "time_elapsed": 19.49
        },
        {
            "viscosity": 88.5,
            "temperature": 36.92,
            "time_elapsed": 74.2
        },
        {
            "viscosity": 8.14,
            "temperature": 56.73,
            "time_elapsed": 80.78
        },
        {
            "viscosity": 51.88,
            "temperature": 69.23,
            "time_elapsed": 62.55
        },
        {
            "viscosity": 75.02,
            "temperature": 35.98,
            "time_elapsed": 83.97
        }
    ]
}

Dans ce modèle, nous extrairez toutes les métadonnées du premier niveau en une seule vue. La vue des métadonnées fera partie de Viscosité schéma et sera virtuel. Notez que ViewVirtual est défini sur true au niveau de la vue. Nous pouvons également matérialiser les champs individuels si nous souhaitons des opérations plus rapides, comme le tri. Remarquez le champ Date avec la propriété virtuelle définie sur FALSE.

'use strict';
declareUpdate();
const tde = require("/MarkLogic/tde.xqy");

let template = xdmp.toJSON(
{
    "template": {
        "description": "Viscosity Test Template",
        "context": "/",
        "collections": [
            "http://example.com/tests/viscosity"
        ],
        "vars": [
            {
                "name": "guid",
                "val": "sample_guid"
            }
        ],
        "rows": [
            {
                "schemaName": "Viscosity",
                "viewName": "Metadata",
                "viewLayout": "sparse",
                "viewVirtual": true,
                "columns": [
                    {
                        "name": "GUID",
                        "scalarType": "string",
                        "val": "$guid",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "SampleNumber",
                        "scalarType": "string",
                        "val": "sample_number",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Operator",
                        "scalarType": "string",
                        "val": "test_operator",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Method",
                        "scalarType": "string",
                        "val": "test_method",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Date",
                        "scalarType": "dateTime",
                        "val": "test_date",
                        "virtual": false,
                        "nullable": false,
                        "invalidValues": "ignore"
                    }
                ]
            }
        ]
    }
})


tde.templateInsert("/tde/viscosity.json", template, [xdmp.permission("rest-writer", "update"), xdmp.permission("rest-reader", "read")]);

Vous pouvez désormais interroger ces vues directement dans SQL dans la console de requête. Comme indiqué, la seule indexation se produit par rapport aux champs que vous avez marqués comme «faux» virtuels.

SELECT * FROM Viscosity.Metadata
LIMIT 100

Le Index universel Dans MarkLogic Server, indexe automatiquement les éléments XML et les propriétés JSON pendant l’ingestion de document, sans avoir besoin d’un schéma prédéfini. Il prend en charge la requête rapide et flexible en indexant le texte complet, la structure et les valeurs. L’index traite les requêtes structurelles et textuelles de la même manière, permettant des recherches combinées efficaces sur différents types de données.

Les vues virtuelles peuvent tirer parti de cet index pour créer des filtres par rapport aux données. Lors de la création d’une requête SQL avec une clause Where, le moteur de requête MarkLogic Server mappera automatiquement ces contraintes à l’index universel. Il n’y a pas de travail supplémentaire pour vous en tant que développeur.

-- query

SELECT * FROM Viscosity.Metadata
WHERE Method = 'method 1'
LIMIT 100

Dans ce cas, le champ Méthode est une chaîne et mappera vers un requête de valeur d’élément ou Requête de valeur de propriété.

Ajout de nouvelles colonnes à la volée

Au fur et à mesure que nous continuons, nous voulons ajouter de nouvelles vues et colonnes. Cela nécessiterait généralement un Reindex. Cependant, la vue de la vue sur virtuelnous pouvons ajouter ces colonnes et s’appuyer sur les données qui ont déjà été persistées dans l’indice universel.

'use strict';
declareUpdate();
const tde = require("/MarkLogic/tde.xqy");

let template = xdmp.toJSON(
{
    "template": {
        "description": "Viscosity Test Template",
        "context": "/",
        "collections": [
            "http://example.com/tests/viscosity"
        ],
        "vars": [
            {
                "name": "guid",
                "val": "sample_guid"
            }
        ],
        "rows": [
            {
                "schemaName": "Viscosity",
                "viewName": "Metadata",
                "viewLayout": "sparse",
                "viewVirtual": true,
                "columns": [
                    {
                        "name": "GUID",
                        "scalarType": "string",
                        "val": "$guid",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "SampleNumber",
                        "scalarType": "string",
                        "val": "sample_number",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Operator",
                        "scalarType": "string",
                        "val": "test_operator",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Method",
                        "scalarType": "string",
                        "val": "test_method",
                        "nullable": false,
                        "invalidValues": "ignore"
                    },
                    {
                        "name": "Date",
                        "scalarType": "dateTime",
                        "val": "test_date",
                        "virtual": false,
                        "nullable": false,
                        "invalidValues": "ignore"
                    }
                ]
            }
        ],
        "templates": [
            {
                "context": "measure",
                "rows": [
                    {
                        "schemaName": "Viscosity",
                        "viewName": "Measure",
                        "viewLayout": "sparse",
                        "viewVirtual": true,
                        "columns": [
                            {
                                "name": "GUID",
                                "scalarType": "string",
                                "val": "$guid",
                                "nullable": false,
                                "invalidValues": "ignore"
                            },
                            {
                                "name": "Temperature",
                                "scalarType": "string",
                                "val": "temperature",
                                "nullable": false,
                                "invalidValues": "ignore"
                            },
                            {
                                "name": "Elapsed",
                                "scalarType": "string",
                                "val": "time_elapsed",
                                "nullable": false,
                                "invalidValues": "ignore"
                            },
                            {
                                "name": "Viscosity",
                                "scalarType": "string",
                                "val": "viscosity",
                                "nullable": false,
                                "invalidValues": "ignore"
                            }
                        ]
                    }
                ]
            }
        ]
    }
})


tde.templateInsert("/tde/viscosity.json", template, [xdmp.permission("rest-writer", "update"), xdmp.permission("rest-reader", "read")]);

Ces vues peuvent également être jointes et triées avec facilité. Il n’est pas nécessaire d’attendre que ces données se réindexent car elles sont déjà présentes dans l’index universel.

-- query

SELECT * FROM Viscosity.Metadata
INNER JOIN Viscosity.Measure
ON Metadata.GUID = Measure.GUID
ORDER BY Date
LIMIT 100

Connexion via ODBC

En plus des capacités de la console de requête, vous pouvez connecter des applications sur ODBC. Cela permet des outils BI tels que Tableau ou Microsoft Power BI à exploiter par rapport à l’ensemble de données.

Conclusion

Avec la fonctionnalité de vues virtuelles marklogiques innovantes, vous pouvez désormais tirer parti de l’index universel dans le cadre de votre charge de travail de requête analytique. Permettre une requête ad hoc flexible, efficace et robuste. Cela offre une empreinte de base de données plus petite sans compromettre la flexibilité de la requête. Ces nouvelles améliorations à l’extraction conduite par les modèles présentent de nombreux avantages:

Analyse flexible: Exécutez les requêtes à la demande et permettez les index matérialisés uniquement lorsque cela est nécessaire.
Gestion efficace des données: Projetez de manière transparente les données en lignes et colonnes sans créer de nouveaux enregistrements.
Consommation cohérente: Assurez-vous que toutes les méthodes de consommation sont cohérentes transactionnelles.
Performances optimisées: Réduction des besoins en temps d’indexation et en stockage avec des vues virtuelles.

Avant de faire une autre «traction rapide de la base de données» ou de créer un autre tableau de bord, personne ne va regarder, essayez un MVP qui vous donnera suffisamment pour vous asseoir avec les parties prenantes et comprendre la vraie question à accomplir.

Commencez avec MarkLogic Server 12 aujourd’hui.




Source link
Quitter la version mobile