我已经开发了Golang代码,该代码将从Google云存储中提取csv文件,而不是将其导入到Big Query表中。
一切正常,除了我的CSV包含日期格式为“ 2017-06-14 00:49:52 PDT”的DATE列。由于格式必须为“ 2017-06-14”,因此导致无法在Big Query中导入CSV文件的问题。在上传到Google存储设备之前,我无法在CSV中手动对其进行编辑,因为它涉及的文件非常大(每天都会更改)。
在执行将其导入到Big Query的其余代码之前,是否可以使用go lang更新存储在存储中的CSV并在此列(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)
}
}
答案 0 :(得分:0)
如果必须使用Go客户端库,则在更改格式之前,需要从GCS获取对象。然后,根据需要重新上传以将其导入BQ。 https://godoc.org/cloud.google.com/go/storage中没有记录任何方法可以直接在GCS中直接更新对象,只有其元数据即可。