{ "info": { "author": "Milan Lukac", "author_email": "milan.lukac@kiwi.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Plugins", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# pg2avro\n\nPostgres to Avro generator.\n\n## Features\n\n- Generate Avro schema from column definition.\n- Generate data format consumable for Avro serialization.\n\n# Usage\n\n## Generating schema\n\nMethod: `pg2avro.get_avro_schema`\n\n```\nget_avro_schema(\n \"mytable\", \n \"public\", \n [\n # Dictionary mode\n {\n \"name\": \"column_name_1\",\n \"type\": \"int2\",\n \"nullable\": False,\n },\n # SqlAlchemy mode\n SqlAlchemyColumn(ARRAY(TEXT), name=\"column_name_2\"),\n ...\n ]\n)\n\n```\n\nSchema generator needs the following information:\n- table name\n- namespace (`schema` in SQL, `dataset` in Big Query etc.)\n- columns - iterable of columns, each element with:\n - name\n - type - `_` prefix is used to indicate array types\n - nullable (optional, `True` assumed if not provided)\n- column mapping - optional `ColumnMapping` object with column mappings (see below for more info).\n\nColumn data can be passed in multiple formats.\n\n### Supported column formats\n\n- Dictionary with required keys and data\n- SqlAlchemy Column object\n- Any object with compatible attributes and required data\n- Dictionary or object with required data, but without compatible attributes/keys, supplied with ColumnMapping.\n\nNote: this mode supports **generating schema from raw postgres data** - `udt_name` can be used to generate the schema.\n```\ncolumns = [\n CustomColumn(name=\"column_name\", udt_name=\"int2\", is_nullable=False),\n]\n\nget_avro_schema(\n table_name,\n namespace,\n columns,\n ColumnMapping(name=\"name\", type=\"udt_name\", nullable=\"is_nullable\"),\n)\n```\n\n## Generating rows data\n\nMethod: `pg2avro.get_avro_row_dict`\n\nThis method requires rows data and schema to generate the rows with.\n\n### Supported row formats\n\n- Dictionary with keys corresponding to schema field names\n- Object with keys corresponding to schema field names (works the same as dictionary with corresponding fields)\n- Tuple with data in the same order as fields specified in schema\n\n```\ncolumns = [\n {\"name\": \"name\", \"type\": \"varchar\", \"nullable\": False},\n {\"name\": \"number\", \"type\": \"float4\", \"float4\", \"nullable\": False},\n]\nschema = get_avro_schema(table_name, namespace, columns)\nrows = [\n {\"name\": \"John\", \"number\": 1.0},\n RowObject(name=\"Jack\", number=2.0),\n (\"Jim\", 3.0),\n]\ndata = [get_avro_row_dict(row, schema) for row in rows]\n\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kiwicom/pg2avro", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pg2avro", "package_url": "https://pypi.org/project/pg2avro/", "platform": "", "project_url": "https://pypi.org/project/pg2avro/", "project_urls": { "Homepage": "https://github.com/kiwicom/pg2avro" }, "release_url": "https://pypi.org/project/pg2avro/0.1/", "requires_dist": [ "sqlalchemy (>=1.2)", "psycopg2 (>=2.7)" ], "requires_python": ">=3.6", "summary": "Utility generating avro files from postgres.", "version": "0.1" }, "last_serial": 5607121, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "8503ea582ba05d0462622aba23c082d7", "sha256": "1bc24e246188f37c753cf2356bfd4c68c89b4455209725be5f95c1b68309e83a" }, "downloads": -1, "filename": "pg2avro-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8503ea582ba05d0462622aba23c082d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 3013, "upload_time": "2019-07-30T11:06:37", "url": "https://files.pythonhosted.org/packages/8f/14/0a2400f50c175487bde32317817c8ea7085f19e35b5e5dbcecd88806f796/pg2avro-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de7d861ea4e3a094d9005a6d3497cbf2", "sha256": "1e9cff4920607d3f90cb4c8a8679fbbfec8166d9efc6ca1e55773587d4c729df" }, "downloads": -1, "filename": "pg2avro-0.1.tar.gz", "has_sig": false, "md5_digest": "de7d861ea4e3a094d9005a6d3497cbf2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2546, "upload_time": "2019-07-30T11:06:39", "url": "https://files.pythonhosted.org/packages/66/eb/41286c3d3562f9143544d00be8e34bcefa5797bd9db30110a73a970ef408/pg2avro-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8503ea582ba05d0462622aba23c082d7", "sha256": "1bc24e246188f37c753cf2356bfd4c68c89b4455209725be5f95c1b68309e83a" }, "downloads": -1, "filename": "pg2avro-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8503ea582ba05d0462622aba23c082d7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 3013, "upload_time": "2019-07-30T11:06:37", "url": "https://files.pythonhosted.org/packages/8f/14/0a2400f50c175487bde32317817c8ea7085f19e35b5e5dbcecd88806f796/pg2avro-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "de7d861ea4e3a094d9005a6d3497cbf2", "sha256": "1e9cff4920607d3f90cb4c8a8679fbbfec8166d9efc6ca1e55773587d4c729df" }, "downloads": -1, "filename": "pg2avro-0.1.tar.gz", "has_sig": false, "md5_digest": "de7d861ea4e3a094d9005a6d3497cbf2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 2546, "upload_time": "2019-07-30T11:06:39", "url": "https://files.pythonhosted.org/packages/66/eb/41286c3d3562f9143544d00be8e34bcefa5797bd9db30110a73a970ef408/pg2avro-0.1.tar.gz" } ] }