首页 > 解决方案 > BigQuery 中的 DateTime 数据类型

问题描述

我有一个分区表,其中一列是 DateTime 类型,并且该表在同一列上分区。根据 spark-bigquery 文档,对应的 Spark SQL 类型是 String 类型。 https://github.com/GoogleCloudDataproc/spark-bigquery-connector

我尝试做同样的事情,但我遇到了数据类型不匹配的问题。

代码片段:

ZonedDateTime nowPST = ZonedDateTime.ofInstant(Instant.now(), TimeZone.getTimeZone("PST").toZoneId());
        df = df.withColumn("createdDate", lit(nowPST.toLocalDateTime().toString()));

错误:

Caused by: com.google.cloud.spark.bigquery.repackaged.com.google.cloud.bigquery.BigQueryException: Failed to load to <PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME> in job JobId{project=<PROJECT_ID>, job=<JOB_ID>, location=US}. BigQuery error was Provided Schema does not match Table <PROJECT_ID>:<DATASET_NAME>.<TABLE_NAME>. Field createdDate has changed type from DATETIME to STRING
        at com.google.cloud.spark.bigquery.BigQueryWriteHelper.loadDataToBigQuery(BigQueryWriteHelper.scala:156)
        at com.google.cloud.spark.bigquery.BigQueryWriteHelper.writeDataFrameToBigQuery(BigQueryWriteHelper.scala:89)
        ... 36 more

标签: apache-sparkgoogle-bigquery

解决方案


由于 Spark 不支持DateTime,BigQuery 连接器不支持写入DateTime- 没有可以使用的等效 Spark 数据类型。我们正在探索增强 DataFrame 元数据的方法,以支持 BigQuery 支持的类型,而不是 Spark ( DateTime, Time, Geography) 支持的类型。

目前请将此字段设为字符串,并在 BigQuery 端进行转换。


推荐阅读