Search in sources :

Example 61 with Table

use of org.apache.beam.sdk.extensions.sql.meta.Table in project beam by apache.

the class BigtableTableCreationFailuresTest method testCreatePropertiesCountNotEqualSchemaFields.

@Test
public void testCreatePropertiesCountNotEqualSchemaFields() {
    String createTable = "CREATE EXTERNAL TABLE fail(key VARCHAR, q BIGINT, qq BINARY) \n" + "TYPE bigtable \n" + "LOCATION '" + location() + "' \n" + "TBLPROPERTIES '{\"columnsMapping\": \"f:q\"}'";
    cli.execute(createTable);
    Table table = metaStore.getTables().get("fail");
    IllegalStateException e = assertThrows(IllegalStateException.class, () -> tableProvider.buildBeamSqlTable(table));
    checkMessage(e.getMessage(), "Schema fields count: '2' does not fit columnsMapping count: '1'");
}
Also used : Table(org.apache.beam.sdk.extensions.sql.meta.Table) Test(org.junit.Test)

Example 62 with Table

use of org.apache.beam.sdk.extensions.sql.meta.Table in project beam by apache.

the class BigtableTableWithRowsTest method testCreatesSchemaCorrectly.

@Test
public void testCreatesSchemaCorrectly() {
    InMemoryMetaStore metaStore = new InMemoryMetaStore();
    metaStore.registerProvider(new BigtableTableProvider());
    BeamSqlCli cli = new BeamSqlCli().metaStore(metaStore);
    cli.execute(createFullTableString(TABLE, location()));
    Table table = metaStore.getTables().get("beamTable");
    assertNotNull(table);
    assertEquals(TEST_SCHEMA, table.getSchema());
}
Also used : Table(org.apache.beam.sdk.extensions.sql.meta.Table) BigtableTableTestUtils.createReadTable(org.apache.beam.sdk.extensions.sql.meta.provider.bigtable.BigtableTableTestUtils.createReadTable) BeamSqlCli(org.apache.beam.sdk.extensions.sql.BeamSqlCli) InMemoryMetaStore(org.apache.beam.sdk.extensions.sql.meta.store.InMemoryMetaStore) Test(org.junit.Test)

Example 63 with Table

use of org.apache.beam.sdk.extensions.sql.meta.Table in project beam by apache.

the class BeamDDLNestedTypesTest method supportsPrimitiveTypes.

@Property
public void supportsPrimitiveTypes(@From(PrimitiveTypes.class) FieldType fieldType) throws SqlParseException {
    String fieldTypeDeclaration = unparse(fieldType);
    Table table = executeCreateTableWith(fieldTypeDeclaration);
    Schema expectedSchema = newSimpleSchemaWith(fieldType);
    assertEquals(expectedSchema, table.getSchema());
}
Also used : Table(org.apache.beam.sdk.extensions.sql.meta.Table) Schema(org.apache.beam.sdk.schemas.Schema) Property(com.pholser.junit.quickcheck.Property)

Example 64 with Table

use of org.apache.beam.sdk.extensions.sql.meta.Table in project beam by apache.

the class BeamDDLNestedTypesTest method supportsNestedTypes.

@Property
public void supportsNestedTypes(@From(AnyFieldType.class) FieldType generatedFieldType) throws SqlParseException {
    String fieldTypeDeclaration = unparse(generatedFieldType);
    Table table = executeCreateTableWith(fieldTypeDeclaration);
    Schema expectedSchema = newSimpleSchemaWith(generatedFieldType);
    assertEquals(expectedSchema, table.getSchema());
}
Also used : Table(org.apache.beam.sdk.extensions.sql.meta.Table) Schema(org.apache.beam.sdk.schemas.Schema) Property(com.pholser.junit.quickcheck.Property)

Example 65 with Table

use of org.apache.beam.sdk.extensions.sql.meta.Table in project beam by apache.

the class KafkaTableProvider method buildBeamSqlTable.

