将 CSV 导入 google 云数据存储

Import CSV into google cloud datastore

我有一个包含 2 列和 20,000 行的 CSV 文件,我想将其导入 Google Cloud Datastore。我是 Google 云和 NoSQL 数据库的新手。我曾尝试使用数据流,但需要提供 Javascript UDF 函数名称。有人有这方面的例子吗?一旦数据进入数据存储区,我将查询该数据。 任何关于如何创建它的建议或指导将不胜感激。

使用 Apache Beam,您可以使用 TextIO class 读取 CSV 文件。请参阅 TextIO 文档。

Pipeline p = Pipeline.create();

p.apply(TextIO.read().from("gs://path/to/file.csv"));

接下来,应用一个转换来解析 CSV 文件中的每一行和 return 一个 Entity 对象。根据您希望如何存储每一行​​,构建适当的 Entity 对象。 This page 有一个如何创建 Entity 对象的示例。

.apply(ParDo.of(new DoFn<String, Entity>() {
    @ProcessElement
    public void processElement(ProcessContext c) {
        String row = c.element();
        // TODO: parse row (split) and construct Entity object
        Entity entity = ...
        c.output(entity);
    }
}));

最后,将 Entity 个对象写入 Cloud Datastore。请参阅 DatastoreIO 文档。

.apply(DatastoreIO.v1().write().withProjectId(projectId));

在 python 中很简单,但可以轻松适应其他语言。使用 split() 方法遍历行和逗号分隔值:

from google.appengine.api import urlfetch
from my.models import MyModel

csv_string   = 'http://someplace.com/myFile.csv'
csv_response = urlfetch.fetch(csv_string, allow_truncated=True) 

if csv_response.status_code == 200:
    for row in csv_response.content.split('\n'):
        row_values = row.split(',')
        # csv values are strings.  Cast them if they need to be something else
        new_entry = MyModel(
            property1 = row_values[0],
            property2 = row_values[1]
        )
        new_entry.put()

else:
    print 'cannot load file: {}'.format(csv_string)