code: public static ValueAuditGenerator create(Config config, ValueAuditRuntimeMetadata runtimeAuditMetadata) {
      ColumnProjectionPolicy columnProjectionPolicy = DefaultColumnProjectionPolicyFactory.getInstance().create(
          config.getConfig(COLUMN_PROJECTION_CONFIG_SCOPE),runtimeAuditMetadata.getTableMetadata());
      RowSelectionPolicy rowSelectionPolicy = DefaultRowSelectionPolicyFactory.getInstance().create(
          config.getConfig(ROW_SELECTION_CONFIG_SCOPE), runtimeAuditMetadata.getTableMetadata(), columnProjectionPolicy);
      AuditSink auditSink = DefaultAuditSinkFactory.getInstance().create(
          config.getConfig(AUDIT_SINK_CONFIG_SCOPE), runtimeAuditMetadata);
  
      return new ValueAuditGenerator(columnProjectionPolicy, rowSelectionPolicy, auditSink);
    }
docs: Factory method to create a new {@link ValueAuditGenerator}
  @param config job configs
  @param runtimeAuditMetadata is used to pass the table specific runtime information like tablename, databaseName, snapshotName etc.
  See {@link ValueAuditRuntimeMetadata}
  @return a new {@link ValueAuditGenerator}