我正在使用PDI运行存储在oracle DB中的sql查询,然后使用文本文件输出步骤将结果提取到文件中。每个摘录都不同,所以我无法设置输出字段。如何将输出的日期格式默认为该特定提取所指定的格式?
我有一个查询表,其中包含SQL查询和查询所需的日期格式。
我意识到我可以对查询本身使用格式化,但是我想知道是否可以在PDI中完成。实际上有数百种,这意味着工作量将大大减少。
答案 0 :(得分:0)
我知道没有标准的方法。当然要使用User Defined Java Class
或Metadata Injector
。
但是,直到您要在文件中写入数据格式时,PDI中的数据格式才是无关紧要的。而且即使您在输入上有数百种可能(根本不会打扰Kettle),我相信您在输出上只有很少的可能性。
因此,在最后一个输出步骤之前,在表中进行查找,然后切换到适当的Select value
步骤,在Metadata tag
中,您可以将格式附加到Date字段,在将Text output
步骤中的流放入未指定字段之前。
答案 1 :(得分:0)
好吧,我不知道这是否有帮助,但这是我提取日期并在Text File Output
步骤甚至Table Input/Output
或Execute SQL Step
中使用它的目的。
在“作业级别”中执行此操作,将其拆分为某些转换,然后使用Set variable
或Copy row to result
步骤。
第一个转换称为 DateTime转换 在此转换中,您将创建动态日期时间值,稍后我们将使用它。
使用Get System Info
步骤,使字段[Fieldname]的类型为system date (variable)
。 [Fieldname]将包含该转换运行时的当前日期时间。
添加Calculator
步骤,在此您将Get System Info
的日期时间[Fieldname]分为几部分。
示例。 (关注此专栏) 通常我将其分为天,月,年,小时,分钟
New Field | Calculation | Field A | Value type
---------------------------------------------------------------------
Daytrans | Day of month of Date A | [Fieldname] | String
Monthtrans | Month of Date A | [Fieldname] | String
Yeartrans | Year of Date A | [Fieldname] | String
Hour | Hour of Day of Date A | [Fieldname] | String
Minute | Minute of Hour of Date A | [Fieldname] | String
Filename | Set Field to Constant Value A | "Filename_" | String
注意。 “文件名_”,不带引号。
Formula
步骤将日期合并为任意格式。示例。 (yyyymmdd,yyyy / mm / dd)
New Field | Formula | Value type
------------------------------------------------------------------------------------------
yyyymmdd | [Filename] & [Yeartrans] & [Monthtrans] & [Daytrans] | String
yyyy/mm/dd | [Filename] & [Yeartrans] & "/" & [Monthtrans] & "/" & [Daytrans] | String
注意。 您可以根据需要创造性地设置日期时间格式。
并在公式中创建如下条件:
[Yeartrans] & if([Monthtrans] < 10; "0" & [Monthtrans]; [Monthtrans]) & if([Daytrans] < 10; "0" & [Daytrans]; [Daytrans])
。
我通常在我希望结果像这样的20190701时使用它。
为什么?因为如果不使用if
,结果将像是201971,而在2019年7月1日没有0
。
使用Select Value
步骤来过滤要使用的字段,仅此[yyyymmdd]和此[yyy / mm / dd]字段。
最后一次使用Set variable
或Copy row to result
步骤,因此您可以在其他转换中使用它。
第二次转换称为数据处理
Get Row from result
或Get Variable
步骤Text File Output
步骤,在文件名框中进行配置,您只需要使用以下命令调用变量:${Variablename}
完成。并且不要忘记在Text File Output
Fields
标签中,使用buttom Get Field自动填写或您自己手动填写。
您还可以在查询中使用该datetime变量,只需选中variable subtitution
步骤中的Execute Query
框或Replace variable in script
步骤中的Table Input
框即可。或使用连接行(笛卡尔)通过连接2源将其输出为文件中的数据
结果将如下所示:Filename_20190701.csv
对不起,英语写得不好,但希望能有所帮助。