将 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)
我有一个包含 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)