static Field fromPb(TableFieldSchema fieldSchemaPb) { Builder fieldBuilder = new Builder(); fieldBuilder.setName(fieldSchemaPb.getName()); if (fieldSchemaPb.getMode() != null) { fieldBuilder.setMode(Mode.valueOf(fieldSchemaPb.getMode())); } if (fieldSchemaPb.getDescription() != null) { fieldBuilder.setDescription(fieldSchemaPb.getDescription()); } FieldList subFields = fieldSchemaPb.getFields() != null ? FieldList.of(Lists.transform(fieldSchemaPb.getFields(), FROM_PB_FUNCTION)) : null; fieldBuilder.setType(LegacySQLTypeName.valueOf(fieldSchemaPb.getType()), subFields); return fieldBuilder.build(); } }
/** @see TableFieldSchema#getMode() */ public String getMode() { return fieldSchema.getMode(); }
@Nullable private static Object getTypedCellValue(Schema schema, TableFieldSchema fieldSchema, Object v) { // Per https://cloud.google.com/bigquery/docs/reference/v2/tables#schema, the mode field // is optional (and so it may be null), but defaults to "NULLABLE". String mode = firstNonNull(fieldSchema.getMode(), "NULLABLE"); switch (mode) { case "REQUIRED": return convertRequiredField(schema.getType(), schema.getLogicalType(), fieldSchema, v); case "REPEATED": return convertRepeatedField(schema, fieldSchema, v); case "NULLABLE": return convertNullableField(schema, fieldSchema, v); default: throw new UnsupportedOperationException( "Parsing a field with BigQuery field schema mode " + fieldSchema.getMode()); } }
public void writeField(StringBuilder builder, TableFieldSchema fieldSchema) { if (fieldSchema.getMode().equals("REPEATED") && fieldSchema.getType().equals("RECORD")) { builder.append(fieldSchema.getName()+ " " + "ARRAY<STRUCT<"); writeOutputSchema(builder, fieldSchema.getFields()); builder.append(">>"); } if(fieldSchema.getMode().equals("REPEATED") && !fieldSchema.getType().equals("RECORD") ) { builder.append(fieldSchema.getName()+ " " + "ARRAY<"); builder.append(fieldSchema.getType()); builder.append(">"); } if(!fieldSchema.getMode().equals("REPEATED") && fieldSchema.getType().equals("RECORD") ) { builder.append(fieldSchema.getName()+ " " + "STRUCT<"); writeOutputSchema(builder, fieldSchema.getFields()); builder.append(">"); } if(!fieldSchema.getMode().equals("REPEATED") && !fieldSchema.getType().equals("RECORD") ) { builder.append(fieldSchema.getName() +" "+ fieldSchema.getType()); } }
private static Field convertField(TableFieldSchema bigQueryField) { Type avroType = BIG_QUERY_TO_AVRO_TYPES.get(bigQueryField.getType()); Schema elementSchema; if (avroType == Type.RECORD) { elementSchema = toGenericAvroSchema(bigQueryField.getName(), bigQueryField.getFields()); } else { elementSchema = Schema.create(avroType); } Schema fieldSchema; if (bigQueryField.getMode() == null || "NULLABLE".equals(bigQueryField.getMode())) { fieldSchema = Schema.createUnion(Schema.create(Type.NULL), elementSchema); } else if ("REQUIRED".equals(bigQueryField.getMode())) { fieldSchema = elementSchema; } else if ("REPEATED".equals(bigQueryField.getMode())) { fieldSchema = Schema.createArray(elementSchema); } else { throw new IllegalArgumentException( String.format("Unknown BigQuery Field Mode: %s", bigQueryField.getMode())); } return new Field( bigQueryField.getName(), fieldSchema, bigQueryField.getDescription(), (Object) null /* Cast to avoid deprecated JsonNode constructor. */); } }
if (Objects.equals(fieldSchema.getMode(), "REPEATED")) { TableFieldSchema elementSchema = fieldSchema.clone().setMode("REQUIRED"); @SuppressWarnings("unchecked")
if (Objects.equals(fieldSchema.getMode(), "REPEATED")) { TableFieldSchema elementSchema = fieldSchema.clone().setMode("REQUIRED"); @SuppressWarnings("unchecked")
static Field fromPb(TableFieldSchema fieldSchemaPb) { Builder fieldBuilder = new Builder(); fieldBuilder.setName(fieldSchemaPb.getName()); if (fieldSchemaPb.getMode() != null) { fieldBuilder.setMode(Mode.valueOf(fieldSchemaPb.getMode())); } if (fieldSchemaPb.getDescription() != null) { fieldBuilder.setDescription(fieldSchemaPb.getDescription()); } FieldList subFields = fieldSchemaPb.getFields() != null ? FieldList.of(Lists.transform(fieldSchemaPb.getFields(), FROM_PB_FUNCTION)) : null; fieldBuilder.setType(LegacySQLTypeName.valueOf(fieldSchemaPb.getType()), subFields); return fieldBuilder.build(); } }
@Test public void testToTableSchema_row() { TableSchema schema = toTableSchema(ROW_TYPE); assertThat(schema.getFields().size(), equalTo(1)); TableFieldSchema field = schema.getFields().get(0); assertThat(field.getName(), equalTo("row")); assertThat(field.getType(), equalTo(StandardSQLTypeName.STRUCT.toString())); assertThat(field.getMode(), nullValue()); assertThat(field.getFields(), containsInAnyOrder(ID, VALUE, NAME, TIMESTAMP, VALID)); }
@Test public void testToTableSchema_array_row() { TableSchema schema = toTableSchema(ARRAY_ROW_TYPE); assertThat(schema.getFields().size(), equalTo(1)); TableFieldSchema field = schema.getFields().get(0); assertThat(field.getName(), equalTo("rows")); assertThat(field.getType(), equalTo(StandardSQLTypeName.STRUCT.toString())); assertThat(field.getMode(), equalTo(Mode.REPEATED.toString())); assertThat(field.getFields(), containsInAnyOrder(ID, VALUE, NAME, TIMESTAMP, VALID)); }
static Field fromPb(TableFieldSchema fieldSchemaPb) { Builder fieldBuilder = new Builder(); fieldBuilder.name(fieldSchemaPb.getName()); Type.Value enumValue = Type.Value.valueOf(fieldSchemaPb.getType()); if (fieldSchemaPb.getMode() != null) { fieldBuilder.mode(Mode.valueOf(fieldSchemaPb.getMode())); } if (fieldSchemaPb.getDescription() != null) { fieldBuilder.description(fieldSchemaPb.getDescription()); } if (fieldSchemaPb.getFields() != null) { fieldBuilder.type(Type.record(Lists.transform(fieldSchemaPb.getFields(), FROM_PB_FUNCTION))); } else { fieldBuilder.type(new Type(enumValue)); } return fieldBuilder.build(); } }
static Field fromPb(TableFieldSchema fieldSchemaPb) { Builder fieldBuilder = new Builder(); fieldBuilder.name(fieldSchemaPb.getName()); Type.Value enumValue = Type.Value.valueOf(fieldSchemaPb.getType()); if (fieldSchemaPb.getMode() != null) { fieldBuilder.mode(Mode.valueOf(fieldSchemaPb.getMode())); } if (fieldSchemaPb.getDescription() != null) { fieldBuilder.description(fieldSchemaPb.getDescription()); } if (fieldSchemaPb.getFields() != null) { fieldBuilder.type(Type.record(Lists.transform(fieldSchemaPb.getFields(), FROM_PB_FUNCTION))); } else { fieldBuilder.type(new Type(enumValue)); } return fieldBuilder.build(); } }