避免在 Presto 中多次计算相同的值
Avoid computing same value multiple times in Presto
样本Table:
╔═══════════════╗
║ dummy_data ║
╠═══════════════╣
║ XXX_1234_YYYY ║
║ XXX_5678_YYYY ║
║ XXX_9101_YYYY ║
╚═══════════════╝
期望的输出:
╔═══════════════╦═════════════╦═════════════╗
║ dummy_data ║ with_prefix ║ with_suffix ║
╠═══════════════╬═════════════╬═════════════╣
║ XXX_1234_YYYY ║ Pre_1234 ║ 1234_Suf ║
║ XXX_5678_YYYY ║ Pre_5678 ║ 5678_Suf ║
║ XXX_9101_YYYY ║ Pre_9101 ║ 9101_Suf ║
╚═══════════════╩═════════════╩═════════════╝
目前我正在尝试编写 Presto Query
以在 Amazon Athena
、
上使用
select
dummy_data,
'Pre_' || split(dummy_data,'_')[2] as with_prefix,
split(dummy_data,'_')[2] || '_Suf' as with_suffix
from dummy_table
上述查询导致 split(dummy_data,'_')[2]
被计算两次。是否有办法避免双重计算? Presto 是否也发现它是相同的计算并避免重新计算?
我试图避免使用 子查询 或 With 子句。
目前 Presto 没有 de-decuplicate sub-expression 计算。我为此创建了功能请求:https://github.com/prestosql/presto/issues/1070。
您可以通过检查 EXPLAIN
输出看到表达式被多次求值(例如参见问题)。
如您所知,您可以使用内联视图强制 de-duplication:
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)
);
样本Table:
╔═══════════════╗
║ dummy_data ║
╠═══════════════╣
║ XXX_1234_YYYY ║
║ XXX_5678_YYYY ║
║ XXX_9101_YYYY ║
╚═══════════════╝
期望的输出:
╔═══════════════╦═════════════╦═════════════╗
║ dummy_data ║ with_prefix ║ with_suffix ║
╠═══════════════╬═════════════╬═════════════╣
║ XXX_1234_YYYY ║ Pre_1234 ║ 1234_Suf ║
║ XXX_5678_YYYY ║ Pre_5678 ║ 5678_Suf ║
║ XXX_9101_YYYY ║ Pre_9101 ║ 9101_Suf ║
╚═══════════════╩═════════════╩═════════════╝
目前我正在尝试编写 Presto Query
以在 Amazon Athena
、
select
dummy_data,
'Pre_' || split(dummy_data,'_')[2] as with_prefix,
split(dummy_data,'_')[2] || '_Suf' as with_suffix
from dummy_table
上述查询导致 split(dummy_data,'_')[2]
被计算两次。是否有办法避免双重计算? Presto 是否也发现它是相同的计算并避免重新计算?
我试图避免使用 子查询 或 With 子句。
目前 Presto 没有 de-decuplicate sub-expression 计算。我为此创建了功能请求:https://github.com/prestosql/presto/issues/1070。
您可以通过检查 EXPLAIN
输出看到表达式被多次求值(例如参见问题)。
如您所知,您可以使用内联视图强制 de-duplication:
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)
);