0

データストアビューア

更新:以下を参照

データセットの[キー名]フィールドに入力する方法を理解したので、書き込み操作を2(8から)減らしました。しかし、私はまだこの余分な空の列「ID」を持っています。私はbulkloader.pyのさまざまな構成を試しましたが、その列にデータを入力できず、書き込み操作をさらに減らすことができます...

これが私が持っているものです:

python_preamble:
- import: base64
- import: re
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.bulkload.bulkloader_wizard
- import: google.appengine.ext.db
- import: google.appengine.api.datastore
- import: google.appengine.api.users

transformers:

- kind: Word
  connector: csv 

  property_map:
    - property: __key__
      external_name: word
      export_transform: transform.key_id_or_name_as_string

    - property: ID
      external_name: ID  
      # How to configure this one to use up that silly empty column called "ID"?

    - property: otherlangs
      external_name: otherlangs

これが私のcsvファイルのヘッダーといくつかのサンプル行です:

$ head allting.csv
ID,word,otherlangs
100,a,it|uno|
200,aaltos,fi|aaltojen|
300,aardvark,is|jarðsvín|nl|aardvarken|

更新:さて、「キー名」列を犠牲にして「ID」列にデータを入力する方法を見つけました...

私はbulkload.pyを次のように変更しました:

transformers:

- kind: Word
  connector: csv
  connector_options:
    encoding: utf-8
    columns: from_header
  property_map:
    - property: __key__
      external_name: id
      export_transform: transform.key_id_or_name_as_string
      import_transform: transform.create_foreign_key('id', key_is_id=True)

    - property: word·
      external_name: word·

    - property: otherlangs·
      external_name: otherlangs·

csvファイルは次のようになります。

id,word,otherlangs
100,a,it|uno|
200,aaltos,fi|aaltojen|
...

そして、データストアビューアの出力は次のようになります。

現在のデータストアビューア

IDと[キー名]列にデータを入力して書き込み操作を4に下げる方法があるかどうか、まだ疑問に思っていますか?

4

1 に答える 1

0

この質問について誰も考えていないので、私が思いついたこの回避策を文書化します。

これをbulkload.yamlファイルに行うことで、書き込み操作を4に減らすことができました

...
transformers:

- kind: Word
  connector: csv
  connector_options:
    encoding: utf-8
    columns: from_header
  property_map:
    - property: __key__
      external_name: word
      export_transform: transform.key_id_or_name_as_string

    - property: otherlangs
      external_name: otherlangs

クラスを次のように変更します。

class Word(db.Model):
  word = db.StringProperty(multiline=False)
  otherlangs = db.StringProperty(multiline=True)

  def __str__(self): #encode('utf8')
     return "word: " + str(self.key().name().encode('utf8')) + ", otherlangs: " + self.otherlangs.encode('utf8')

そして今、書き込み操作は 4 です。これは素晴らしいことです。

ops を 4 まで書き留める

インタラクティブ コンソールでのクエリが難しくなり、それを理解するのにしばらく時間がかかりました。

from google.appengine.api import users
from google.appengine.ext.db.metadata import Namespace
import words

foo = words.Word.get_by_key_name('abalone')
print foo

これは以下を生成します:

word: abalone, otherlangs: fr|ormeaux|it|orecchie di mare|

私が理解していないのは...バルクアップローダーが私のために行っているように、単語をキーにすることができるように、新しい単語を動的に追加するにはどうすればよいですか。しかし、私はそれについてあまり心配するつもりはありません.バルクローダーがそれを行うことができる限り、それで十分だと思います.

于 2013-02-21T04:35:13.170 に答える