/db2whrest/v1/report: POST

Crée une définition de rapport de curation et l'exécute immédiatement.

Le tableau suivant indique les rôles qui peuvent accéder à ce noeud final d'API REST:
Tableau 1. Accès par rôle
Administrateur de données Utilisateur de données Administrateur de collection Administrateur Utilisateur de maintenance
Χ Χ Χ Χ

Résumé de la demande URL

curl -k -H 'Authorization: Bearer <token>' https://<data_cataloging_host>/db2whrest/v1/report -X POST -d@report.json -H "Content-Type: application/json"
Ce noeud final possède les mêmes paramètres que le noeud final /db2whrest/v1/search et possède également un paramètre name :
requête
Indique une chaîne de requête de recherche.
filtres
Indique un tableau de dictionnaires qui filtrent les résultats de la requête. Chaque dictionnaire doit contenir les trois zones suivantes:
clé
Nom de la zone ou de la colonne à renvoyer.
opérateur
L'un des opérateurs suivants: =, >, <, <>, <=, >=, is, like.
valeur
Valeur de la zone ou de la colonne à filtrer.
groupe_par
Indique une liste de zones à utiliser pour récapituler les résultats de la recherche. Les requêtes groupées renvoient des colonnes de sortie pour le comptage et la somme, tandis que les requêtes non groupées renvoient toutes les colonnes pour chaque ligne. Si la zone group_by n'est pas spécifiée, la recherche renvoie des informations de niveau enregistrement.
sort_by
Indique un tableau d'objets dictionnaire. Chaque objet dictionnaire doit spécifier un nom de zone ou de colonne à trier et une direction de tri. Les directions de tri valides sont asc et desc.
limite
Indique le nombre maximal de lignes pouvant être renvoyées par la réponse.
nom
Indique un nom pour le fichier de sortie de rapport. Si ce paramètre n'est pas spécifié, le noeud final utilise l'identificateur unique universel généré de manière aléatoire comme base de nom de fichier.
L'exemple suivant montre comment spécifier ces zones:
{
    "name": "Unassigned Project Report",
    "query": "platform='Spectrum Scale'",
    "filters": [
      {
        "key": "project",
        "operator": "is",
        "value": "null"
      }
    ],
    "group_by": ["Filesystem","Owner","Site"],
    "sort_by": [{"Filesystem": "asc"},{"Owner": "asc"}],
    "limit": 100000
}

Types de demande et formats de réponse pris en charge

Types de demande pris en charge:
  • POST
Formats de réponse pris en charge:
  • JavaScript Object Notation

Codes de statut

201
L'opération s'est terminée avec succès.
Toutes les autres valeurs de code de statut
L'opération a échoué.
  • 201: L'opération a abouti.
  • Toutes les autres valeurs de code de statut: l'opération a échoué.

Exemples

  1. L'exemple suivant montre comment créer un rapport:
    1. Etape 1: définissez les paramètres de recherche dans un fichier nommé report.json:
      {
          "name": "Unassigned Project Report",
          "query": "platform='Spectrum Scale'",
          "filters": [
            {
              "key": "project",
              "operator": "is",
              "value": "null"
            }
          ],
          "group_by": ["Filesystem","Owner","Site"],
          "sort_by": [{"Filesystem": "asc"},{"Owner": "asc"}],
          "limit": 100000
      }
      
    2. Etape 2: Soumettez la demande suivante:
      curl -k -H 'Authorization: Bearer <token>' https://<data_cataloging_host>/db2whrest/v1/report -X POST -d@report.json -H "Content-Type: application/json"
  2. La réponse inclut l'ID du nouveau rapport et le statut de l'opération ("rapport créé"):
    {"report": "b5ff3126-353d-4d7d-857a-750cc20b8bab", "status": "report created"}

Scripts de rapport

