kettle中实现动态SQL查询
kettle中实现动态SQL查询
在项⽬中,通常有根据运⾏时输⼊参数去执⾏⼀些SQL语句,如查询数据。本⽂通过kettle中的表输⼊(“table input”)步骤来说明动态查询、参数查询。⽰例代码使⽤内存数据库(H2),下载就可以直接运⾏,通过⽰例学习更轻松。
查询语句中占位符绑定字段值
第⼀个接近动态语句的是⼤家熟悉的从SQL代码中执⾏,开始写⼀个SQL查询,包含⼀些,然后绑定值到占位符,使之成为⼀个有效的查询并执⾏。根据需要可以绑定多个值并循环执⾏。本⽰例的名称为placeholders.ktr⽂件。
在⽰例中,⾸先创建presidents表并填⼊数据(关于美国总统的内容),代码如下,分别为:名称、州、政党、职业、毕业院校、任职⽇期、离职⽇期。
CREATE  presidents(
name
统计学constant什么意思
VARCHAR(255),
state VARCHAR(255),
div背景透明度
party VARCHAR(64),
occupation VARCHAR(64),
college VARCHAR(64),
took_office DATE,
left_office DATE
);
下⾯的查询语句⽤问号占位符,当开始⽇期(第⼀个?号)和结束⽇期(第⼆个?号)绑定到SQL的问号占位符,在查询⼊职⽇期在⼀定期间的总统信息:
SELECTname,took_office FROM presidents WHEREtook_officeBETWEEN?
AND?
⽰例中,⾸先使⽤⽣成⾏步骤(“Generdate Rows”)⽣成⼀⾏带有两个字段的记录,分别按顺序代替表输⼊中的占位符。实际场景中,通常使⽤动态处理结果产⽣期望值代替⽣成⾏步骤。
接下来是表输⼊步骤,其中配置SQL查询语句,包含问号占位符,通过在“Insert Data Step”的下拉框中选择前⼀步骤,来替换问号的值。
通过传输不同的值多次执⾏查询
如果你想循环执⾏查询,使⽤不同值替换占位符;就需要占位符⽣产步骤⽣成多⾏数据,并把表输⼊的选项“Execute for each row”选中。 本⽰例⽂件名称为placeholders_in_loop.ktr。
占位符的局限性
虽然通过给占位符绑定值查询⾮常有效,但也有⼀些场景不能使⽤,下⾯⼀些SQL不能使⽤占位符。这些⽰例都⾮常通⽤,但是不能使⽤占位符。
不能⽤占位符代替表名词,否则查询将不执⾏。
SELECT some_fieldFROM ?
不能使⽤占位符代替查询的字段名称,下⾯的查询可以成功绑定,但只是作为⼀个常量,⽽不是字段的名称。
SELECT ? asmy_field FROM table
documentary draft
不能使⽤占位符绑定逗号分隔的多个列表项值;如果你绑定 “1,2,3″ 给下⾯的查询语句,将得到意外的结果。
SELECT * FROM testWHERE id IN (?)
你期望得到的结果是:
SELECT * FROM testWHERE id IN ("1,2,3")
但是运⾏的结果却是这样,传输⼀个字符串,却得到三个值,⽽实际情况完全不确定有⼏个值传输进来。
SELECT * FROM testWHERE id IN (1,2,3)
为了解决这些场景的问题,需要使⽤的变量动态构造查询⽂本,下⾯详细说明。
SQL查询中使⽤kettle变量
mysql语句的执行顺序表输⼊步骤⽀持替换查询中的变量或参数,假设有⼀系列结构完全相关的表,分别是: mammals, birds, insects(动物、鸟、昆⾍),可以使⽤kettle变量作为表的名称。假设我们有⼀个变量,名称为:ANIMALS_TABLE,赋值为birds,我们设置“Replace Vaiables”选项选中。如果我们写下⾯的查询:
SELECT name,population FROM ${ANIMALS_TABLE}
在执⾏⼀定被成功的替换成:
SELECT name,population FROM birds
如果设置变量的值为“mammals”或“insects”,则将动态查询不同的表。当占位符不能胜任是,使⽤变
量技术可以帮助我们解决。⽰例的名称为variables.ktr,运⾏时不要忘了给parameter(命名参数)赋值进⾏测试。有人懂webservice吗
变量和占位符⼀起使⽤
如果有必要,我们可以混合这两种技术;本⽰例中使⽤变量作为表名词,同时使⽤占位符作为前⾯步骤的输⼊值。⽰例⽂件
variables_and_placeholders.ktr。
SELECT name, population FROM ${ANIMALS_TABLE}WHERE population > ?
⽰例下载
昆明编程培训机构可以在下载⽰例⽂件。所有⽰例都kettle5.1版中测试通过,⽽且测试数据是⽤H2数据库,下载后可以直接运⾏,⾮常容易,希望你学习顺利。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。