private boolean fieldPresent(Schema schema, String field, Schema.FieldType expectedType) { return schema.hasField(field) && expectedType.equals(schema.getField(field).getType()); }
private void validatePubsubMessageSchema(Table tableDefinition) { Schema schema = tableDefinition.getSchema(); if (schema.getFieldCount() != 3 || !fieldPresent(schema, TIMESTAMP_FIELD, TIMESTAMP) || !fieldPresent(schema, ATTRIBUTES_FIELD, Schema.FieldType.map(VARCHAR, VARCHAR)) || !(schema.hasField(PAYLOAD_FIELD) && ROW.equals(schema.getField(PAYLOAD_FIELD).getType().getTypeName()))) { throw new IllegalArgumentException( "Unsupported schema specified for Pubsub source in CREATE TABLE. " + "CREATE TABLE for Pubsub topic should define exactly the following fields: " + "'event_timestamp' field of type 'TIMESTAMP', 'attributes' field of type " + "MAP<VARCHAR, VARCHAR>, and 'payload' field of type 'ROW<...>' which matches the " + "payload JSON format."); } }