Presto自定义函数

这篇具有很好参考价值的文章主要介绍了Presto自定义函数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、引入所需pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.czj</groupId>
    <artifactId>presto</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>7</source>
                    <target>7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <configuration>
                    <createDependencyReducedPom>false</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <artifactSet>
                                <includes>
                                    <include>com.yahoo.datasketches:memory</include>
                                    <include>com.yahoo.datasketches:sketches-core</include>
                                    <include>com.google.guava:guava</include>
                                </includes>
                            </artifactSet>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <name>presto</name>
    <description>presto</description>
    <dependencies>
        <dependency>
            <groupId>com.facebook.presto</groupId>
            <artifactId>presto-spi</artifactId>
            <version>0.281</version>
        </dependency>
        <dependency>
            <groupId>com.facebook.presto</groupId>
            <artifactId>presto-array</artifactId>
            <version>0.264</version>
        </dependency>
        <dependency>
            <groupId>com.google.gdata</groupId>
            <artifactId>core</artifactId>
            <version>1.47.1</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13</version>
            <scope>compile</scope>
        </dependency>

        <dependency>
            <groupId>com.yahoo.datasketches</groupId>
            <artifactId>sketches-core</artifactId>
            <version>0.13.0</version>
        </dependency>
    </dependencies>

</project>

2、添加resources

创建目录META-INF/services

创建文件 com.facebook.presto.spi.Plugin,指明你所实现的Plugin位置文章来源地址https://www.toymoban.com/news/detail-535491.html

com.test.presto.function.InstallPlugin

3、函数的实现

import com.facebook.presto.common.type.StandardTypes;
import com.facebook.presto.spi.function.Description;
import com.facebook.presto.spi.function.ScalarFunction;
import com.facebook.presto.spi.function.SqlType;
import com.yahoo.memory.Memory;
import com.yahoo.sketches.tuple.DoubleSummary;
import com.yahoo.sketches.tuple.DoubleSummaryDeserializer;
import com.yahoo.sketches.tuple.Sketch;
import com.yahoo.sketches.tuple.Sketches;
import io.airlift.slice.Slice;
/**
将byte[]的sketch转换成double类型
*/
public class SketchFunciton {

    @ScalarFunction("sketch_estimate")
    @Description("hive sketch to double function")
    @SqlType(StandardTypes.DOUBLE)
    public static double sketch_estimate(@SqlType(StandardTypes.VARBINARY) Slice input) {
        try {
            Sketch<DoubleSummary> sketch = Sketches.heapifySketch(
                    Memory.wrap(input.byteArray()),
                    new DoubleSummaryDeserializer()
            );
            return sketch.getEstimate();
        } catch (Exception e) {
            e.printStackTrace();
            return -1d;
        }
    }
}

实现Plugin接口

import com.facebook.presto.spi.Plugin;
import com.google.common.collect.ImmutableSet;

import java.util.Set;


public class InsightPlugin implements Plugin {
    @Override
    public Set<Class<?>> getFunctions()
    {
        return ImmutableSet.<Class<?>>builder()
                .add(SketchFunciton.class)
                .build();
    }
}

4、打包放入presto安装目录的plugin目录中(博主非常规操作,放入了plugin/hive-function-namespace)

5、重启presto服务,即可使用自定义函数

