SDK for Python

A Python library for OpenAPI's HTTP-based Core APIs.


下载地址

opends-sdk-python

SDK安装

在本项目路径下执行 $ python setup.py install

注意事项

  1. python支持版本:2.6/2.7
  2. 字符编码使用UTF-8
  3. 支持的数据类型:number, string, date(建议使用 %Y-%m-%d %H:%M:%S 格式)
  4. 数据源名, 工作表名, 同一张表的不同字段名, title不可重复
  5. 当前的架构设计对于频繁的小量数据写入处理效率不高,所以建议还是尽量批量的更新数据, 但是大量的数据传输会提高等待时间,因此建议尽量将数据量控制在5万条左右
  6. ACCESS_TOKEN从BDP网站的开发者中心获取

SDK简介

所属类 方法 说明
BDPClient get_all_ds 获取所有数据源
get_ds 获取数据源
delete_ds 删除数据源
create_ds 创建数据源
DS get_all_tables 获取该数据源的所有工作表
create_table 创建工作表
delete_table 删除工作表
get_table 获取工作表
update 更新相应工作表
update_all 更新所有工作表
get_id 获取数据源id
get_name 获取数据源名称
Table insert_data_by_name 插入数据
insert_data_by_id 插入数据
bulk_delete 批量删除数据
delete_data_by_name 删除数据行
delete_data_by_id 删除数据行
update_data_by_name 更新数据行
update_data_by_id 更新数据行
commit 提交原始工作表
revert 回滚原始工作表中未提交的数据
clean 清空该工作表
get_fields 列出所有字段
add_field 添加指定字段
delete_field 删除指定字段
modify_table 修改表的别名
preview 预览数据
get_info 获取表信息
get_id 获取表id
get_name 获取表名称
modify_field 修改字段属性

