如何在分区表上使用Google的官方Spark BigQuery连接器?

时间:2018-09-10 13:56:27

标签: apache-spark google-bigquery

我正在使用Google's official Spark-BigQuery connectorcom.google.cloud.bigdataoss:bigquery-connector:hadoop2-0.13.6)从BigQuery上的大型时间分区表(字段myDateField)上检索数据。

因此,我目前正在执行此操作(示例取自文档),以检索最近的数据(不到一个月):

val config = sparkSession.sparkContext.hadoopConfiguration
config.set(BigQueryConfiguration.GCS_BUCKET_KEY, "mybucket")
val fullyQualifiedInputTableId = "project:dataset.table"
BigQueryConfiguration.configureBigQueryInput(config, fullyQualifiedInputTableId)

val bigQueryRDD: RDD[(LongWritable, JsonObject)] = sparkSession.sparkContext.newAPIHadoopRDD(
    config,
    classOf[GsonBigQueryInputFormat],
    classOf[LongWritable],
    classOf[JsonObject]
)

val convertedRDD: RDD[MyClass] = bigQueryRDD.map { case (_, jsonObject) =>
    convertJsonObjectToMyClass(jsonObject)
}

val recentData: RDD[MyClass] = convertedRDD.filter { case MyClass(_, myDateField) =>
    myDateField >= "2018-08-10"
}

println(recentData.count())

问题

  • 我想知道连接器是否从BigQuery表中查询所有数据

    SELECT *
    FROM `project.dataset.table`
    

    或者,如果它做一些聪明的(更重要的是,更便宜)的分区,例如:

    SELECT *
    FROM `project.dataset.table`
    WHERE myDateField >= TIMESTAMP("2018-08-10")
    
  • 此外,总的来说,我如何控制查询的成本,并确保不无所事事地检索不相关的数据(例如,"2018-08-10"之前的数据)?

    < / li>
  • 以防BigQuery检索所有数据,我可以提供特定的查询吗? BigQueryConfiguration.INPUT_QUERY_KEYmapred.bq.input.query)已过时,但我看不到任何替代内容,而且文档对此不太清楚

0 个答案:

没有答案