Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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 避免在Presto中多次计算相同的值 样本表: 期望输出:_Sql_Presto_Amazon Athena - Fatal编程技术网

Sql 避免在Presto中多次计算相同的值 样本表: 期望输出:

Sql 避免在Presto中多次计算相同的值 样本表: 期望输出:,sql,presto,amazon-athena,Sql,Presto,Amazon Athena,目前我正在尝试编写一个Presto查询,用于亚马逊雅典娜 选择 虚拟数据, “Pre| | | split(伪|u数据,”|“[2]与_前缀一样, 拆分(虚拟_数据,“_”)[2]| | |“| Suf”与带_后缀的 从虚拟表格 上述查询导致计算两次split(伪数据,''u'[2]。有没有办法避免重复计算?普雷斯托是否也发现它是相同的计算,并避免重新计算 我试图避免使用子查询或With子句。目前,Presto不取消子表达式计算的重复。我为此创建了功能请求:。 通过检查EXPLAIN输出,可以

目前我正在尝试编写一个
Presto查询
,用于
亚马逊雅典娜

选择
虚拟数据,
“Pre| | | split(伪|u数据,”|“[2]与_前缀一样,
拆分(虚拟_数据,“_”)[2]| | |“| Suf”与带_后缀的
从虚拟表格
上述查询导致计算两次
split(伪数据,''u'[2]
。有没有办法避免重复计算?普雷斯托是否也发现它是相同的计算,并避免重新计算


我试图避免使用子查询或With子句。

目前,Presto不取消子表达式计算的重复。我为此创建了功能请求:。 通过检查
EXPLAIN
输出,可以看到表达式被多次计算(例如,请参见问题)

如您所知,您可以通过使用内联视图强制执行重复数据消除:

SELECT
    dummy_data,
    'Pre_' || sub_data  AS with_prefix,
    sub_data || '_Suf' AS with_suffix
FROM (
    SELECT
        dummy_data, 
        split(dummy_data,'_')[2] AS sub_data
    FROM (VALUES 'XXX_1234_YYYY') t(dummy_data)
);

目前,Presto不取消子表达式计算的重复。我为此创建了功能请求:。 通过检查
EXPLAIN
输出,可以看到表达式被多次计算(例如,请参见问题)

如您所知,您可以通过使用内联视图强制执行重复数据消除:

SELECT
    dummy_data,
    'Pre_' || sub_data  AS with_prefix,
    sub_data || '_Suf' AS with_suffix
FROM (
    SELECT
        dummy_data, 
        split(dummy_data,'_')[2] AS sub_data
    FROM (VALUES 'XXX_1234_YYYY') t(dummy_data)
);

谢谢,我会关注github的问题。谢谢,我会关注github的问题。
SELECT
    dummy_data,
    'Pre_' || sub_data  AS with_prefix,
    sub_data || '_Suf' AS with_suffix
FROM (
    SELECT
        dummy_data, 
        split(dummy_data,'_')[2] AS sub_data
    FROM (VALUES 'XXX_1234_YYYY') t(dummy_data)
);