@Override
  public Map<String, String> toConfig(Config jobConfig) {

    Map<String, String> tableConfig = new HashMap<>(super.toConfig(jobConfig));

    if (sideInputs != null && !sideInputs.isEmpty()) {
      sideInputs.forEach(si -> Preconditions.checkState(isValidSystemStreamName(si), String.format(
          "Side input stream %s doesn't confirm to pattern %s", si, SYSTEM_STREAM_NAME_PATTERN)));
      String formattedSideInputs = String.join(",", sideInputs);
      addStoreConfig("side.inputs", formattedSideInputs, tableConfig);
      addStoreConfig("side.inputs.processor.serialized.instance",
          SerdeUtils.serialize("Side Inputs Processor", sideInputsProcessor), tableConfig);
    }

    // Changelog configuration
    if (enableChangelog) {
      if (StringUtils.isEmpty(changelogStream)) {
        String jobName = jobConfig.get("job.name");
        Preconditions.checkNotNull(jobName, "job.name not found in job config");
        String jobId = jobConfig.get("job.id");
        Preconditions.checkNotNull(jobId, "job.id not found in job config");
        changelogStream = String.format("%s-%s-table-%s", jobName, jobId, tableId);
      }

      Preconditions.checkState(isValidSystemStreamName(changelogStream), String.format(
          "Changelog stream %s doesn't confirm to pattern %s", changelogStream, SYSTEM_STREAM_NAME_PATTERN));
      addStoreConfig("changelog", changelogStream, tableConfig);

      if (changelogReplicationFactor != null) {
        addStoreConfig("changelog.replication.factor", changelogReplicationFactor.toString(), tableConfig);
      }
    }

    return Collections.unmodifiableMap(tableConfig);
  }
{@inheritDoc}

Note: Serdes are expected to be generated during configuration generation
of the job node, which is not handled here.
samza-api/src/main/java/org/apache/samza/table/descriptors/LocalTableDescriptor.java