Créer un ticket Mes tickets
Bienvenue
Connexion  S'inscrire

Connecteur avancé JDBC pour le dictionnaire

Cet article explique comment utiliser une connexion JDBC Autre (avancé) pour importer des métadonnées dans une source de type relationnelle (base de données) du module Dictionnaire. 

Le mode de connexion JDBC Autre (avancé) est le seul mode de connexion disponible par défaut dans le connecteur.

Etape 1 : Installation

  • Télécharger le connecteur DataGalaxy depuis le portail (voir ici)
  • Extraire l'archive du connecteur dans le répertoire de votre choix
  • Dans ce mode, il faut avoir le driver JDBC que vous souhaitez utiliser dans la chaîne de connexion (fichier .jar) et le copier dans le répertoire /lib du connecteur 

Etape 2 : Exécution du connecteur avec une connexion en mode JDBC Autre (avancé)

  • Après avoir démarré le connecteur, accéder aux connecteurs du Dictionnaire
Ce mode de connexion ne permet d'importer que dans des sources DataGalaxy de type relationnelle

  • L'écran de connexion est similaire à celui habituellement proposé, sauf qu'il propose l'utilisation de requêtes SQL personnalisées : 

Informations techniques

Les cas d'utilisation de ce mode sont les suivants (ceux ci étant potentiellement complémentaires) :

  1. Vous souhaitez vous connecter à une source de données pour laquelle DataGalaxy ne propose pas encore de plugin, mais pour laquelle vous disposez d'un driver JDBC
  2. Vous souhaitez modifier la méthode de récupération de métadonnées en utilisant des requêtes personnalisées

Dans le 1er cas, il vous suffit simplement de déclarer votre chaîne de connexion JDBC, et le connecteur vous proposera directement d'exporter les métadonnées identifiées.

Si vous souhaitez utiliser vos propres requêtes pour récupérer les métadonnées, celles ci devront respecter certaines contraintes. Des exemples de fichiers de requêtes sont disponibles dans le répertoire /queries/model du connecteur.

  • Le fichier comporte quatre requêtes, pour lister les tables, les colonnes, les clés primaires et les clés étrangères. Les quatre requêtes sont obligatoires ;
Si vous souhaitez ne pas utiliser l'une des requêtes, une option est de renseigner une requête générique qui ne retourne aucune ligne, comme select 0 limit 0;
  • Le caractère \ permet de découper la requête sur plusieurs lignes ;
  • Le caractère ; n'est pas nécessaire à la fin de la requête ;
  • Les commentaires dans la requête ne sont pas supportés. Vous pouvez ajouter des commentaires autour des requêtes avec le caractère #.

Si vous enregistrez la chaîne de connexion ainsi configurée, celle ci sauvegardera le chemin vers le fichier de requêtes que vous avez renseigné.

Ci dessous un exemple de requêtes personnalisées à utiliser avec une base de données Microsoft SQL Server

# Query used to generate the 1_Tables file
tables.query=SELECT o.name AS "tablename", \
CASE o.type WHEN 'U' THEN 'Table' ELSE 'View' END AS "tabletype", \
s.name AS "schema", \
d.value AS technicalcomments \
FROM sys.all_objects o \
INNER JOIN sys.schemas s on o.schema_id = s.schema_id \
OUTER APPLY sys.fn_listextendedproperty ('MS_Description', 'schema', s.name, CASE o.type WHEN 'U' THEN 'table' ELSE 'view' END, o.name, null, default) AS d \
WHERE TYPE IN ('V','U')

