OpenText Analytics Database images
The following table describes database server and automation tool images:
| Image | Tags | Description |
|---|---|---|
| Minimal image |
latest |
Optimized for Kubernetes. |
| Full image |
latest |
Optimized for Kubernetes, and includes the following packages for machine learning and UDx development:
Important
|
| VerticaDB operator |
latest |
The operator monitors the state of your custom resources and automates lifecycle tasks for OpenText™ Analytics Database on Kubernetes. For installation instructions, see Installing the VerticaDB operator. |
| Vertica-sdk |
latest |
Provides the required binaries, libraries, and C++ compilers for using user-defined extensions (UDxs). For more details on developing and compiling C++ UDxs, see Using the Vertica-SDK container. NoteYou cannot use the |
| Logger |
latest |
Lightweight image for sidecar logging. The logger sends the contents of vertica.log to STDOUT on the host node. For implementation details, see VerticaDB custom resource definition. |
| Kafka Scheduler |
latest |
Containerized version of the Kafka Scheduler, a mechanism that automatically loads data from Kafka into the database. For details, see Containerized Kafka Scheduler. |
| Client Proxy |
latest |
Standalone Go application to proxy messages between a database server and Postgres or database clients. |
Important
- The Community Edition (CE) single-node Enterprise Mode image and containers for test environments are no longer available. You can sign up for a free trial of OpenText™ Analytics Database.
- Unlike the other images, security vulnerabilities in the VerticaDB Operator image are fixed only in the latest version. If you're using an older version, upgrade to the newest release of the operator to ensure you receive all security patches. If you notice a security issue with any of the images, report it using the Security Acknowledgements process.
Using the Vertica-SDK container
Use the prebuilt UDx SDK container image to develop and compile C++ user-defined extensions (UDxs) for OpenText™ Analytics Database.
Prerequisites
- Docker installed and running.
- Access to the
vertica-sdkcontainer image. - A running OpenText™ Analytics Database instance for testing your UDxs.
- Run the
make vsdk-execcommand from the root of the UDx container (only if you want to use thevsdk-*scripts).
Getting started
-
Set your container image.
A set of
vsdk-*scripts is provided in the UDx-container to assist you throughout the development process. To use these scripts, first clone the repository. Then, set theVSDK_IMAGEenvironment variable to point to yourvertica-sdkcontainer image:export VSDK_IMAGE=opentext/vertica-sdk:ubuntu-v25.4.0-0 -
Add vsdk scripts to your PATH.
Download or clone the
vsdk-*scripts and add them to your PATH:export PATH=/path/to/vertica-containers/UDx-container:$PATH
Development workflow
The following outlines the UDx development workflow including available vsdk commands, compiling your UDx, and interactive development:
Available vsdk commands
The following commands are available for UDx development:
| Command | Description |
|---------|-------------|
| `vsdk-bash` | Opens an interactive bash shell in the SDK container |
| `vsdk-make` | Runs make with your Makefile inside the container |
| `vsdk-g++` | Compiles C++ code using g++ in the container |
| `vsdk-cp` | Copies files using the container environment |
| `vsdk-cleanup` | Removes stopped SDK containers |
Compiling your UDx
Basic Compilation
Navigate to your UDx project directory and use vsdk-make:
cd /path/to/your/udx-project
vsdk-make
This setup:
- Mounts your current directory into the container.
- Mounts your home directory into the container.
- Executes
makewith your project's Makefile. - Places the compiled libraries (
.sofiles) to your local directory.
Using vsdk-g++ directly
For simple projects without a Makefile:
vsdk-g++ -o myudx.so -shared -fPIC myudx.cpp \
-I/opt/vertica/sdk/include \
-L/opt/vertica/sdk/lib
Interactive Development
Open a bash shell in the SDK container to explore, debug, or manually compile:
vsdk-bash
Inside the container, you have access to:
/opt/vertica/sdk/-vertica-sdkheaders and examples.- Your home directory (mounted).
- Your current working directory (mounted).
- All development tools (g++, make, cmake, gdb, and so on).
Compiling SDK examples
# Copy examples to your local directory
vsdk-cp -r /opt/vertica/sdk/examples ./my-examples
# Navigate to the examples directory
cd my-examples
# Build the examples
vsdk-make ScalarFunctions
vsdk-make AggregateFunctions
vsdk-make TransformFunctions
# Compiled libraries will be in ./build/
ls -l build/*.so
Advanced usage
Mounting additional directories
If your build process needs access to files outside your current directory:
VSDK_MOUNT='/usr/local/lib /opt/mytools' vsdk-make
This mounts the specified directories at the same paths in the container.
Using an environment file
Create a file with environment variables for your build:
# build.env
CXX_FLAGS=-O2 -Wall
VERTICA_SDK=/opt/vertica/sdk
BUILD_TYPE=release
Use it with vsdk commands:
VSDK_ENV=build.env vsdk-make
Working with different images
If you work with multiple OpenText™ Analytics Database versions, you can switch between them easily:
# For OpenText™ Analytics Database 24.x development
export VSDK_IMAGE=opentext/vertica-sdk:ubuntu-v24.4.0-0
vsdk-make
# For OpenText™ Analytics Database 25.x development
export VSDK_IMAGE=opentext/vertica-sdk:ubuntu-v25.4.0-0
vsdk-make
Testing your UDx
Load the UDx into OpenText™ Analytics Database
After compiling your UDx, load it into your database:
-
Copy the compiled library to a location accessible by the database.
If your database is running on Docker:
docker cp myudx.so vertica-container:/tmp/If your database is running on Kubernetes:
kubectl cp myudx.so vertica-pod:/tmp/myudx.so # Or if you need to specify a specific container in a pod: kubectl cp myudx.so vertica-pod:/tmp/myudx.so -c vertica-server # Or copy to a specific namespace: kubectl cp myudx.so namespace/vertica-pod:/tmp/myudx.so -
Load the library in your database:
CREATE OR REPLACE LIBRARY myudx AS '/tmp/myudx.so' LANGUAGE 'C++'; -
Create your UDx function:
-- For a scalar function CREATE OR REPLACE FUNCTION my_function AS LANGUAGE 'C++' NAME 'MyFunctionFactory' LIBRARY myudx; -
Test your function:
SELECT my_function(column) FROM my_table;
Debug your UDx
If you encounter issues:
-
Use
vsdk-bashto investigate:vsdk-bash # Inside container: ldd /path/to/myudx.so # Check library dependencies nm -D /path/to/myudx.so # Check exported symbols -
Compile with debug symbols:
vsdk-g++ -g -O0 -shared -fPIC myudx.cpp -o myudx.so \ -I/opt/vertica/sdk/include -
Check logs for runtime errors.
Cleanup
Remove stopped containers to free up disk space:
vsdk-cleanup
This will:
- List all containers created by the
vsdkscripts. - Stop running containers.
- Remove all containers for your SDK image.
Troubleshooting
"ERROR: Set VSDK_IMAGE to opentext/vertica-sdk:..."
You have not set the VSDK_IMAGE environment variable. Set it as shown in Getting Started.
Container doesn't have required tools
The SDK container includes all standard development tools. If you need additional tools, consider:
- Installing them temporarily in an interactive session with
sudo apt install(Ubuntu) orsudo yum install(AlmaLinux). - Creating a custom image based on the SDK image.
Best practices
- Always set
VSDK_IMAGEin your environment or shell configuration. - Keep your source files outside the container. The container is for compilation only.
- Use version control (git) for your UDx source code.
- Test with the same database version that you plan to deploy.
- Clean up containers regularly with
vsdk-cleanup. - Document your build process in a Makefile or README.
Additional Resources
vertica-sdkdocumentation- UDx Examples in
/opt/vertica/sdk/examples - CREATE LIBRARY reference
Note
Usingvsdk-* scripts is not mandatory.
Python container UDx
The database images with Python UDx development capabilities include the vertica_sdk package and the Python Standard Library.
If your UDx depends on a Python package that is not included in the image, you must make the package available to the database process during runtime. You can either mount a volume that contains the package dependencies, or you can create a custom database server image.
Important
When you load the UDx library with CREATE LIBRARY, the DEPENDS clause must specify the location of the Python package in the database server container filesystem.Use the Python Package Index to download Python package source distributions.
Mounting Python libraries as volumes
You can mount a Python package dependency as a volume in the database server container filesystem. A Python UDx can access the contents of the volume at runtime.
-
Download the package source distribution to the host machine.
-
On the host machine, extract the tar file contents into a mountable volume:
$ tar -xvf lib-name.version.tar.gz -C /path/to/py-dependency-vol -
Mount the volume that contains the extracted source distribution in the custom resource (CR). The following snippet mounts the
py-dependency-volvolume in the database server container:spec: ... volumeMounts: - name: nfs mountPath: /path/to/py-dependency-vol volumes: - name: nfs nfs: path: /nfs server: nfs.example.com ...For details about mounting custom volumes in a CR, see VerticaDB custom resource definition.
Adding a Python library to a custom database image
Create a custom image that includes any Python package dependencies in the database server base image.
For a comprehensive guide about creating a custom database image, see the Creating a Vertica Image tutorial in the Vertica Integrator's Guide.
-
Download the package source distribution on the machine that builds the container.
-
Create a Dockerfile that includes the Python source distribution. The
ADDcommand automatically extracts the contents of the tar file into thetarget-dirdirectory:FROM opentext/vertica-k8s:version ADD lib-name.version.tar.gz /path/to/target-dir ...For a complete list of available database server images, see opentext/vertica-k8s Docker Hub repository.
-
Build the Dockerfile:
$ docker build . -t image-name:tag -
Push the image to a container registry so that you can add the image to a database custom resource:
$ docker image push registry-host:port/registry-username/image-name:tag