public static TableSchema createSchema(LogsFieldExporterSet exporterSet) {
Set<String> fieldNames = new HashSet<String>();
List<LogsFieldExporter> exporters = exporterSet.getExporters();
TableSchema schema = new TableSchema();
schema.setFields(new ArrayList<TableFieldSchema>());
for (LogsFieldExporter exporter : exporters) {
for (int i = 0; i < exporter.getFieldCount(); i++) {
String fieldName = exporter.getFieldName(i);
String fieldMode = "NULLABLE";
String fieldType = exporter.getFieldType(i).toLowerCase().intern();
if (fieldNames.contains(fieldName)) {
throw new InvalidFieldException("BigqueryFieldExporterSet " + exporterSet.getClass().getCanonicalName()
+ " defines multiple fields with name " + exporter.getFieldName(i));
}
fieldNames.add(fieldName);
if (exporter.getFieldRepeated(i)) {
fieldMode = "REPEATED";
}
List<TableFieldSchema> subfields = null;
if (fieldType.equals("record")) {
subfields = exporter.getFieldFields(i);
}
TableFieldSchema tfs = new TableFieldSchema();
tfs.setName(fieldName);
tfs.setType(fieldType);
tfs.setMode(fieldMode);
if (subfields != null) {
tfs.setFields(subfields);
}
schema.getFields().add(tfs);
}
}
return schema;
}