10.1. SPI Overview

    Plugins can provide additional Connectors, ,Functions and .In particular, connectors are the source of all data for queries inPresto: they back each catalog available to Presto.

    The SPI source can be found in the directory in theroot of the Presto source tree.

    Each plugin identifies an entry point: an implementation of thePlugin interface. This class name is provided to Presto viathe standard Java ServiceLoader interface: the classpath containsa resource file named com.facebook.presto.spi.Plugin in theMETA-INF/services directory. The content of this file is asingle line listing the name of the plugin class:

    The Plugin interface is a good starting place for developers lookingto understand the Presto SPI. It contains access methods to retrievevarious classes that a Plugin can provide. For example, the method is a top-level function that Presto calls to retrieve a ConnectorFactory when Prestois ready to create an instance of a connector to back a catalog. There are similarmethods for Type, ParametricType, Function, SystemAccessControl, andEventListenerFactory objects.

    Plugins depend on the SPI from Presto:

    The plugin uses the Maven scope because Presto providesthe classes from the SPI at runtime and thus the plugin should notinclude them in the plugin assembly.

    All other dependencies are based on what the plugin needs for itsown implementation. Plugins are loaded in a separate class loaderto provide isolation and to allow plugins to use a different versionof a library that Presto uses internally.

    For an example pom.xml file, see the example HTTP connector in thepresto-example-http directory in the root of the Presto source tree.

    In order to add a custom plugin to a Presto installation, create a directoryfor that plugin in the Presto plugin directory and add all the necessary jarsfor the plugin to that directory. For example, for a plugin calledmy-functions, you would create a directory my-functions in the Prestoplugin directory and add the relevant jars to that directory.

    Plugins must be installed on all nodes in the Presto cluster (coordinator and workers).