@Internal public static class FactoryUtil.DefaultDynamicTableContext extends Object implements DynamicTableFactory.Context
DynamicTableFactory.Context
.Constructor and Description |
---|
DefaultDynamicTableContext(ObjectIdentifier objectIdentifier,
ResolvedCatalogTable catalogTable,
Map<String,String> enrichmentOptions,
ReadableConfig configuration,
ClassLoader classLoader,
boolean isTemporary) |
Modifier and Type | Method and Description |
---|---|
ResolvedCatalogTable |
getCatalogTable()
Returns the resolved table information received from the
Catalog or persisted
plan. |
ClassLoader |
getClassLoader()
Returns the class loader of the current session.
|
ReadableConfig |
getConfiguration()
Gives read-only access to the configuration of the current session.
|
Map<String,String> |
getEnrichmentOptions()
Returns a map of options that can enrich the options of the original
DynamicTableFactory.Context.getCatalogTable() during a plan restore. |
ObjectIdentifier |
getObjectIdentifier()
Returns the identifier of the table in the
Catalog . |
boolean |
isTemporary()
Whether the table is temporary.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getPhysicalRowDataType, getPrimaryKeyIndexes
public DefaultDynamicTableContext(ObjectIdentifier objectIdentifier, ResolvedCatalogTable catalogTable, Map<String,String> enrichmentOptions, ReadableConfig configuration, ClassLoader classLoader, boolean isTemporary)
public ObjectIdentifier getObjectIdentifier()
DynamicTableFactory.Context
Catalog
.
This identifier describes the relationship between the table instance and the
associated Catalog
(if any). However, it doesn't uniquely identify this specific
table configuration. The same table might be stored in different catalogs or, in case of
anonymous tables, this identifier is auto-generated and non-deterministic. Because of
that behaviour, we strongly suggest using this identifier only for printing and logging
purposes, and rely on user input for uniquely identifying a "table instance".
For example, when implementing a Kafka source using consumer groups, the user should
provide the consumer group id manually rather than using this identifier as the consumer
group id, so the offset tracking remains stable even if this table is anonymous, or it's
moved to another Catalog
.
Note that for anonymous tables ObjectIdentifier.asSerializableString()
will
fail, so we suggest to use ObjectIdentifier.asSummaryString()
for generating
strings.
getObjectIdentifier
in interface DynamicTableFactory.Context
public ResolvedCatalogTable getCatalogTable()
DynamicTableFactory.Context
Catalog
or persisted
plan.
The ResolvedCatalogTable
forwards the metadata from the catalog but offers a
validated ResolvedSchema
. The original metadata object is available via ResolvedCatalogTable.getOrigin()
.
In most cases, a factory is interested in the following characteristics:
// get the physical data type to initialize the connector
context.getCatalogTable().getResolvedSchema().toPhysicalRowDataType()
// get primary key information if the connector supports upserts
context.getCatalogTable().getResolvedSchema().getPrimaryKey()
// get configuration options
context.getCatalogTable().getOptions()
Other characteristics such as metadata columns or watermarks will be pushed down into
the created DynamicTableSource
or DynamicTableSink
during planning
depending on the implemented ability interfaces.
During a plan restore, usually the table information persisted in the plan is used to
reconstruct the catalog table. If and only if table.plan.restore.catalog-objects
is set to ALL
, there might be information from both the plan and a catalog lookup
which requires considering DynamicTableFactory.Context.getEnrichmentOptions()
. It enables to enrich the plan
information with frequently changing options (e.g. connection information or timeouts).
getCatalogTable
in interface DynamicTableFactory.Context
public Map<String,String> getEnrichmentOptions()
DynamicTableFactory.Context
DynamicTableFactory.Context.getCatalogTable()
during a plan restore.
If and only if table.plan.restore.catalog-objects
is set to ALL
, this
method may return a non-empty Map
of options retrieved from the Catalog
.
Because only the DynamicTableFactory
is able to decide which options are safe
to be forwarded without affecting the original topology, enrichment options are exposed
through this method. In general, it's highly recommended using the FactoryUtil#createTableFactoryHelper(DynamicTableFactory, Context)
to merge the options
and then get the result with FactoryUtil.TableFactoryHelper.getOptions()
. The helper
considers both DynamicTableFactory.forwardOptions()
and FormatFactory.forwardOptions()
.
Since a restored topology is static, an implementer has to ensure that the declared options don't affect fundamental abilities. The planner might not react to changed abilities anymore.
getEnrichmentOptions
in interface DynamicTableFactory.Context
FactoryUtil.TableFactoryHelper
public ReadableConfig getConfiguration()
DynamicTableFactory.Context
getConfiguration
in interface DynamicTableFactory.Context
public ClassLoader getClassLoader()
DynamicTableFactory.Context
The class loader is in particular useful for discovering further (nested) factories.
getClassLoader
in interface DynamicTableFactory.Context
public boolean isTemporary()
DynamicTableFactory.Context
isTemporary
in interface DynamicTableFactory.Context
Copyright © 2014–2024 The Apache Software Foundation. All rights reserved.