IBM Data Cataloging contient un ensemble de JSON et de scripts prédéfinis pour générer des rapports spécifiques.
  1. Exemples JSON
    • L'exemple suivant répertorie les fichiers ou les objets auxquels vous avez accédé au cours des derniers 0 à 30 jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_0-30_days_since_access_detail.json
      {
          "name": "Age Report Detail. 0-30 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 30 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • Cet exemple récapitule les fichiers ou les objets auxquels on accède au cours des 0 à 30 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_0-30_days_since_access_summary.json
      {
          "name": "Age Report Summary. 0-30 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 30 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • Cet exemple répertorie les fichiers ou les objets accessibles au cours des 30 à 60 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_30-60_days_since_access_detail.json
      {
          "name": "Age Report Detail. 30-60 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 30 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 60 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • Cet exemple récapitule les fichiers ou les objets consultés au cours des 30 à 60 derniers jours et regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_30-60_days_since_access_summary.json
      {
          "name": "Age Report Summary. 30-60 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 30 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 60 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • Cet exemple répertorie les fichiers ou les objets auxquels on accède au cours des 60 à 90 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_60-90_days_since_access_detail.json
      {
          "name": "Age Report Detail. 60-90 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 60 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 90 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • L'exemple suivant récapitule les fichiers ou les objets auxquels on accède au cours des 60 à 90 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_60-90_days_since_access_summary.json
      {
          "name": "Age Report Summary. 60-90 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 60 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 90 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • L'exemple suivant répertorie les fichiers ou les objets auxquels vous avez accédé au cours des 90 à 180 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_90-180_days_since_access_detail.json
      {
          "name": "Age Report Detail. 90-180 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 90 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 180 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • L'exemple suivant récapitule les fichiers ou les objets auxquels on accède au cours des 90 à 180 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_90-180_days_since_access_summary.json
      {
          "name": "Age Report Summary. 90-180 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 90 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 180 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • L'exemple suivant répertorie les fichiers ou les objets accessibles au cours des 180 à 360 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_180-360_days_since_access_detail.json
      {
          "name": "Age Report Detail. 180-360 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 180 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 360 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • L'exemple suivant récapitule les fichiers ou les objets auxquels on accède au cours des 180 à 360 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_180-360_days_since_access_summary.json
      {
          "name": "Age Report Summary. 180-360 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 180 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 360 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • L'exemple suivant répertorie les fichiers ou les objets auxquels on accède au cours des 360 à 720 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_360-720_days_since_access_detail.json
      {
          "name": "Age Report Detail. 360-720 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 360 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 720 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • L'exemple suivant récapitule les fichiers ou les objets auxquels on accède au cours des 360 à 720 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_360-720_days_since_access_summary.json
      {
          "name": "Age Report Summary. 360-720 Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 360 DAYS"
            },
            {
              "key": "atime",
              "operator": ">",
              "value": "NOW() - 720 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
    • L'exemple suivant répertorie les fichiers ou objets consultés qui n'ont pas été consultés au cours des 720 derniers jours. Ce rapport est créé dans l'interface utilisateur.

      age_report_720+_days_since_access_detail.json
      {
          "name": "Age Report Detail. 720+ Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 720 DAYS"
            }
          ],
          "group_by": [],
          "sort_by": []
      }
    • L'exemple suivant récapitule les fichiers ou les objets auxquels on accède au cours des 720 derniers jours et qui sont regroupés par source de données. Ce rapport est créé dans l'interface utilisateur.

      age_report_720+_days_since_access_summary.json
      {
          "name": "Age Report Summary. 720+ Days",
          "query": "",
          "filters": [
            {
              "key": "atime",
              "operator": "<=",
              "value": "NOW() - 720 DAYS"
            }
          ],
          "group_by": ["datasource"],
          "sort_by": [{"datasource": "asc"}]
      }
  2. Scripts SQL
    • Ce script fournit le nombre de fichiers potentiellement en double dans l'environnement hétérogène. Ce rapport n'est pas créé dans l'interface utilisateur.

      duplicate_files_by_count.sql
      select filename, size, count(fkey) from metaocean group by filename,
          size order by count(fkey) desc limit 20;
    • Ce script fournit la taille des fichiers potentiellement en double dans l'environnement hétérogène. Ce rapport n'est pas créé dans l'interface utilisateur.

      duplicate_files_by_total_size.sql
      select filename,entrysize,entrycount,totalsize from (select filename, 
          size as entrysize, count(fkey) as entrycount, count(fkey)*size as TotalSize 
          from metaocean group by filename,size) where entrycount>1 order by totalsize desc;
    • Ce script fournit la taille des fichiers potentiellement en double dans l'environnement hétérogène. Ce rapport n'est pas créé dans l'interface utilisateur.

      size_snap.sql
      select datasource,count(*),sum(size)/1024/1024/1024,max(mtime),max(atime) 
          from metaocean group by datasource with ur
    • Ce script fournit une vue de la capacité consommée par collection. Ce rapport n'est pas créé dans l'interface utilisateur.

      space_per_collection.sql
      select metaocean.collection,count(*),sum(size)/1024/1024/1024,max(mtime),datasource,
          tier from metaocean group by metaocean.collection,datasource,tier order by max(mtime)
          desc with ur
    • Ce script fournit une vue de la capacité consommée par type de fichier. Ce rapport n'est pas créé dans l'interface utilisateur.

      space_per_filetype.sql
      select filetype,datasource,tier,count(*),sum(size)/1024/1024/1024 from metaocean 
          group by filetype,datasource,tier order by filetype,datasource,tier desc with ur
    • Ce script fournit une vue de la capacité consommée par utilisateur. Ce rapport n'est pas créé dans l'interface utilisateur.

      space_per_user.sql
      select owner,tier,count(*),sum(size)/1024/1024/1024,max(mtime),max(atime) from metaocean 
          group by owner,tier order by owner,tier with ur
Les rapports peuvent également être générés en utilisant l'un des deux utilitaires CLI fournis avec IBM Data Cataloging. Les deux existent sur les nœuds de catalogage de données IBM :
  • /opt/ibm/metaocean/reports/generate_report.py
    Pour exécuter les utilitaires, connectez-vous à un nœud de catalogage de données IBM et exécutez generate_report.py avec l'utilisation suivante :
    python generate_report.py [-h] [-o filename] -u username [infile]
    • Exécutez un rapport avec un fichier d'entrée SQL:
      python generate_report.py -u sdadmin -o report.csv sql/space_per_user.sql
      Enter password for SD user 'sdadmin':
    • Exécutez un rapport avec un fichier d'entrée JSON:
      python generate_report.py -u sdadmin  sql/age_report_0-30_days_since_access_detail.json
      Enter password for SD user 'sdadmin':

    Il faut pour cela disposer d'un nom d'utilisateur et d'un fichier d'entrée pour IBM Data Cataloging. Vous devez disposer du rôle Administrateur de données pour générer des rapports. L'outil vous invite à entrer un mot de passe

    Les exemples de fichier d'entrée sont stockés dans le répertoire /opt/ibm/metaocean/reports/sql . Il existe une combinaison de fichiers JSON et SQL dans le répertoire. Tous les fichiers JSON créent un rapport dans l'interface utilisateur de catalogage de données IBM. Les fichiers SQL créent un fichier CSV.

  • /opt/ibm/metaocean/reports/generate_path_age_report.py
    Important : cet outil ne permet pas de créer des rapports dans l'interface utilisateur de catalogage de données IBM.
    Voici l'utilisation de l'outil:
    generate_path_age_report.py [-h] -u username -r report -p pathlevel -a archive
    
    optional arguments:
      -h, --help            show this help message and exit
      -u username, --user username
                            User name with authority to create reports
      -r report, --report report
                            The report type to be generated (ARDS, ARDSOW, AROW, ARPL, 
                            CPPL, FTMB, CPFT, FTMB50)
      -p pathlevel, --pathlevel pathlevel
                            The level of path used in some reports
      -a archive, --archive archive
                            The archive threshold in months
    
    L'outil generate_path_age_report.py a besoin d'au moins trois paramètres:
    • pathlevel
      Niveau de chemin utilisé dans certains rapports, par exemple:
      1 = /x/, 2=/x/y/
      Si votre rapport n'utilise pas ce paramètre, la valeur 1 doit être utilisée.
    • archive

      Le seuil d'archivage correspond au nombre de mois écoulés depuis la dernière fois qu'un fichier est considéré comme pertinent pour l'archivage à des fins de génération de rapports. Si votre rapport n'utilise pas ce paramètre, la valeur 1 doit être utilisée.

    • report
      Le type de rapport est l'un des codes suivants:
      ARDS   = Summary of archivable capacity grouped by datasource
      ARDSOW = Summary of archivable capacity grouped by datasource
      AROW   = Summary of archivable capacity grouped by owner
      ARPL   = Summary of archivable capacity grouped by specified path level
      CPPL   = Summary of capacity grouped by specified path level
      FTMB   = Summary of filetype usage by month, previous 12 months
      CPFT   = Summary of capacity grouped by filetype
      FTMB50 = Summary of filetype usage by month, previous 12 months' top 50 filetypes
Voici un exemple d'exécution de l'outil generate_path_age_report.py :
python generate_path_age_report.py -u sdadmin -r ARDSOW -p 2 -a 12
Starting to create report type 'ARDSOW' for user: sdadmin
Enter password for SD user 'sdadmin':
Setting up path level summary table
Generating path level summary table
Generating path level summary table complete.
Generating report
Generating report - building temporary table.
Generating report - querying temporary table.
Generating report - writing output file.
Report generated successfully. Results are in 'rpt_ar_ds_ow.csv'.