Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么雪花查询不需要横向关键字就可以工作?_Sql_Snowflake Cloud Data Platform_Lateral Join - Fatal编程技术网

Sql 为什么雪花查询不需要横向关键字就可以工作?

Sql 为什么雪花查询不需要横向关键字就可以工作?,sql,snowflake-cloud-data-platform,lateral-join,Sql,Snowflake Cloud Data Platform,Lateral Join,我在《雪花》中有这样的观点: create or replace view foo as select $1 as id_foo, $2 as sales from (values (1,100),(2,200),(3,300)); 这是: 以下查询工作,并返回3行: select id_foo, baz.aux_id from foo cross join table(build_aux_table(foo.id_foo)) baz; 然而,我并不期望查询能够编译,因为我们要

我在《雪花》中有这样的观点:

create or replace view foo as 
select $1 as id_foo, $2 as sales
  from (values (1,100),(2,200),(3,300));
这是:

以下查询工作,并返回3行:

 select id_foo, baz.aux_id
  from foo
 cross join table(build_aux_table(foo.id_foo)) baz;
然而,我并不期望查询能够编译,因为我们要连接的UDTF生成的表依赖于第一个表中的一列。我的理解是,这种表内依赖关系需要一个连接,如下所示(这也适用):


为什么没有横向查询会起作用?

雪花手册中没有明确提到(至少在您链接到的地方),但标准行为是,
LATERAL
关键字对于函数是可选的。引用

出现在
FROM
中的表函数前面也可以有键 单词
横向
,但是对于函数,关键字是可选的;这个 函数的参数可以包含对由提供的列的引用 在任何情况下,从项中选择前面的

粗体强调我的

这也有道理,伊姆霍。如果不是从其他表,函数从何处获取参数?将被限制为无横向参考的手动输入。

代码:

select id_foo, baz.aux_id
from foo
cross join table(build_aux_table(foo.id_foo)) baz;
基本上与:

select id_foo, baz.aux_id
from foo
,table(build_aux_table(foo.id_foo)) baz;
在文档中有描述:

这个简单的示例演示了如何调用UDTF。此示例传递文本值

SELECT * FROM TABLE(js_udtf(10.0::FLOAT, 20.0::FLOAT));
本例调用一个UDTF并从另一个表中传递值。在本例中,对名为tab1的表中的每一行调用一次名为js_UDTF的UDTF每次调用函数时,都会从当前行的c1和c2列传递值。

SELECT * FROM tab1, TABLE(js_udtf(tab1.c1, tab1.c2)) ;
select * 
from favorite_years y join table(favorite_colors(y.year)) c;

在与另一个表的联接中使用UDTF注意,表中的连接列作为参数传递给函数。

SELECT * FROM tab1, TABLE(js_udtf(tab1.c1, tab1.c2)) ;
select * 
from favorite_years y join table(favorite_colors(y.year)) c;

好地方。我希望有相同的行为:
“表函数也可以使用横向构造应用于一组行。”
@LukaszSzozda奇怪的是,关键字被描述为表函数,但它确实需要展平。另一个参数来源可能是副作用,比如获取当前时间戳或生成一些随机值(但视图可能在那里也能正常工作)。@danidiaz:有用的应用程序。但是,如果在
FROM
子句中没有横向表(表表达式),那么引用指向哪里呢?