Dynamic schema
Since the 1.1.25 release, the dynamic column feature is supported in Studio with component-runtime components.
| Dynamic column is available with Enterprise versions of Talend Studio only. | 
Accessing columns metadata
In Studio, we can define for each component a schema with associated metadata.
To access those informations in your component, you’ve to do a few things:
Using the @Structure annotation
- 
API:
@org.talend.sdk.component.api.configuration.ui.widget.Structure 
According the specified field type, you will acess to
- 
the column names list with
List<String> - 
a subset or all wanted metadata with
List<MySchemaMeta>(see below) 
@Data
@GridLayout({ @GridLayout.Row({ "dataset" }),
              @GridLayout.Row({ "incomingSchema" }) }) (5)
public class OutputConfig implements Serializable {
    @Option
    @Documentation("My dataset.")
    private Dataset dataset;
    @Option (1)
    @Documentation("Incoming metadata.")
    @Structure(type = Structure.Type.IN) (2) (3)
    private List<SchemaInfo> incomingSchema; (4)
| 1 | @Option: mark class’s attributes as being a configuration entry. | 
| 2 | @Structure: mark this configuration entry as a schema container. | 
| 3 | Structure.Type.IN: marks the schema for an incoming flow (Output).
Use Structure.Type.OUT for outgoing flow (Input). | 
| 4 | List<SchemaInfo>: is a custom class for holding metadata. | 
| 5 | @GridLayout: option should be defined in the UI layout. | 
Then, we should have a class SchemaInfo as following:
Defining a specific class for holding metadata
If you don’t want just only column names (using List<String>), you’ll have to define a custom class.
@Data
@GridLayout({ @GridLayout.Row({ "label", "key", "talendType", "nullable", "pattern" }) })
@Documentation("Schema definition.")
public class SchemaInfo implements Serializable {
    @Option
    @Documentation("Column name.")
    private String label;
    @Option
    @Documentation("Is it a Key column.")
    private boolean key;
    @Option
    @Documentation("Talend type such as id_String.")
    private String talendType;
    @Option
    @Documentation("Is it a Nullable column.")
    private boolean nullable;
    @Option
    @Documentation("Pattern used for datetime processing.")
    private String pattern = "yyyy-MM-dd HH:mm";
}
Available Studio metadata informations
| Field name | Type | Name in Studio | 
|---|---|---|
  | 
String  | 
Column  | 
  | 
String  | 
Db Column  | 
  | 
Boolean  | 
Key  | 
  | 
String  | 
DB Type  | 
  | 
String  | 
Type  | 
  | 
Boolean  | 
Nullable  | 
  | 
String  | 
Date Pattern  | 
  | 
int  | 
Length  | 
  | 
int  | 
Precision  | 
  | 
String  | 
Default  | 
  | 
String  | 
Comment  | 
