登录
首页 >  Golang >  Go问答

将 App Engine 数据存储区中的数据导出为 CSV 文件的方法

来源:stackoverflow

时间:2024-03-18 18:18:28 484浏览 收藏

本文介绍了一种从 App Engine 数据存储区导出数据为 CSV 文件的方法。使用此方法,可以将从数据存储查询的值列表存储到 CSV 文件中。该代码使用 Go 语言编写,通过在内存中构建文件来处理较大的实体集。对于较小的实体集,该方法提供了在处理程序中直接写入文件的功能。此外,该方法还介绍了使用 Google TaskQueue 和 Google Cloud Storage 处理大数据集时避免请求超时的技巧。

问题内容

我需要将从数据存储查询的值列表存储到 csv 文件中

这是我正在尝试的代码

//WriteCsvFileHandler is to
func WriteCsvFileHandler(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
    kinDiagnosisList := []Diagnosis{}
    context := appengine.NewContext(r)

    //Getting Namespace
    namespace := ps.ByName("namespace")
    ctx, err := appengine.Namespace(context, namespace)
    if err != nil {
        log.Infof(ctx, "Namespace error from GetAllDiagnosisForEncounterHandler")
        RespondErr(w, r, http.StatusInternalServerError, err.Error())
        return
    }
    file, err := os.Create("result.csv")
    checkError("Cannot create file", err)
    defer file.Close()

    writer := csv.NewWriter(file)
    defer writer.Flush()

    q := datastore.NewQuery("Diagnosis")
    data, err := q.GetAll(ctx, &kinDiagnosisList)
    if err != nil {
        log.Infof(ctx, "Keys generation error from GetAllDiagnosisForEncounterHandler")
        RespondErr(w, r, http.StatusInternalServerError, err.Error())
        return
    }

    for _, value := range  {
        err := writer.Write(value)
        checkError("Cannot write to file", err)
    }
}

func checkError(message string, err error) {
    if err != nil {
        log.Fatal(message, err)
    }
}

如何将来自数据存储的诊断列表存储到 csv 文件中?


解决方案


您遇到错误了吗?

您需要能够输出的实体集有多大?

最有力的答案是使用 Google Dataflow,但您必须用 java 或 python 编写该作业。

否则,如果您需要一个涉及较少的解决方案,则必须在处理程序提供文件之前在内存中构建该文件。如果请求超时是您的问题,您可以通过 Google TaskQueue 调用该处理程序,将超时时间提高到 10 分钟,并将文件写入 Google Cloud Storage。

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>