BigQuery Spark连接器:通配符表或TABLE_DATE_RANGE

时间:2017-10-05 06:23:46

标签: apache-spark google-bigquery apache-spark-sql spark-dataframe google-cloud-dataproc

我在版本0.2.1-s_2.11中使用Spark的Spotify BigQuery连接器(https://github.com/spotify/spark-bigquery)从Google BigQuery加载原始Google Analytics数据。这个lib在内部使用来自Google(https://cloud.google.com/dataproc/docs/connectors/bigquery)的Hadoop / Spark的官方BigQuery连接器。

如果我一次只加载一个表,它的工作完全正常,例如:

sqlContext.bigQueryTable("<dataset-id>.<some-table-name")

但我想一次加载多个表。我尝试使用BigQuery SQL方言提供的DATE_RANGE函数和表通配符:

sqlContext.bigQueryTable("<dataset-id>.<some-table-name-with-wildcard>")

但这不起作用,我收到以下错误:

Invalid datasetAndTableString '<dataset-id>.<some-table-name-with-wildcard>'; must match regex '[a-zA-Z0-9_]+\.[a-zA-Z0-9_]+'

这很明显,因为表引用的规范说:“[...] ID必须只包含字母(az,AZ),数字(0-9)或下划线(_)[...]”

我想按原样加载原始数据,所以我不能使用sqlContext.bigQuerySelect()并提供SQL语句,因为那时我将不得不删除存储在数组中的嵌套数据(我有很多)因为连接器仅支持旧版SQL。

那么可以一次加载来自多个表的数据而不用像TABLE_DATE_RANGE那样手动压缩它或者BigQuery本身提供的通配符函数和Spark的BigQuery连接器吗?因为我可以逐个加载每个表,但是我想避免为每个表触发对BigQuery的新查询的开销。所以我想我可以用一个查询加载表范围。

提前谢谢!

0 个答案:

没有答案