15 KiB
title | slug |
---|---|
Run Vertica Connector using the CLI | /connectors/database/vertica/cli |
Run Vertica using the metadata CLI
Stage | Metadata | Query Usage | Data Profiler | Data Quality | Lineage | DBT | Supported Versions |
---|---|---|---|---|---|---|---|
PROD | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | Vertica >= 9.2 |
Lineage | Table-level | Column-level |
---|---|---|
✅ | ✅ | ✅ |
In this section, we provide guides and references to use the Vertica connector.
Configure and schedule Vertica metadata and profiler workflows from the OpenMetadata UI:
Requirements
To deploy OpenMetadata, check the Deployment guides.To run the Ingestion via the UI you'll need to use the OpenMetadata Ingestion Container, which comes shipped with custom Airflow plugins to handle the workflow deployment.
Permissions
To run the ingestion we need a user with SELECT
grants on the schemas that you'd like to ingest, as well as to the
V_CATALOG
schema. You can grant those as follows for the schemas in your database:
CREATE USER openmetadata IDENTIFIED BY 'password';
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO openmetadata;
GRANT SELECT ON ALL TABLES IN SCHEMA V_CATALOG TO openmetadata;
Note that these GRANT
s won't be applied to any new table created on the schema unless the schema
has Inherited Privileges
ALTER SCHEMA s1 DEFAULT INCLUDE PRIVILEGES;
-- If using the PUBLIC schema
ALTER SCHEMA "<db>.public" DEFAULT INCLUDE PRIVILEGES;
Lineage and Usage
If you also want to run the Lineage and Usage workflows, then the user needs to be granted permissions to the
V_MONITOR
schema:
GRANT SELECT ON ALL TABLES IN SCHEMA V_MONITOR TO openmetadata;
Note that this setting might only grant visibility to the queries executed by this user. A more complete approach
will be to grant the SYSMONITOR
role to the openmetadata
user:
GRANT SYSMONITOR TO openmetadata;
ALTER USER openmetadata DEFAULT ROLE SYSMONITOR;
Profiler
To run the profiler, it's not enough to have USAGE
permissions to the schema as we need to SELECT
the tables
in there. Therefore, you'll need to grant SELECT
on all tables for the schemas:
GRANT SELECT ON ALL TABLES IN SCHEMA <schema> TO openmetadata;
Python Requirements
To run the Vertica ingestion, you will need to install:
pip3 install "openmetadata-ingestion[vertica]"
Metadata Ingestion
All connectors are defined as JSON Schemas. Here you can find the structure to create a connection to Vertica.
In order to create and run a Metadata Ingestion workflow, we will follow the steps to create a YAML configuration able to connect to the source, process the Entities if needed, and reach the OpenMetadata server.
The workflow is modeled around the following JSON Schema
1. Define the YAML Config
This is a sample config for Vertica:
source:
type: vertica
serviceName: local_vertica
serviceConnection:
config:
type: Vertica
username: username
password: password
hostPort: localhost:5432
# database: database
sourceConfig:
config:
type: DatabaseMetadata
markDeletedTables: true
includeTables: true
includeViews: true
# includeTags: true
# databaseFilterPattern:
# includes:
# - database1
# - database2
# excludes:
# - database3
# - database4
# schemaFilterPattern:
# includes:
# - schema1
# - schema2
# excludes:
# - schema3
# - schema4
# tableFilterPattern:
# includes:
# - table1
# - table2
# excludes:
# - table3
# - table4
sink:
type: metadata-rest
config: {}
workflowConfig:
# loggerLevel: DEBUG # DEBUG, INFO, WARN or ERROR
openMetadataServerConfig:
hostPort: <OpenMetadata host and port>
authProvider: <OpenMetadata auth provider>2. Configure service settings
Source Configuration - Service Connection
- username: Specify the User to connect to Vertica. It should have enough privileges to read all the metadata.
- password: Password to connect to Vertica.
- hostPort: Enter the fully qualified hostname and port number for your Vertica deployment in the Host and Port field.
- Connection Options (Optional): Enter the details for any additional connection options that can be sent to Vertica during the connection. These details must be added as Key-Value pairs.
- Connection Arguments (Optional): Enter the details for any additional connection arguments such as security or protocol configs that can be sent to Vertica during the connection. These details must be added as Key-Value pairs.
- In case you are using Single-Sign-On (SSO) for authentication, add the
authenticator
details in the Connection Arguments as a Key-Value pair as follows:"authenticator" : "sso_login_url"
- In case you authenticate with SSO using an external browser popup, then add the
authenticator
details in the Connection Arguments as a Key-Value pair as follows:"authenticator" : "externalbrowser"
- In case you are using Single-Sign-On (SSO) for authentication, add the
Source Configuration - Source Config
The sourceConfig
is defined here:
markDeletedTables
: To flag tables as soft-deleted if they are not present anymore in the source system.includeTables
: true or false, to ingest table data. Default is true.includeViews
: true or false, to ingest views definitions.databaseFilterPattern
,schemaFilterPattern
,tableFilternPattern
: Note that the they support regex as include or exclude. E.g.,
tableFilterPattern:
includes:
- users
- type_test
Sink Configuration
To send the metadata to OpenMetadata, it needs to be specified as type: metadata-rest
.
Workflow Configuration
The main property here is the openMetadataServerConfig
, where you can define the host and security provider of your OpenMetadata installation.
For a simple, local installation using our docker containers, this looks like:
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: openmetadata
securityConfig:
jwtToken: '{bot_jwt_token}'
We support different security providers. You can find their definitions here. You can find the different implementation of the ingestion below.
Openmetadata JWT Auth
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: openmetadata
securityConfig:
jwtToken: '{bot_jwt_token}'
Auth0 SSO
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: auth0
securityConfig:
clientId: '{your_client_id}'
secretKey: '{your_client_secret}'
domain: '{your_domain}'
Azure SSO
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: azure
securityConfig:
clientSecret: '{your_client_secret}'
authority: '{your_authority_url}'
clientId: '{your_client_id}'
scopes:
- your_scopes
Custom OIDC SSO
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: custom-oidc
securityConfig:
clientId: '{your_client_id}'
secretKey: '{your_client_secret}'
domain: '{your_domain}'
Google SSO
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: google
securityConfig:
secretKey: '{path-to-json-creds}'
Okta SSO
workflowConfig:
openMetadataServerConfig:
hostPort: http://localhost:8585/api
authProvider: okta
securityConfig:
clientId: "{CLIENT_ID - SPA APP}"
orgURL: "{ISSUER_URL}/v1/token"
privateKey: "{public/private keypair}"
email: "{email}"
scopes:
- token
Amazon Cognito SSO
The ingestion can be configured by Enabling JWT Tokens
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: auth0
securityConfig:
clientId: '{your_client_id}'
secretKey: '{your_client_secret}'
domain: '{your_domain}'
OneLogin SSO
Which uses Custom OIDC for the ingestion
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: custom-oidc
securityConfig:
clientId: '{your_client_id}'
secretKey: '{your_client_secret}'
domain: '{your_domain}'
KeyCloak SSO
Which uses Custom OIDC for the ingestion
workflowConfig:
openMetadataServerConfig:
hostPort: 'http://localhost:8585/api'
authProvider: custom-oidc
securityConfig:
clientId: '{your_client_id}'
secretKey: '{your_client_secret}'
domain: '{your_domain}'
2. Run with the CLI
First, we will need to save the YAML file. Afterward, and with all requirements installed, we can run:
metadata ingest -c <path-to-yaml>
Note that from connector to connector, this recipe will always be the same. By updating the YAML configuration, you will be able to extract metadata from different sources.
Data Profiler
The Data Profiler workflow will be using the orm-profiler
processor.
While the serviceConnection
will still be the same to reach the source system, the sourceConfig
will be
updated from previous configurations.
1. Define the YAML Config
This is a sample config for the profiler:
source:
type: vertica
serviceName: local_vertica
serviceConnection:
config:
type: Vertica
username: username
password: password
hostPort: localhost:5432
# database: database
sourceConfig:
config:
type: Profiler
# generateSampleData: true
# profileSample: 85
# threadCount: 5 (default)
# databaseFilterPattern:
# includes:
# - database1
# - database2
# excludes:
# - database3
# - database4
# schemaFilterPattern:
# includes:
# - schema1
# - schema2
# excludes:
# - schema3
# - schema4
# tableFilterPattern:
# includes:
# - table1
# - table2
# excludes:
# - table3
# - table4
processor:
type: orm-profiler
config: {} # Remove braces if adding properties
# tableConfig:
# - fullyQualifiedName: <table fqn>
# profileSample: <number between 0 and 99> # default will be 100 if omitted
# profileQuery: <query to use for sampling data for the profiler>
# columnConfig:
# excludeColumns:
# - <column name>
# includeColumns:
# - columnName: <column name>
# - metrics:
# - MEAN
# - MEDIAN
# - ...
# partitionConfig:
# enablePartitioning: <set to true to use partitioning>
# partitionColumnName: <partition column name. Must be a timestamp or datetime/date field type>
# partitionInterval: <partition interval>
# partitionIntervalUnit: <YEAR, MONTH, DAY, HOUR>
sink:
type: metadata-rest
config: {}
workflowConfig:
# loggerLevel: DEBUG # DEBUG, INFO, WARN or ERROR
openMetadataServerConfig:
hostPort: <OpenMetadata host and port>
authProvider: <OpenMetadata auth provider>
Source Configuration
- You can find all the definitions and types for the
serviceConnection
here. - The
sourceConfig
is defined here.
Note that the filter patterns support regex as includes or excludes. E.g.,
tableFilterPattern:
includes:
- *users$
Processor
Choose the orm-profiler
. Its config can also be updated to define tests from the YAML itself instead of the UI:
processor:
type: orm-profiler
config:
tableConfig:
- fullyQualifiedName: <table fqn>
profileSample: <number between 0 and 99>
partitionConfig:
partitionField: <field to use as a partition field>
partitionQueryDuration: <for date/datetime partitioning based set the offset from today>
partitionValues: <values to uses as a predicate for the query>
profileQuery: <query to use for sampling data for the profiler>
columnConfig:
excludeColumns:
- <column name>
includeColumns:
- columnName: <column name>
- metrics:
- MEAN
- MEDIAN
- ...
tableConfig
allows you to set up some configuration at the table level.
All the properties are optional. metrics
should be one of the metrics listed here
Workflow Configuration
The same as the metadata ingestion.
2. Run with the CLI
After saving the YAML config, we will run the command the same way we did for the metadata ingestion:
metadata profile -c <path-to-yaml>
Note how instead of running ingest
, we are using the profile
command to select the Profiler workflow.
dbt Integration
You can learn more about how to ingest dbt models' definitions and their lineage here.