DataWorks中create table testSql2 LIFECYCLE 10 AS
select "select * from hongxu_core.compete_data_result where pt='20230520' limit 1";
select * from hongxu_core.compete_data_result where pt='20230520' and biz_db_primary_id=(select * from testSql2) 我有这样一个需求,一个sql保存在另一张表中,需要能这样查询出结果,但是我在dataworks发现 sql被当作纯字符串了,没有当作sql执行,我应该怎么做?
在使用DataWorks中的SQL节点时,如果需要将一个SQL语句嵌入到另一个SQL语句中,可以通过使用变量参数的方式来实现。具体操作步骤如下:
1首先,在“组件”页面中创建两个SQL节点,一个用于保存需要执行的SQL语句,另一个用于包含需要引用的SQL语句。
2在保存需要执行的SQL语句的节点中,选择“高级属性设置”,然后添加一个参数,并将SQL语句作为参数值。例如,可以定义一个名为“sqlText”的参数,它的值为“select * from hongxu_core.compete_data_result where pt='20230520' limit 1”。
3在需要引用该SQL语句的节点中,编写一个SQL语句,其中使用“${paramName}”的格式来引用参数。例如,可以编写一个查询语句,如下所示:
select * from hongxu_core.compete_data_result
where pt='20230520' and biz_db_primary_id=(select * from (${sqlText}))
在这个查询语句中,“${sqlText}”引用了第一个节点中定义的“sqlText”参数。使用这种方式可以将一个SQL语句作为参数传递给另一个SQL语句,并在其中进行引用。
4配置好SQL节点后,就可以提交和运行任务,查看结果了。
希望这些步骤能够帮助你解决问题。
您可以在DataWorks中创建一个存储过程,将该SQL语句作为存储过程的输入参数,然后在存储过程中执行该SQL语句并返回结果。这样就可以在DataWorks中执行该存储过程并获取结果了。
以下是一个示例存储过程的代码:
CREATE PROCEDURE GetCompeteDataResult
@sql NVARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @table_name NVARCHAR(MAX)
SELECT @table_name = OBJECT_NAME(@@PROCID)
SET @sql = 'SELECT * FROM ' + @table_name + ' WHERE pt = ''20230520'' AND biz_db_primary_id = (' + CHAR(39) + @sql + CHAR(39) + ') '
EXECUTE(@sql)
END 在上面的代码中,我们首先获取当前存储过程的名称,然后将@sql参数添加到SQL语句中。最后,我们执行该SQL语句并返回结果。
然后,您可以在DataWorks中调用该存储过程并传入您的SQL语句作为输入参数,例如:
CALL GetCompeteDataResult 'select * from hongxu_core.compete_data_result where pt=''20230520'' limit 1' 这将执行您的SQL语句并将其结果返回给您。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
DataWorks基于MaxCompute/Hologres/EMR/CDP等大数据引擎,为数据仓库/数据湖/湖仓一体等解决方案提供统一的全链路大数据开发治理平台。