到了这里,关于Presto自定义函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • presto插件机制揭秘:探索无限可能的数据处理舞台

    :Presto Plugin 本文源码环境: presto: prestoDb 0.275版本 在Presto框架中插件机制设计是一种非常常见和强大的扩展方式。它可以使软件系统更加灵活和可扩展,允许用户根据自己的需求和偏好自定义和扩展系统功能。在 Presto 这样的分布式 SQL 查询引擎中,插件机制发挥着重

    2024年02月05日
    浏览(73)
  • 【大数据】Presto(Trino)REST API 与执行计划介绍

    Presto(现在叫Trino)是一个分布式SQL查询引擎,它允许用户在多个数据源上执行查询。Presto本身是一个独立的Java程序,可以通过REST API与其他应用程序进行通信。 Presto的REST API是一组HTTP接口,可以用于与Presto服务器进行通信,并提交查询请求、获取查询结果等。以下是Presto

    2024年02月07日
    浏览(49)
  • 以getPositionList为例,查找接口函数定义及接口数据格式定义

    job-app-master/pages/index/index.vue中299行 job-app-master/pages/index/index.vue中46行 /job-app-master/components/yzb/yzb-position.vue中62行  /job-app-master/components/yzb/yzb-position.vue中3行 从第三行就能看到接口的全部属性。需要整理 另外,/job-app-master/apis/index.js第135行是接口地址定义:  接口请求时携带的

    2024年02月11日
    浏览(41)
  • 什么是数据库中的函数(库函数与自定义函数)

    目录 数据库的库函数 一、聚合函数: 1、count: 二、日期时间函数: 1:now: 2:data 3:time 4:date_format 三、常用的库函数 1:upper 2:lower 3:substring 4:round 5:length 6:concat 7:database 8:user 9:power 四、其他函数: 自定义函数的创建: 自定义函数function 1、 函数创建 2、函数调用 3、自定义

    2024年02月02日
    浏览(68)
  • vue3的setup函数中定义data数据,使用data数据

    vue3保留了vue2的语法,但是不能混着用,setup中定义原有vue2中data数据的方法有所改变 直接上代码 对比原有vue2代码 data() {             return {                 name: \\\"张三\\\",                 age:18             }     } 在setup函数中使用数据也无需 this.xxx, 而是用你定义的名字

    2024年02月12日
    浏览(38)
  • 07_Hudi案例实战、Flink CDC 实时数据采集、Presto、FineBI 报表可视化等

    7.第七章 Hudi案例实战 7.1 案例架构 7.2 业务数据 7.2.1 客户信息表 7.2.2 客户意向表 7.2.3 客户线索表 7.2.4 线索申诉表 7.2.5 客户访问咨询记录表 7.3 Flink CDC 实时数据采集 7.3.1 开启MySQL binlog 7.3.2 环境准备 7.3.3 实时采集数据 7.3.3.1 客户信息表 7.3.3.2 客户意向表 7.3.3.3 客户线索表 7

    2024年02月13日
    浏览(50)
  • 【Spark+Hadoop+Hive+MySQL+Presto+SpringBoot+Echarts】基于大数据技术的用户日志数据分析及可视化平台搭建项目

    点我获取项目数据集及代码 随着我国科学技术水平的不断发展,计算机网络技术的广泛应用,我国已经步入了大数据时代。在大数据背景下,各种繁杂的数据层出不穷,一时难以掌握其基本特征及一般规律,这也给企业的运营数据分析工作增添了不小的难度。在大数据的背景

    2024年02月10日
    浏览(62)
  • 3.6.3数据库系统-模式分解:是否保持函数依赖、保持函数依赖分解定义、无损分解、表格法、公式法

    函数依赖是通过某一个维度可以函数决定另一个部分,这里在关系模式中函数依赖一定是存在于属性之间的,只要属性在,函数依赖就存在与属性之间,在考虑模式分解的过程中,分解前有一个关系模式, 比如属性集如下: 学生(学号,姓名,系号,系名,系位置) 分解前

    2024年02月08日
    浏览(50)
  • 【重新定义matlab强大系列七】利用matlab函数ischange查找数据变化点

    🔗 运行环境:matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 ####  防伪水印—— 左手の明天 #### 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天开启新的系列—— 重新定义matlab强大系列 💗 📆  最近更新:

    2024年02月06日
    浏览(53)
  • 【重新定义matlab强大系列五】函数filloutliers检测并替换数据中的离群值

    🔗 运行环境:matlab 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥  推荐专栏:《算法研究》 ####  防伪水印—— 左手の明天 #### 💗 大家好🤗🤗🤗,我是 左手の明天 !好久不见💗 💗今天开启新的系列—— 重新定义matlab强大系列

    2024年02月04日
    浏览(158)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包