# Query used to generate the 2_Columns file
# reference: https://stackoverflow.com/a/42258353
columns.query=SELECT objects.name AS "tablename", \
CASE objects.type_desc WHEN 'USER_TABLE' THEN 'Table' ELSE 'View' END AS "tabletype", \
columns.name AS "columnname", \
schemas.name AS "schema", \
COALESCE(CASE \
WHEN baseType.name IN ('varchar', 'char', 'varbinary') THEN baseType.name + CASE WHEN columns.max_length = -1 THEN '(max)' ELSE '(' + CAST(columns.max_length AS VARCHAR(4)) + ')' END \
WHEN baseType.name IN ('nvarchar', 'nchar') THEN baseType.name + CASE WHEN columns.max_length = -1 THEN '(max)' ELSE '(' + CAST(columns.max_length / 2 AS VARCHAR(4)) + ')' END \
WHEN baseType.name IN ('time', 'datetime2', 'datetimeoffset') THEN baseType.name + '(' + CAST(columns.scale AS VARCHAR(4)) + ')' \
WHEN baseType.name IN ('numeric', 'decimal') THEN baseType.name + '(' + CAST(columns.precision AS VARCHAR(4)) + ',' + CAST(columns.scale AS VARCHAR(4)) + ')' \
WHEN baseType.name = 'timestamp' THEN 'rowversion' ELSE baseType.name END, \
CASE \
WHEN columns.is_computed = 1 THEN 'Computed' \
WHEN types.name IN ('varchar', 'char', 'varbinary') THEN types.name + CASE WHEN columns.max_length = -1 THEN '(max)' ELSE '(' + CAST(columns.max_length AS VARCHAR(4)) + ')' END \
WHEN types.name IN ('nvarchar', 'nchar') THEN types.name + CASE WHEN columns.max_length = -1 THEN '(max)' ELSE '(' + CAST(columns.max_length / 2 AS VARCHAR(4)) + ')' END \
WHEN types.name IN ('time', 'datetime2', 'datetimeoffset') THEN types.name + '(' + CAST(columns.scale AS VARCHAR(4)) + ')' \
WHEN types.name IN ('numeric', 'decimal') THEN types.name + '(' + CAST(columns.precision AS VARCHAR(4)) + ',' + CAST(columns.scale AS VARCHAR(4)) + ')' WHEN types.name = 'timestamp' THEN 'rowversion' ELSE types.name END) AS "datatype", \
CASE columns.is_nullable WHEN 0 THEN 1 ELSE 0 END AS "ismandatory", \
d.value AS "technicalcomments", \
columns.column_id AS "order" \
FROM sys.columns \
LEFT JOIN sys.types ON columns.user_type_id = types.user_type_id \
LEFT JOIN sys.types AS baseType ON columns.system_type_id = baseType.system_type_id AND baseType.user_type_id = baseType.system_type_id \
JOIN sys.objects \
JOIN sys.schemas ON schemas.schema_id = objects.schema_id ON objects.object_id = columns.OBJECT_ID \
LEFT OUTER JOIN sys.default_constraints ON default_constraints.parent_object_id = columns.object_id AND default_constraints.parent_column_id = columns.column_id \
LEFT OUTER JOIN sys.check_constraints ON check_constraints.parent_object_id = columns.object_id AND check_constraints.parent_column_id = columns.column_id \
OUTER APPLY sys.fn_listextendedproperty('MS_Description', 'schema', schemas.name, 'table', objects.name, 'column', columns.name) AS d \
WHERE objects.type_desc != 'SYSTEM_TABLE' AND objects.type_desc != 'INTERNAL_TABLE' AND objects.type_desc != 'SQL_TABLE_VALUED_FUNCTION'

# Query used to generate the 3_PK file
tables.primary.keys.query=SELECT tab.name AS "tabletechnicalname", \
schema_name(tab.schema_id) as "schema", \
pk.name AS pktechnicalname, \
col.name AS columnname, \
ic.index_column_id AS pkorder \
FROM sys.tables tab \
INNER JOIN sys.indexes pk ON tab.object_id = pk.object_id AND pk.is_primary_key = 1 \
INNER JOIN sys.index_columns ic ON ic.object_id = pk.object_id AND ic.index_id = pk.index_id \
INNER JOIN sys.columns col ON pk.object_id = col.object_id AND col.column_id = ic.column_id

# Query used to generate the 4_FK file
tables.foreign.keys.query=SELECT schema_name(fk_tab.schema_id) as "fkschema", \
fk_tab.name AS fktablename, \
fk.name AS fktechnicalname, \
fk_col.name AS columnname, \
schema_name(pk_tab.schema_id) AS "pkschema", \
pk_tab.name AS pktabletechnicalname, \
pk.name AS pktechnicalname, \
pk_col.name AS pkcolumnname \
FROM sys.foreign_keys fk \
INNER JOIN sys.tables fk_tab ON fk_tab.object_id = fk.parent_object_id \
INNER JOIN sys.tables pk_tab ON pk_tab.object_id = fk.referenced_object_id \
INNER JOIN sys.indexes pk ON pk_tab.object_id = pk.object_id AND pk.is_primary_key = 1 \
INNER JOIN sys.foreign_key_columns fk_cols ON fk_cols.constraint_object_id = fk.object_id \
INNER JOIN sys.columns fk_col ON fk_col.column_id = fk_cols.parent_column_id AND fk_col.object_id = fk_tab.object_id \
INNER JOIN sys.columns pk_col ON pk_col.column_id = fk_cols.referenced_column_id AND pk_col.object_id = pk_tab.object_id


Cette réponse a-t-elle été utile ? Oui Non

Envoyer vos commentaires
Désolés de n'avoir pu vous être utile. Aidez-nous à améliorer cet article en nous faisant part de vos commentaires.