在PubSubToBigQuery模板中定义TableSchema

时间:2019-05-20 04:38:18

标签: java google-cloud-platform google-bigquery apache-beam

我无法在Google的Dataflow模板中指定TableSchema来读取发布订阅并流式传输到BigQuery。
此处提供的模板-https://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/src/main/java/com/google/cloud/teleport/templates/PubSubToBigQuery.java

此处的每个文档-https://beam.apache.org/documentation/io/built-in/google-bigquery/#creating-a-table-schema

我试图添加TableSchema以匹配BigQuery中的目标

/** Define Table Schema */
TableSchema schema = new TableSchema()
    .setFields(
        ImmutableList.of(
            new TableFieldSchema()
                .setName("device_id")
                .setType("STRING")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("timestamp")
                .setType("TIMESTAMP")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("orientation")
                .setType("FLOAT")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("orientation")
                .setType("STRING")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("light_level")
                .setType("FLOAT")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("temperature")
                .setType("FLOAT")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("button_pressed")
                .setType("BOOLEAN")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("city")
                .setType("STRING")
                .setMode("NULLABLE"),
                new TableFieldSchema()
                .setName("region")
                .setType("string")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("lat")
                .setType("STRING")
                .setMode("NULLABLE"),
            new TableFieldSchema()
                .setName("long")
                .setType("string")
                .setMode("NULLABLE")));

这是我尝试编译时遇到的错误。

  

[错误]无法执行目标   org.apache.maven.plugins:maven-compiler-plugin:3.6.2:compile   (默认编译)在项目google-cloud-teleport-java上:编译   失败[ERROR]   /home/jquattlebaum/DataflowTemplates/src/main/java/com/google/cloud/teleport/templates/PubSubToBigQuery.java:[131,5]   找不到符号[ERROR]符号:类TableSchema [ERROR]
  位置:类com.google.cloud.teleport.templates.PubSubToBigQuery

1 个答案:

答案 0 :(得分:0)

当您没有正确设置依赖项时,通常会发生这种情况。即您的项目(模板)必须声明一个定义为TableSchema的依赖项,然后您必须在java文件(PubSubToBigQuery.java)中添加相应的import语句。

依赖声明可能发生在pom.xml中,如果您没有做太多修改,它应该已经包含TableSchemahttps://github.com/GoogleCloudPlatform/DataflowTemplates/blob/master/pom.xml#L258 google-api-services-bigquery的正确依赖。

如果有,请确保import com.google.api.services.bigquery.model.TableSchema顶部有PubSubToBigQuery.java

然后确保您执行mvn clean或从IDE中清除项目,然后再次构建。

如果这没有帮助,我会在某个地方找错字。