zoukankan      html  css  js  c++  java
  • 关于下载GAE High Replication Datastore数据

    关于下载GAE High Replication Datastore数据[实战篇]下

    通过bulk loader可以批量上传下载数据,GAE支持xml,csv格式数据批量上传,以及xml,csv和文本格式下载。

    你可以选择自动生成一个bulkloader.yaml,或者手动编码来写一个bulk loader。谷歌不推荐手动编写,个人也觉得自动生成才是王道。

    如何自动生成bulkloader.yaml

    bulkloader.yaml是一个描述数据格式的配置文件,格式例如xml或csv。bulk loader进行数据导入时需要这个配置文件来将外部数据(xml或csv)转换为中间数据——python字典类型,然后将中间数据——python字典转换为Google Engine Datastore的Entity数据。下载数据时,转换顺序则反过来。

    执行以下命令自动生成bulkloader.yaml:

    $ appcfg.py create_bulkloader_config --filename=bulkloader.yaml --url=http://your_app_id.appspot.com/_ah/remote_api

    这个命令会在当前目录下创建一个bulkloader.yaml文件,一般说来你还要对这个原始的bulkloader.yaml文件进行配置才能满足你对数据传递的要求。

    配置bulkloader.yaml文件

    bulkloader.yaml文件主要包含两部分python_preamble和transformers。

    python_preamble:
    - import: google.appengine.ext.bulkload.transform
    - import: google.appengine.ext.db
    - import: re
    - import: base64

    一般来说,这部分你都不用修改,除非你要在转换格式中用到其他模块或方法,例如我在这里增加了datetime。

    复制代码
    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
    - import: datetime
    复制代码

    第二部分transformers是用来描述数据类型的,其中包含一个或多个kind,视你在datastore中kind数量而定。每个kind中又包括以下内容:

    1. connector:用来指定输入输出格式,值为xml,csv或文本。
    2. connector_options:connector的一些属性。
    3. property_map:每个字段的映射关系(即转换关系)。

    配置bulkloader.yaml的第一步就是设置connector,谷歌默认的是csv格式,无论输入输出都要求csv首行是字段名称。connector为:simplexml, csv, simpletext。

    connector的配置参数可以在谷歌文档找到。

    对property而言:

    • property:datastore中的字段名称。
    • external_name:xml的tag名称,或者csv首行中的字段名。
    • import_transform:上传时的数据格式,或者是数据转换规则。
    • export_transform:下载时的数据格式,或者是数据转换规则。

    property和external_name是必须的,如果只是想要上传或者下载的话,可以注释掉export_transform或者import_transform。

    关于simplexml

    bulkloader.yaml中的simplexml目前只支持简单的xml结构,例如:

    复制代码
    <book>
      <article>
        <author>John Kerry</author>
        <title>How is it, China</title>
        <content>Yes, there is a huge population.</content>
      </article>
    </book>
    复制代码

    在bulkloader.yaml中配置为:

      connector: simplexml
      connector_options:
        xpath_to_nodes: /book/article
        style: element_centric

    datastore中的每一条entity会作为一个article输出,author, title, content之间不能互相嵌套,不能有层级关系。style具有两个值element_centric或者attribute_centric,意思是根据xpath找到的node,是使用它的属性值作为数据还是它的子节点作为数据来进行转换。

    在你的GAE应用数据模型中,或许你设置一个自动添加创建日期的字段,例如create_date。

    这时你应该这样配置 import_transform: "lambda x: datetime.datetime.now()"。

    上传下载数据:

    当配置完成bulkloader.yaml后,就可以开始使用它来传递数据了。你不是一定要把bulkloader.yaml放在你的应用文件夹中,你可以放在任意文件夹中,然后在命令行切换到该文件夹,执行以下命令:

    $ appcfg.py download_data --application=s~ifantastic-dragon --auth_domain=gmail.com --url=https://ifantastic-dragon.appspot.com/_ah/remote_api --kind=Wordroot --config_file=bulkloader.yaml --filename=x.xml

    因为GAE的不稳定,我也不是每次都成功,但以上的命令是成功最高的。虽然我也觉得有点无稽,但还是请保持以上的参数顺序,貌似以上顺序是最优的。

    附:如何下载GAE源代码

    谷歌为GAE编写了多种语言说明,但并不是所有语言都得到了最好的更新。经验之谈的博文可以帮助理解,但想要最好地理解GAE,还是读官方文档,而英文文档是最佳选择。

    例如我曾在华蟒邮件列表看到有人抱怨GAE不能下载源文档,而事实是在谷歌中文文档缺少了如何下载源代码这一小节,但在英文文档中可以找到。

    要下载GAE App源代码,在命令行或者终端中执行以下命令:

    appcfg.py download_app -A <your_app_id> -V <your_app_version> <output-dir>
    实例:$ appcfg.py download_app -A ifantastic-dragon -V 5 /Downloads/GaeApp
                                               1          2         3
    1 - 应用的id号
    2 - 应用的版本号
    3 - 下载目的地目录,如果不传入<output-dir>,则下载到当前目录,前提是当前目录为空。

    执行命令后,会出现以下代码并要求输入App所有者的帐号和密码:

    复制代码
    Getting file list...
    Email: <admin-id>@example.com      #输入帐号(邮箱)
    Password for <admin-id>@example.com:   #输入密码
    Fetching files...
    Getting files...
    [1/5] request.py
    [2/5] login.py
    [3/5] static/screen.css
    [4/5] static/print.css
    [5/5] images/bird.png
    复制代码

    你可以在GAE App控制台点击Versions,在出现的页面中选择 permanently prohibit code downloads。[注意]这个步骤是不可逆的,一旦选择永久禁止代码下载,则永远不能再下载这个应用的源代码了。

     
    iFantasticMe 2013-04-14 18:48 阅读:217 评论:0
     
    iFantasticMe 2013-04-14 00:06 阅读:11 评论:0
     
     
    标签: pythonGAE
  • 相关阅读:
    5.4 省选模拟赛 修改 线段树优化dp 线段树上二分
    一本通 高手训练 1782 分层图 状压dp
    luogu P3830 [SHOI2012]随机树 期望 dp
    5.2 省选模拟赛 或许 线型基
    luogu P4562 [JXOI2018]游戏 组合数学
    一本通 高手训练 1781 死亡之树 状态压缩dp
    luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开
    4.28 省选模拟赛 负环 倍增 矩阵乘法 dp
    HDU 1756 Cupid's Arrow 计算几何 判断一个点是否在多边形内
    一本通 高手训练 1763 简单树 可持久化线段树 树链刨分 标记永久化
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3021172.html
Copyright © 2011-2022 走看看