从postgres生成avro文件的实用程序。

pg2avro的Python项目详细描述


pg2avro

将gres发送到avro生成器。

功能

  • 从列定义生成avro架构。
  • 生成avro序列化的数据格式消耗品。

用法

正在生成架构

方法:pg2avro.get_avro_schema

get_avro_schema(
    "mytable", 
    "public", 
    [
        # Dictionary mode
        {
            "name": "column_name_1",
            "type": "int2",
            "nullable": False,
        },
        # SqlAlchemy mode
        SqlAlchemyColumn(ARRAY(TEXT), name="column_name_2"),
        ...
    ]
)

模式生成器需要以下信息:

  • 表名
  • 命名空间(schema在sql中,dataset在大查询中等)
  • columns-iterable of columns,每个元素具有:
    • 姓名
    • type-_前缀用于指示数组类型
    • 可为空(可选,如果未提供,则假定为True
  • 列映射-具有列映射的可选ColumnMapping对象(有关详细信息,请参见下文)。

列数据可以多种格式传递。

支持的列格式

  • 带所需键和数据的字典
  • sqlalchemy列对象
  • 任何具有兼容属性和所需数据的对象
  • 具有所需数据但没有兼容属性/键的字典或对象,随ColumnMapping提供。

注意:此模式支持从原始postgres数据生成架构-udt_name可用于生成架构。

columns = [
    CustomColumn(name="column_name", udt_name="int2", is_nullable=False),
]

get_avro_schema(
    table_name,
    namespace,
    columns,
    ColumnMapping(name="name", type="udt_name", nullable="is_nullable"),
)

生成行数据

方法:pg2avro.get_avro_row_dict

此方法需要使用行数据和架构生成行。

支持的行格式

  • 具有对应于架构字段名的键的字典
  • 对象,其键与架构字段名相对应(其工作方式与具有相应字段的字典相同)
  • 数据顺序与模式中指定的字段相同的元组
columns = [
    {"name": "name", "type": "varchar", "nullable": False},
    {"name": "number", "type": "float4", "float4", "nullable": False},
]
schema = get_avro_schema(table_name, namespace, columns)
rows = [
    {"name": "John", "number": 1.0},
    RowObject(name="Jack", number=2.0),
    ("Jim", 3.0),
]
data = [get_avro_row_dict(row, schema) for row in rows]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何解决这个索引越界问题   HQL表达式中的java Null   未使用mongojackson删除java文档   windows Java编译了我的程序,但我无法运行它   java获取泛型T的类型   用于非IBM Windows计算机的java IBM SDK 7?   java数据库上多线程插入(更新)和单线程顺序插入(更新)的性能比较?   集合是否存在只接受一个条目并允许从映射中获取值的Java映射?   带有共享主键的JavaSpring数据JPA:OneToOne似乎不起作用   java与<>的区别?方法和变量声明中的超级/扩展字符串>   java从终端以调试模式运行jar   java如何找出谁破坏了密钥类型的事件?   osgi在Java中访问一个包的多个版本   如果输入不是整数,java会反复请求用户输入   在java中导入本地库错误   JavaE(fx)剪辑:带有javafx的首选项页面   基本Java映射的orm对象哈希映射(将POJO映射为映射)