Kettle Internal.Job.Filename.Directory - pentaho

I am new to Pentaho Kettle and I am wondering what the Internal.Job.Filename.Directory is?
Is it my SPoon.bat folder, or the job/xfrm folder i created?
Is there a way I can change it to point to particular folder?
I am runnig spoon.bat in Windows XP.

Internal.Job.Filename.Directory is only set when you don't use a repository, and it is set automatically. You cannot set it manually.
How not to use an repository?
When you start Spoon, you get a dialog which asks for a repository. Just close this dialog with cancel and you're fine!
It took me a while to find this: I was wondering why Internal.Job.Filename.Directory was always empty. The repository was the cause.
It's documented here: http://jira.pentaho.com/browse/PDI-7434

Internal.Job.Filename.Directory is an internal variable that is always available. It points to the directory in which the job lives.
You can find more information here.

This variable is deprecated now in version 7 and newer. You should use Internal.Entry.Current.Directory and this works regardless of repository or not, hence you can build more portable code.

Internal.Job.Filename.Directory is kettle environment variable which points to the location of job on disk.

To set value to variable Internal.Job.Filename.Directory, you need to launch Job in this
way:
String filename="path_filename";
KettleEnvironment.init();
JobMeta jobMeta = new JobMeta(filename, null);
Job job = new Job(null, jobMeta);
job.start();
job.waitUntilFinished();

this is the variable for your folder where the current job you are at resides.
if you dont use repository then you need to specify where the transformations are.
to make it more flexible you can put the jobs and trasformations at the same folder
and then you can use the Internal.Job.Filename.Directory.
so if your transformation is called : my.ktr
then to call it in the job you can point to it by {Internal.Job.Filename.Directory}/my.ktr
you can learn more about it at my course : pentaho tutorial

Related

Pentaho - How to set job transformation based on Kettle Property File

In my kettle file, I have this variable:
my_variable = c:/Users/me/Desktop
In my Pentaho job, I have a start step connected to a transformation.
In the transformation step, I am trying to run my transformation. For the location of the file, I have:
${my_variable}/name_of_transformation.ktr
For some reason, it can't find my file. What am I doing wrong?
I figured it out.
When you set the my_variable value in the Kettle Properties file, CLOSE OUT of Pentaho (not the file, but the entire software) and reopen it.
Do this anytime you make changes to the Kettle Properties file if you want it to be recognized.
Now, using the exact same set up as my question, it works fine. All I needed to do was close Pentaho completely and restart the software.

Dynamic path creation

While developing transformations on local I set my transformation path to the target folders that are presented in Local PC and Once testing is completed on local I am moving our transformation to server repository to schedule it from server environments but every time I require to change the path set to the server folders. I believe it can be done by creating dynamic path or creating any variable but I am unable to resolve it. Is this option available in Pentaho? if Yes, Can you please help me for setting the dynamic path?
In This answer there is a link to a described solution, and in the answer i have a sample KTR that should help.
You can also use the pentaho properties file in different environments, meaning, you can utilize the same variable in both environments, say ${path}, but in each environment this has a different value.
kettle.properties can be found in your user folder .. C:\Users\YourUser.kettle
The standard way to handle environments in Kettleis with variables.
In the home directory there is a (hidden) folder named .kettle which contains every thing that should be local : your preferences, your shared connections, your cache, and, most of all, THE kettle.property file.
You can define variables in it, like a ${myPath}. To do this, use the menu Edit/Edit the Kettle.properties and add a variable named myPath and give it for value your prefered path, with an optional description.
Then, when you see a blue diamond with a $ on the right of a field in a step window (which means almost any field you'll need), you can press Crtl+Enter in the field and choose any variable defined in your kettle.properties. Alternatively, you may type or copy/paste ${your-variable-name} in the field.
Then, when launching spoon, it will not use the hard-coded path, but the content of the variable in the kettle.properties.
And nothing prevent you from having a different kettle.properties on your dev PC and on the prod server.
While we are there, three usefull tricks.
There is a predefined ${Internal.Job.Filename.Directory} variable contaning the path of the current transformation which by used for relative path. For example, ${Internal.Job.Filename.Directory}/../myDir/myFile.ext.
If you right-click anywhere on the screen, and go to the Properties/Parameters, you may also define your variable here.
You may also redefine these variables in the Run Option window that anoys you each time you rune a transformation (yes, there was a reason).
Finally, you can send these variables from job to jobs and transfos.

In Pentaho How can I set the dynamic file path or folder directory for file repository in kettle jobs?

How can I set the dynamic file path or folder directory for kettle jobs?
Please check the attached screenshot.
Goal: Read the path from a config file as a variable[so that we can change the path dynamically as per the other parameters.]
Details: Say, we want to use the /web/test directory for test environment and we want to fetch file repository from the normal path when the parameter is not test! I assume, there must be a way to keep a config/ini file from where we can read the path and use the variable inside the "File/Directory" section of pentaho.
I am gone through variable reference option but which is mainly for database configurations parameter ,some people suggested which is not good option instead of you can specified the database configuration in xml.
Please suggest any idea or solution.
Sounds like you want to set a parameter/variable in the .kettle file and reference it in the File or directory text box. Note the red dollar sign next to the box. That means this field accepts variables. Here's the wiki entry for variables:
PDI Variables
You can also read from a config file directly (from a transform) and set it dynamically with the Set variables step if you can only have one .kettle file. Also check out the Check if connected to repository (from the Repository branch) step as well and see if that will suit your needs.
If none of these suite your needs, please add detail to your question to describe exactly what you're trying to do and how you're trying to do it.

Intellij 11.1.5 - Project specific path variable

I am using the Intellij 11.1.5. We are a large team, and have a pretty complex project setup. so we've made a template and when someone needs a new project set up, we just clone it and she is pretty much ready to go. One other thing i would like to automate is the creation of run configurations. One such configuration starts a custom bat file that requires a parameter representing a path that is user specific. I wanted to know if can store that value as a path variable specific to each project. Maybe somewhere in the .idea folder in my project. I know that Intellij stores it in its .IntelliJIdea11\config\options\path.macros.xml file, but is there a way to tweak that?
Any other idea that would allow me to locally store a parameter passed to the run config script would be usefull.
Thanks
I'm afraid you can't do it in IDEA, but you can use some environment variable directly in the .bat file instead of using the parameter (or rewrite the batch script to detect this value automatically, if possible). Instruct your users to define this environment variable.
IDEA Path variables are global and cannot be made project specific.

How to skip Ivy publish without causing error?

I would like to skip publishing an artifact if it already exists in the repository, but as far as I can see from the documentation there isn't a way to do this. There is an overwrite attribute, but if set to false that causes the publish to fail if the artifact exists. I definitely don't want to overwrite the artifact, either.
I've looked into using <ivy:info> and <ivy:findrevision> to see if the artifact exists and set a property I can use on my publish target (as an unless attribute, for example), but neither of these tasks allows me to specify the repository to check.
I'd rather not resort to using an external taskdef, like antcontrib's try/catch tasks.
Does anyone have any other suggestions?
Info and findrevision allow the settingsRef-attribute. So you could use an extra settings-file that only references the resolver you need (via ivy:settings and ivy:configure) and use that settingsRef in your task.
Why would you run the "publish" task if you don't intend saving what you built?
I use the buildnumber task to ensure that my version number is incremented automatically based on what was previously published.