Text Search pattern in Teradata with Java , SQLJ

Blog
The best minds from Teradata, our partners, and customers blog about whatever takes their fancy.
Enthusiast

Unstructured data can be dealt with effortlessly in Teradata. Regular expression has been around for many years in software fields. With the advent of Big data, hadoop, NO SQL, columnar, graph database, document  databases the usage of Regex is becoming more and more increasingly popular. The example highlighted below is just a tip of an iceberg of usage. There are umpteen features that can be incorporated into the databases. In fact, with Teradata 15, software developers can write functions and scripts in almost any programming language, install them and execute them inside Teradata Database, and run them in parallel for efficient analysis of large data sets.Customers can write scripts in languages such as Ruby, Python, Perl, and R.

Data streaming from disparate sources such as logs, mobiles, machine etc can be in any format. They need to be spruced up in a consistent manner, value to business. 

It saves a lot of time and money. Why Java code? It can be re-used in any environment especially hadoop, Big data Technologies. Below sample code highlights the usage. It searches for a pattern of ssn:

1) ssn_search.java

import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class ssn_search {

     public static String main(String args1) throws Exception {

          if(args1.matches("^(\d{3}-?\d{2}-?\d{4})$")){

            return args1;

           }

          else

            return null;

   }

}

Note: Could have taken the pattern as parameter 2. However, it is left intentionally.

2) Compile: $/opt/teradata/jvm64/jdk5/bin/javac ssn_search.java

3)  Create a jar file:  $/opt/teradata/jvm64/jdk5/bin/jar -cf ssn_search.jar ssn_search.class

Login to bteq ( Here it is logged in with admin user) to load jar file

4) call sqlj.install_jar(‘CJ!/opt/teradata/jvm64/jdk5/bin/ssn_search.jar’, ‘ssn_search’, 0);

Chance of  getting an error " The user does not have CREATE EXTERNAL PROCEDURE WITH GRANT...."

Search where you may want to have it

eg: GRANT CREATE EXTERNAL PROCEDURE  ON syslib to DBC with grant option;

Verify that Grant is accepted else you can change ON other DB.

You can change your DB to syslib as database syslib; 

If you execute CALL SQLJ.INSTALL_JAR(‘CJ!/opt/teradata/jvm64/jdk5/bin/ssn_search.jar’, ‘ssn_search’, 0);

you may be challenged by an error " The user does not have EXECUTE PROCEDURE access to SQLJ.INSTALL_JAR

You need to do:

grant execute procedure on  SQLJ.INSTALL_JAR to dbc with grant option;

Verify that Grant is accepted.

5)  Create function:

REPLACE FUNCTION raja_search (string1 VARCHAR(1000))

RETURNS VARCHAR(1000)

LANGUAGE JAVA NO SQL

PARAMETER STYLE JAVA

EXTERNAL NAME ‘search_ssn:search_ssn.main’;

6) Using the udf:

Select a.*,syslib.ssn_search(ssn_det) from retail.source2;

Quod Erat Demonstrandum

1 Comment
Enthusiast

Hi Raja,

Thanks for the Informative article above.

I am trying to Create a Java UDF by first installing the JAR file using the command below :

CALL SQLJ.INSTALL_JAR(‘CJ!?C:/JAR/test.jar’, ‘test’, 0);

but once i execute it get the below error :

“[112001]Source Code for UDF or External Stored Procedure must reside on the Teradata Server”.

Since we have used the "CJ",  I have placed the JAR file locally to my windows client (C:/JAR), but still its prompting to put the JAR on the server.

Can you pls suggest on this.

Regards,

Nishant