SDK说明

  • BDPClient

    用于初始化客户端,进行数据源增、删、查操作等等。

    构造方法

    • BDPClient(ACCESS_TOKEN, "domain")

    • 使用:

      from opends.sdk import BDPClient
      client = BDPClient(ACCESS_TOKEN, "domain")
      

    实例方法

    • get_all_ds() 获取所有数据源对象,返回键为名字,值为相应数据源对象的字典。

      • 返回值: {"ds_name": ds}

      • 使用:

        all_ds = client.get_all_ds()
        
    • get_ds(name) 根据名字获取数据源,返回数据源对象

      • 参数:

        参数 类型
        name string
      • 返回值: ds(DS object)

      • 使用:

        ds = client.get_ds("ds_name")
        
    • delete_ds(name) 根据名字删除数据源

      • 参数:

        参数 类型
        name string
      • 使用:

        client.delete_ds("ds_name")
        
    • create_ds(name) 根据名字创建数据源,返回创建的数据源对象

      • 参数:

        参数 类型
        name string
      • 返回值: ds(DS object)

      • 使用:

        ds = client.create_ds("ds_name")
        
  • DS

    数据源类,可以管理该数据源内的各种工作表,并对工作表进行增、删、改、查等操作。

    通过调用BDPClient类的create_ds方法来创建DS对象,不能通过直接实例化DS类来创建数据源. 通过调用BDPClient类的get_ds方法来获取相应的DS对象.

    构造方法

    • DS(name, token)

    实例方法

    • get_all_tables() 获取该数据源的所有工作表对象,返回键为表名,值为工作表对象的字典

      • 返回值: {"table_name": table}

      • 使用:

        all_tables = ds.get_all_tables()
        
    • create_table(name, schema, uniq_key=None) 在该数据源中创建工作表,返回该工作表, schema中的type只能是"string"/"number"/"date"其中一种。对于每个字段的设定,remark和title参数可以缺省。

      • 参数:

        参数 类型 可缺省
        name string
        schema list
        uniq_key list
        title string
      • 使用:

        schema = [
         {
             "remark": "",
             "name": "id",
             "type": "number",
             "title": "ident"
         },
         {
             "remark": "",
             "name": "name",
             "type": "string"
         },
         {
             "remark": "",
             "name": "height",
             "type": "number"
         },
         {
             "remark": "",
             "name": "join_time",
             "type": "date"
         },
         {
             "remark": "",
             "name": "mark",
             "type": "string",
             "title": "words"
         }
        ]
        table = ds.create("table_name", schema=schema, uniq_key=["id"], title="my_table")
        
    • delete_table(name) 根据名字删除工作表

      • 参数:

        参数 类型
        name string
      • 使用:

        ds.delete_table("table_name")
        
    • get_table(name) 根据名字获取工作表

      • 参数:

        参数 类型
        name string
      • 使用:

        table = ds.get_table("table_name")
        
    • update(tb_ids) 根据工作表id列表更新相应工作表

      • 参数:

        参数 类型
        tb_ids list
      • 使用:

        tb_ids = ["tb_id1", "tb_id2"]
        ds.update(tb_ids)
        
    • update_all() 级联更新该数据源的下的所有工作表

      • 使用:

        ds.update_all()
        
    • get_id() 获取数据源id

      • 返回值: ds_dh83hd2hd23jd32bi

      • 使用:

        ds_id = ds.get_id()
        
    • get_name() 获取数据源名称

      • 返回值: ds_name

      • 使用:

        ds_name = ds.get_name()
        
  • Table

    工作表类,对工作表进行增、删、改的操作。

    通过调用DS类的create_table方法而不是通过实例化Table类来创建新表。 通过调用DS类的get_table方法来获取相应表的Table实例。

    构造方法

    • Table(ds, name, tb_id, schema=(), uniq_key=None)

    实例方法

    • insert_data_by_name(fields, data) 向指定的字段插入数据,根据字段名

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["id", "name", "age"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.insert_data_by_name(fields, data)
        
    • insert_data_by_id(fields, data) 向指定的字段插入数据,根据字段id

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["fksada22", "fksae322", "fks832dh23"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.insert_data_by_id(fields, data)
        
    • bulk_delete(where) 根据where条件批量删除数据

      • 参数:

        参数 类型 可缺省
        where string
      • 使用:

        tb = ds.get_table("table_name")
        where = "`id` > 3"
        tb.bulk_delete(where)
        
    • delete_data_by_name(fields, data) 根据fields列表中的字段名删除数据行

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["id", "name", "age"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.delete_data_by_name(fields, data)
        
    • delete_data_by_id(fields, data) 根据fields列表中的字段id删除数据行

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["fksada22", "fksae322", "fks832dh23"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.delete_data_by_id(fields, data)
        
    • update_data_by_name(fields, data) 根据fields列表中的字段名更新数据行

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["id", "name", "age"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.update_data_by_name(fields, data)
        
    • update_data_by_id(fields, data) 根据fields列表中的字段id更新数据行

      • 参数:

        参数 类型 可缺省
        fields list
        data list
      • 使用:

        tb = ds.get_table("table_name")
        fields = ["fksada22", "fksae322", "fks832dh23"]
        data = [[1, "user1", 13], [2, "user2", 14]]
        tb.update_data_by_id(fields, data)
        
    • commit() 提交原始工作表

      • 使用:

        tb = ds.get_table("table_name")
        tb.commit()
        
    • revert() 回滚原始工作表中未提交的数据

      • 使用:

        tb = ds.get_table("table_name")
        tb.revert()
        
    • clean() 清空该工作表

      • 使用:

        tb = ds.get_table("table_name")
        tb.clean()
        
    • get_fields() 列出所有字段

      • 返回值:

        [
          {
              "name": "xxx",
              "uniq_index": 0/1,
              "type": "number"/"string"/"date",
              "field_id": "fksada32",
              "remark": ""
          },
          {...}
        ]
        
      • 使用:

        tb = ds.get_table("table_name")
        fields = tb.get_fields()
        
    • add_field(field_name, field_type, uniq_index=0, title=None) 添加指定字段, field_type只能是"string"/"number"/"date"其中一种。uniq_index为1表示该字段为主键,0为非主键, title为字段别名。

      • 参数:

        参数 类型 可缺省
        field_name string
        field_type string
        uniq_index int
        title string
      • 使用:

        tb = ds.get_table("table_name")
        tb.add_field("field_name", "string", 0, "alias_field")
        
    • delete_field(field_name) 删除指定字段

      • 参数:

        参数 类型 可缺省
        field_name string
      • 使用:

        tb = ds.get_table("table_name")
        tb.delete_field("field_name")
        
    • modify_table(alias_name) 修改表的别名(在web端显示的名称)

      • alias_name: alias_name (字符串)

      • 参数:

        参数 类型 可缺省
        alias_name string
      • 使用:

        tb = ds.get_table("table_name")
        tb.modify_table("alias_name")
        
    • modify_field(field_name, field_type, uniq_index=0, title=None) 修改字段属性,field_type只能是"string"/"number"/"date"其中一种。uniq_index为1表示该字段为主键,0为非主键, title为字段别名。

      • 参数:

        参数 类型 可缺省
        field_name string
        field_type string
        uniq_index int
        title string
      • 使用:

        tb = ds.get_table("table_name")
        tb.modify_field("field_name", "string", 0, "alias_field")
        
    • preview() 预览数据

      • 返回值:

        {
          "schema" [
              {
                  "name": "id",
                  "type": "string",
                  "uniq_index": 0,
                  "remark": ""
              },
              {...}
          ],
          "data": [...],
          "data_count": 3,
          "utime": "2015-03-24 18:02:36"
          "status": 0,
          "materialized": 1,
          "can_partition": False,
          "partition": None
        }
        
      • 使用:

        tb = ds.get_table("table_name")
        result = tb.preview()
        
    • get_info() 获取表信息

      • 返回值:

        {
          "fields": [
              {
                  "name": "xxx",
                  "field_id": "fdsa8783",
                  "title": "",
                  "type": "string"
              },
              {...}
          ],
          "tb_id": "tb_id",
          "name": "name",
          "data_count": 100,
          "title": "date_test"
        }
        
      • 使用:

        tb = ds.get_table("table_name")
        result = tb.get_info()
        
    • get_id() 获取表id

      • 返回值: tb_dh83hd2hd23jd32bi

      • 使用:

        tb_id = tb.get_id()
        
    • get_name() 获取表名称

      • 返回值: tb_name

      • 使用:

        tb_name = tb.get_name()
        

异常信息

  1. 所有的服务器端异常都将抛出包含错误码以及错误信息的OpenDSException,错误码可以参照API文档

  2. 本地的异常将直接抛出带错误信息的OpenDSException

示例

  • 获取指定数据源对象并获取其中所有的工作表

    from opends.sdk import BDPClient
    
    c = BDPClient(ACCESS_TOKEN, "domain")
    
    ds = c.get_ds("ds_example")
    
    all_tables = ds.get_all_tables()
    

results matching ""

    No results matching ""