Règles d'écriture des SQLTemplates
Instructions SQL
Une instruction SQL peut être n'importe quelle instruction SQL valide exécutable par la JDBC liée. Le code des modèles SQL est un groupe d'instructions SQL. Les règles de base pour écrire une instruction SQL dans l'éditeur de modèles SQL sont :
-
une instruction SQL doit se terminer par ;,
-
une instruction SQL peut s'étendre sur plusieurs lignes. Dans ce cas, seule la dernière ligne doit se terminer par ;.
Lignes de commentaire
Une ligne de commentaire commence par # ou --. Chaque ligne débutant par # ou -- sera ignorée lors de la génération du code.
Aucune exception n'est faite pour les lignes dans la partie du milieu d'une instruction SQL, ou à l'intérieur de la syntaxe <%... %>.
La syntaxe <%...%>
Cette syntaxe peut s'étendre sur plusieurs lignes. Les points suivants listent ce que vous pouvez faire avec cette syntaxe, et ce à quoi vous devez faire attention.
-
Vous pouvez définir de nouvelles variables, utiliser le code logique Java, comme if, for et while et également obtenir les valeurs des paramètres.
Par exemple, si vous souhaitez obtenir le paramètre FILE_NAME, utilisez le code comme suit :
<%
String filename = __FILE_NAME__;
%>
-
Cette syntaxe ne peut être utilisée dans une instruction SQL. Elle doit être utilisée entre deux instructions SQL séparées.
Par exemple, la syntaxe dans le code suivant est valide :
#sql sentence
DROP TABLE temp_0;
<%
#loop
for(int i=1; i<10; i++){
%>
#sql sentence
DROP TABLE temp_<%=i %>;
<%
}
%>
#sql sentence
DROP TABLE temp_10;
Dans cet exemple, la syntaxe est utilisée entre deux modèles SQL séparés : DROP TABLE temp_0; et DROP TABLE temp_<%=i%>;.
Les instructions SQL ont pour but de supprimer plusieurs tables, en commençant par temp_0. Le code entre <% et %> génère un nombre de séquences dans la boucle, afin d'identifier les tables à supprimer et fermer la boucle après la génération du nombre de séquences.
-
A l'intérieur de cette syntaxe, la syntaxe <%=...%> ou </.../> ne doit pas être utilisée.
<%=...%> et </.../>, sont également des syntaxes liées aux modèles SQL. Les sections suivantes donnent des informations relatives à ces syntaxes.
Les paramètres auxquels les modèles SQL peuvent accéder grâce à cette syntaxe sont simples. Ils sont souvent utilisés lors de connexions et peuvent être facilement définis dans les composants, par exemple TABLE_NAME, DB_VERSION, SCHEMA_TYPE, etc.
La syntaxe <%=...%>
Cette syntaxe ne peut s'étendre sur plusieurs lignes et elle est utilisée dans des instructions SQL. Les points suivants listent ce que vous pouvez faire avec cette syntaxe, et ce à quoi vous devez faire attention.
-
Elle peut être utilisée pour générer toute valeur de variable et toute valeur des paramètres existants.
-
Les caractères d'espacement sont autorisés après <%=.
-
À l'intérieur de la syntaxe, la syntaxe <%...%> ou </.../> ne doit pas être utilisée.
L'instruction écrite dans l'exemple ci-dessous est valide :
#sql sentence
DROP TABLE temp_<%=__TABLE_NAME__ %>;
Le code est utilisé pour supprimer la table définie à l'aide d'un composant associé.
Pour plus d'informations concernant les composants associés aux modèles SQL, consultez Qu'est-ce qu'un Job ?.
Pour plus d'informations concernant la syntaxe <%...%>, consultez La syntaxe <%...%>.
Pour plus d'informations concernant la syntaxe </.../>, consultez la section suivante.
Les paramètres auxquels les modèles SQL peuvent accéder grâce à cette syntaxe sont simples. Ils sont souvent utilisés lors de connexions et peuvent être facilement définis dans les composants, par exemple TABLE_NAME, DB_VERSION, SCHEMA_TYPE, etc.
La syntaxe " </.../> "
Cette syntaxe ne peut s'étendre sur plusieurs lignes. Les points suivants listent ce que vous pouvez faire avec cette syntaxe, et ce à quoi vous devez faire attention.
-
Elle peut être utilisée pour générer la valeur des paramètres existants. La valeur générée ne doit pas être entourée de guillemets.
-
Aucun caractère d'espacement n'est autorisé après </ ou avant />.
-
A l'intérieur de cette syntaxe, la syntaxe <%...%> ou <%=...%> ne doit pas être utilisée.
L'instruction écrite dans l'exemple ci-dessous est valide :
#sql sentence
DROP TABLE temp_</TABLE_NAME/>;
L'instruction accède au paramètre TABLE_NAME et supprime la table correspondante.
Pour plus d'informations concernant la syntaxe <%...%>, consultez La syntaxe <%...%>.
Pour plus d'informations concernant la syntaxe <%=...%>, consultez La syntaxe <%...%>.
Les sections suivantes présentent un code plus spécifique pour accéder à des paramètres plus complexes.
Les paramètres auxquels les modèles SQL peuvent accéder grâce à cette syntaxe sont simples. Ils sont souvent utilisés lors de connexions et peuvent être facilement définis dans les composants, par exemple TABLE_NAME, DB_VERSION, SCHEMA_TYPE, etc.
Le code pour accéder aux éléments du schéma des composants
Les éléments du schéma des composants sont présentés dans une liste comprenant le nom des colonnes des schémas (séparés par un point "."). Ces éléments sont créés et définis par les utilisateurs et utilisatrices dans les composants.
Le code ci-dessous propose un exemple d'accès à certains éléments du schéma des composants. Dans cet exemple, le nom de la variable ELT_METADATA_SHEMA est utilisé pour obtenir le schéma du composant.
<%
String query = "select ";
SCHEMA(__ELT_METADATA_SHEMA__);
for (int i=0; i < __ELT_METADATA_SHEMA__.length ; i++) {
query += (__ELT_METADATA_SHEMA__[i].name + ",");
}
query += " from " + __TABLE_NAME__;
%>
<%=query %>;
Dans cet exemple, selon vos objectifs, le code __ELT_METADATA_SHEMA__[i].name peut être remplacé par __ELT_METADATA_SHEMA__[i].dbType, __ELT_METADATA_SHEMA__ [i].isKey, __ELT_METADATA_SHEMA__[i].length ou __ELT_METADATA_SHEMA__[i].nullable pour accéder aux autres champs des colonnes du schéma.
L'instruction extraite est SCHEMA(__ELT_METADATA_SHEMA__);. Dans cette instruction, ELT_METADATA_SHEMA est le nom de la variable représentant les paramètres du schéma à extraire. Le nom utilisé dans ce code est simplement un exemple. Vous pouvez changer ce nom en nom d'une autre variable, afin de représenter les paramètres de schéma, selon votre système de nommage.
Vérifiez que le nom que vous saisissez n'entrera en conflit avec aucun autre paramètre.
Pour plus d'informations concernant les schémas des composants, consultez Onglet Basic settings (Paramètres simples).
Le code pour accéder aux propriétés de la matrice du composant
Les propriétés de la matrice du composant sont créées et modifiées par les utilisateurs et utilisatrices selon les différents objectifs de transformation des données. Par exemple, les paramètres operation ou groupby peuvent être définis par les utilisateurs et utilisatrices dans le composant tSQLTemplateAggregate.
Vous pouvez accéder à ces paramètres de transformation, naturellement plus flexibles et complexes, de deux façons différentes.
-
L'approche </.../>.
</.../> est l'une des syntaxes utilisées par les modèles SQL. Cette approche nécessite souvent du code dur pour chaque paramètre à extraire.
Par exemple, un nouveau paramètre est créé par l'utilisateur ou l'utilisatrice et nommé NEW_PROPERTY. Si vous souhaitez y accéder en utilisant </NEW_PROPERTY/>, le code ci-dessous est requis.
else if (paramName.equals("NEW_PROPERTY")) {
List<Map<String, String>> newPropertyTableValue = (List<Map<String, String>>)
ElementParameterParser.getObjectValue(node, "__NEW_PROPERTY__");
for (int ii = 0; ii <newPropertyTableValue.size(); ii++) {
Map<String, String> newPropertyMap =newPropertyTableValue.get(ii);
realValue += ...;//append generated codes
......
}
}
-
L'approche EXTRACT(__GROUPBY__);.
Le code ci-dessous montre la seconde méthode d'accès au paramètre de transformation (GROUPBY).
<%
String query = "insert into " + __TABLE_NAME__ + "(id, name, date_birth) select sum(id), name, date_birth from cust_teradata group by";
EXTRACT(__GROUPBY__);
for (int i=0; i < __GROUPBY_LENGTH__ ; i++) {
query += (__GROUPBY_INPUT_COLUMN__[i] + " ");
}
%>
<%=query %>;
Lors de l'encodage des instructions, respectez les règles comme suit :
-
L'instruction extraite doit utiliser EXTRACT(__GROUPBY__);. Les majuscules sont requises, et les caractères d'espacement ne sont pas autorisés. Cette instruction doit être utilisée entre <% et %>.
-
Utilisez le code __GROUPBY_LENGTH__, dans lequel le nom du paramètre, suivi de _LENGTH, permet d'obtenir le numéro de ligne des paramètres du tableau GROUPBY définis dans la zone Groupby de la vue Component. Il peut être utilisé entre <% et %> ou <%= et %>.
-
Utilisez le code __GROUPBY_INPUT_COLUMN__[i] afin d'extraire les valeurs des paramètres. Il peut être utilisé entre <% et %> ou entre <%= et %>.
-
Pour accéder aux paramètres correctement, n'utilisez pas le même préfixe pour le nom de plusieurs paramètres. Par exemple, dans un composant, évitez de définir deux paramètres avec le nom PARAMETER_NAME et PARAMETER_NAME_2, car plusieurs préfixes semblables produisent des erreurs lors de la génération du code.