【问题标题】:DateTime datatype in BigQueryBigQuery 中的 DateTime 数据类型
【发布时间】:2021-04-10 00:15:12
【问题描述】:

我有一个分区表,其中一列是 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-spark google-bigquery


    【解决方案1】:

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

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

    【讨论】:

    • 嗨@David,如果我们想将此列用作分区列并将 spark 中的列作为字符串,那么我将如何使用此列,因为 BigQuery 不支持对字符串进行分区柱子。您能否介绍一下 BigQuery 端的转化情况?
    • 嗨@David,主要问题是我们将数据插入到 PST 中的时间戳列中,但是 BigQuery 会自动将 UTC 附加到它,这对最终用户来说非常混乱
    • 嗨@arunkindra 抱歉,我想我的评论没有发送。我的意思是将数据作为字符串插入到临时表中,然后在 BigQuery 上运行INSERT INTO partitioned_table SELECT ...
    猜你喜欢
    • 1970-01-01
    • 2017-01-10
    • 1970-01-01
    • 2010-10-30
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多