go - 在将其导入 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)
}
}
解决方案
如果您必须使用 Go 客户端库,则在更改格式之前,您需要从 GCS 获取对象。然后,按照您的操作重新上传以将其导入 BQ。https://godoc.org/cloud.google.com/go/storage中没有记录直接更新 GCS 中的对象的方法,只有其元数据。
推荐阅读
- deep-learning - 防止更新卷积权重矩阵的特定元素
- python - 如何在 django 模板中设置动态 seo 标签
- matrix - 仅获取 [Count by Date] 的最大值
- git - 如何更改我推送到的 git 存储库
- java - Spring Boot 应用看不到配置文件
- javascript - 我正在尝试在 wordpress 中学习 ajax 以删除表格条目,但在放置时感到困惑
- javascript - 我无法在 JS 上为数组设置值 - TypeError:无法将未定义或 null 转换为对象
- c# - C# FORM 复制程序由于 RAM 使用过多而崩溃
- reactjs - 在一个 React 组件中切换两种不同的 props 类型
- python - 如何在不显式读取的情况下将二进制流缓冲区写入 Python 3 中的文件?