[英]DateTime datatype in BigQuery
我有一個分區表,其中一列的類型為 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
由於 Spark 不支持DateTime
,BigQuery 連接器不支持寫入DateTime
- 沒有可以使用的等效 Spark 數據類型。 我們正在探索增加 DataFrame 元數據的方法,以支持 BigQuery 支持的類型,而不是 Spark 支持的類型( DateTime
、 Time
、 Geography
)。
目前請將此字段設為字符串,並在 BigQuery 端進行轉換。
對於日期時間類型。 我可以將表從數據塊獲取到 BigQuery 的唯一方法(無需創建臨時表並插入數據,因為由於表的大小,這仍然會很昂貴)是將表寫入 CSV 到 GCS Bucket
results_df.write.format("csv").mode("overwrite").save("gs://<bucket-name>/ancillary_test")
然后將數據從存儲桶加載到指定架構的 BigQuery 中的表
LOAD DATA INTO <dataset>.<tablename>(
PRICENODEID INTEGER,
ISONAME STRING,
PRICENODENAME STRING,
MARKETTYPE STRING,
GMTDATETIME TIMESTAMP,
TIMEZONE STRING,
LOCALDATETIME DATETIME,
ANCILLARY STRING,
PRICE FLOAT64,
CHANGE_DATE TIMESTAMP
)
FROM FILES (
format = 'CSV',
uris = ['gs://<bucket-name>/ancillary_test/*.csv']
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.