in zetasql-toolkit-bigquery/src/main/java/com/google/zetasql/toolkit/catalog/bigquery/BigQueryAPIResourceProvider.java [151:176]
private Type extractTypeFromBigQueryTableField(Field field) {
Type fieldType;
StandardSQLTypeName type = field.getType().getStandardType();
Field.Mode mode = Optional.ofNullable(field.getMode()).orElse(Field.Mode.NULLABLE);
if (type.equals(StandardSQLTypeName.STRUCT)) {
List<StructField> fields =
field.getSubFields().stream()
.map(
subField -> {
Type recordFieldType = this.extractTypeFromBigQueryTableField(subField);
return new StructField(subField.getName(), recordFieldType);
})
.collect(Collectors.toList());
fieldType = TypeFactory.createStructType(fields);
} else {
fieldType = TypeFactory.createSimpleType(this.convertBigqueryTypeNameToTypeKind(type));
}
if (mode.equals(Field.Mode.REPEATED)) {
return TypeFactory.createArrayType(fieldType);
}
return fieldType;
}