在 hive 和 presto 中创建 named_struct 的常用语法

Common syntax for creating named_struct in hive and presto

我正在尝试定义一个 sql 视图,该视图从源结构数据类型中选取元素子集并创建一个新结构。在蜂巢中我可以这样做:

create view myview as 
select
    id,
    named_struct("cnt", bkg.cnt, "val", bkg.val) as bkg
from mybkgtable

这行得通。问题是,当从 presto 调用这个视图时,它失败了:Function named_struct not registered

发现presto没有struct数据类型,而是ROW。它适用于以下语法:

select
    id,
    CAST(ROW(bkg.cnt, bkg.val) as row(cnt integer, val double)) as bkg
from mybkgtable

但是,Hive 无法理解此语法。

问题是,是否可以有一个同时适用于 hive 和 presto 的视图定义?

Question is, is it possible to have one view definition that works on both hive and presto?

遗憾的是,没有。

您可以使用 coral 在 hiveql 中编写视图定义并将其转换为 presto。

https://github.com/linkedin/coral

https://engineering.linkedin.com/blog/2020/coral