@Override
public BeamSqlTable buildBeamSqlTable(Table table) {
    Schema schema = table.getSchema();
    JSONObject properties = table.getProperties();
    Optional<ParsedLocation> parsedLocation = Optional.empty();
    if (!Strings.isNullOrEmpty(table.getLocation())) {
        parsedLocation = Optional.of(parseLocation(checkArgumentNotNull(table.getLocation())));
    }
    List<String> topics = mergeParam(parsedLocation.map(loc -> loc.topic), properties.getJSONArray("topics"));
    List<String> allBootstrapServers = mergeParam(parsedLocation.map(loc -> loc.brokerLocation), properties.getJSONArray("bootstrap_servers"));
    String bootstrapServers = String.join(",", allBootstrapServers);
    Optional<String> payloadFormat = properties.containsKey("format") ? Optional.of(properties.getString("format")) : Optional.empty();
    if (Schemas.isNestedSchema(schema)) {
        Optional<PayloadSerializer> serializer = payloadFormat.map(format -> PayloadSerializers.getSerializer(format, checkArgumentNotNull(schema.getField(PAYLOAD_FIELD).getType().getRowSchema()), properties.getInnerMap()));
        return new NestedPayloadKafkaTable(schema, bootstrapServers, topics, serializer);
    } else {
        /*
       * CSV is handled separately because multiple rows can be produced from a single message, which
       * adds complexity to payload extraction. It remains here and as the default because it is the
       * historical default, but it will not be extended to support attaching extended attributes to
       * rows.
       */
        if (payloadFormat.orElse("csv").equals("csv")) {
            return new BeamKafkaCSVTable(schema, bootstrapServers, topics);
        }
        PayloadSerializer serializer = PayloadSerializers.getSerializer(payloadFormat.get(), schema, properties.getInnerMap());
        return new PayloadSerializerKafkaTable(schema, bootstrapServers, topics, serializer);
    }
}
Also used : InMemoryMetaTableProvider(org.apache.beam.sdk.extensions.sql.meta.provider.InMemoryMetaTableProvider) Splitter(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Splitter) Schema(org.apache.beam.sdk.schemas.Schema) PayloadSerializer(org.apache.beam.sdk.schemas.io.payloads.PayloadSerializer) PAYLOAD_FIELD(org.apache.beam.sdk.extensions.sql.meta.provider.kafka.Schemas.PAYLOAD_FIELD) Preconditions.checkArgumentNotNull(org.apache.beam.sdk.util.Preconditions.checkArgumentNotNull) Table(org.apache.beam.sdk.extensions.sql.meta.Table) List(java.util.List) PayloadSerializers(org.apache.beam.sdk.schemas.io.payloads.PayloadSerializers) BeamSqlTable(org.apache.beam.sdk.extensions.sql.meta.BeamSqlTable) Strings(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Strings) AutoService(com.google.auto.service.AutoService) Iterables(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.Iterables) Preconditions.checkArgument(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.base.Preconditions.checkArgument) Optional(java.util.Optional) ImmutableList(org.apache.beam.vendor.guava.v26_0_jre.com.google.common.collect.ImmutableList) JSONObject(com.alibaba.fastjson.JSONObject) TableProvider(org.apache.beam.sdk.extensions.sql.meta.provider.TableProvider) Nullable(org.checkerframework.checker.nullness.qual.Nullable) PayloadSerializer(org.apache.beam.sdk.schemas.io.payloads.PayloadSerializer) Schema(org.apache.beam.sdk.schemas.Schema) JSONObject(com.alibaba.fastjson.JSONObject)

Aggregations

Table (org.apache.beam.sdk.extensions.sql.meta.Table)65 Test (org.junit.Test)49 BeamSqlTable (org.apache.beam.sdk.extensions.sql.meta.BeamSqlTable)37 Schema (org.apache.beam.sdk.schemas.Schema)9 Before (org.junit.Before)9 InMemoryMetaStore (org.apache.beam.sdk.extensions.sql.meta.store.InMemoryMetaStore)8 TestTableProvider (org.apache.beam.sdk.extensions.sql.meta.provider.test.TestTableProvider)7 TextTableProvider (org.apache.beam.sdk.extensions.sql.meta.provider.text.TextTableProvider)5 BeamTableStatistics (org.apache.beam.sdk.extensions.sql.impl.BeamTableStatistics)4 JSONObject (com.alibaba.fastjson.JSONObject)3 Row (org.apache.beam.sdk.values.Row)3 TableFieldSchema (com.google.api.services.bigquery.model.TableFieldSchema)2 TableRow (com.google.api.services.bigquery.model.TableRow)2 TableSchema (com.google.api.services.bigquery.model.TableSchema)2 Property (com.pholser.junit.quickcheck.Property)2 List (java.util.List)2 BeamSqlCli (org.apache.beam.sdk.extensions.sql.BeamSqlCli)2 InvalidTableException (org.apache.beam.sdk.extensions.sql.meta.provider.InvalidTableException)2 BigtableTableTestUtils.createReadTable (org.apache.beam.sdk.extensions.sql.meta.provider.bigtable.BigtableTableTestUtils.createReadTable)2 TCompactProtocol (org.apache.thrift.protocol.TCompactProtocol)2