首页 > 解决方案 > 在将其导入 BigQuery 之前,CSV 中的日期格式

问题描述

我开发了一个 Golang 代码,它从 Google 云存储中获取 csv 文件,而不是将其导入到 Big Query 表中。

一切都很好,除了我的 CSV 包含格式为“2017-06-14 00:49:52 PDT”的 DATE 列。这导致无法在 Big Query 中导入 CSV 文件的问题,因为格式必须为“2017-06-14”。在上传到 Google 存储之前,我无法在 CSV 中手动编辑它,因为它是一个非常大的文件(每天都在变化)。

是否有任何选项可以使用 go lang 更新托管在存储上的 CSV,并在执行将其导入 Big Query 的其余代码或任何其他解决方案之前只为该列(DATE)保留“2017-06-14”值?

先感谢您!

package storagetobigquery

import (
    "cloud.google.com/go/bigquery"
    "github.com/gin-gonic/gin"
    "google.golang.org/appengine"
)

// StoragetoBigquery function
func StoragetoBigquery(c *gin.Context) {
    ctx := appengine.NewContext(c.Request)

    client, err := bigquery.NewClient(ctx, "MY PROJECT ID")

    gcsRef := bigquery.NewGCSReference("PATH TO THE GOOGLE STORAGE CSV FILE")
    gcsRef.SourceFormat = bigquery.CSV
    gcsRef.AutoDetect = true
    gcsRef.SkipLeadingRows = 1


    loader := client.Dataset("DATASET NAME").Table(TABLE NAME).LoaderFrom(gcsRef)
    loader.WriteDisposition = bigquery.WriteTruncate

    job, err := loader.Run(ctx)
    if err != nil {
        panic(err)
    }
    status, err := job.Wait(ctx)
    if err != nil {
        panic(err)
    }

    if status.Err() != nil {
        panic(status.Err)
    }
}

标签: gogoogle-cloud-storage

解决方案


如果您必须使用 Go 客户端库,则在更改格式之前,您需要从 GCS 获取对象。然后,按照您的操作重新上传以将其导入 BQ。https://godoc.org/cloud.google.com/go/storage中没有记录直接更新 GCS 中的对象的方法,只有其元数据。


推荐阅读