syncanysql


Namesyncanysql JSON
Version 0.1.19 PyPI version JSON
download
home_pagehttps://github.com/snower/syncany-sql
SummarySimple and easy-to-use sql execution engine
upload_time2024-03-22 10:48:44
maintainerNone
docs_urlNone
authorsnower
requires_pythonNone
licenseMIT
keywords
VCS
bugtrack_url
requirements pytz tzlocal pyyaml pendulum sqlglot Pygments Pygments prompt-toolkit rich pymongo PyMySQL openpyxl psycopg2-binary elasticsearch influxdb clickhouse_driver redis requests pymssql prql-python coverage pytest pytest-benchmark pytest-cov pytest-integration
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Syncany-SQL
[![Tests](https://img.shields.io/github/actions/workflow/status/snower/syncany-sql/ci.yml?label=tests)](https://github.com/snower/syncany-sql/actions/workflows/ci.yml)
[![GitHub Repo stars](https://img.shields.io/github/stars/snower/syncany-sql?style=social)](https://github.com/snower/syncany-sql/stargazers)

简单易用的SQL执行引擎。

- 可在本地运行MySQL语法结构的SQL
- 支持查询常用mysql、mongodb、postgresql、sqlserver、elasticsearch、influxdb、clickhouse、sqlite数据库及execl、csv、json和普通文本文件
- 支持本地临时数据表逻辑做中间结果保存
- 数据库数据加载使用简单条件过滤及IN条件查询
- 因由本地完成Join匹配所以支持不同库表、不同主机及不同类型数据库间Join关联查询
- Group By分组聚合计算及Order By排序也由本地执行,保证数据库安全性
- 数据写Insert Into支持 ”仅插入 I“、”存在更新否则插入 UI“、”存在更新否则插入其余删除 UDI“、”删除后插入 DI“四种模式
- 大数据量支持批次执行,有Group By或Having条件过滤自动执行Reduce合并结果
- 支持流式执行

-----

- [安装](#安装)
- [特性与限制](docs/feature-restrictions.md)
- [配置详解](docs/configure.md)
- [驱动依赖](docs/driver-dependency.md)
- [示例详解](examples)
- [内置函数](docs/functions.md)
- [使用教程](docs/使用教程/)

## 安装

```bash
pip3 install syncanysql
```

#### Docker

```bash
docker pull sujin190/syncany-sql
```

## 查询Nginx日志

```sql
-- 查询访问量最高的三个IP
SELECT seg0 AS ip, COUNT(*) AS cnt FROM `file://data/access.log?sep= ` GROUP BY seg0 ORDER BY cnt DESC LIMIT 3;
```

## 查询JSON文件

```sql
SELECT
    a.site_id,
    b.name AS site_name,
    IF(c.site_amount > 0, c.site_amount, 0) AS site_amount,
    MAX(a.timeout_at) AS timeout_at,
    MAX(a.vip_timeout_at) AS vip_timeout_at,
    now() as `created_at?`
FROM
    (SELECT
        YIELD_ARRAY(sites) AS site_id,
            IF(vip_type = '2', GET_VALUE(rules, 0, 'timeout_time'), '') AS timeout_at,
            IF(vip_type = '1', GET_VALUE(rules, 0, 'timeout_time'), '') AS vip_timeout_at
    FROM
        `data/demo.json`
    WHERE
        start_date >= '2021-01-01') a
        JOIN
    `data/sites.json` b ON a.site_id = b.site_id
        JOIN
    (SELECT
        site_id, SUM(amount) AS site_amount
    FROM
        `data/orders.json`
    WHERE
        status <= 0
    GROUP BY site_id) c ON a.site_id = c.site_id
GROUP BY a.site_id;
```

# Python API

```python
from syncanysql import ScriptEngine

with ScriptEngine() as engine:
    engine.execute('''
        INSERT INTO `top_ips` SELECT
            ip, cnt
        FROM
            (SELECT
                seg0 AS ip, COUNT(*) AS cnt
            FROM
                `file:///var/log/nginx/access.log?sep= `
            GROUP BY seg0) a
        ORDER BY cnt DESC
        LIMIT 3;
    ''')
    print(engine.pop_memory_datas("top_ips"))
```

# License

Syncany-SQL uses the MIT license, see LICENSE file for the details.
            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/snower/syncany-sql",
    "name": "syncanysql",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": null,
    "keywords": null,
    "author": "snower",
    "author_email": "sujian199@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/0c/f5/fb26802eb1a68c8cc97d10658d3efc0954a0929b71f0194d18d36fe98255/syncanysql-0.1.19.tar.gz",
    "platform": null,
    "description": "# Syncany-SQL\n[![Tests](https://img.shields.io/github/actions/workflow/status/snower/syncany-sql/ci.yml?label=tests)](https://github.com/snower/syncany-sql/actions/workflows/ci.yml)\n[![GitHub Repo stars](https://img.shields.io/github/stars/snower/syncany-sql?style=social)](https://github.com/snower/syncany-sql/stargazers)\n\n\u7b80\u5355\u6613\u7528\u7684SQL\u6267\u884c\u5f15\u64ce\u3002\n\n- \u53ef\u5728\u672c\u5730\u8fd0\u884cMySQL\u8bed\u6cd5\u7ed3\u6784\u7684SQL\n- \u652f\u6301\u67e5\u8be2\u5e38\u7528mysql\u3001mongodb\u3001postgresql\u3001sqlserver\u3001elasticsearch\u3001influxdb\u3001clickhouse\u3001sqlite\u6570\u636e\u5e93\u53caexecl\u3001csv\u3001json\u548c\u666e\u901a\u6587\u672c\u6587\u4ef6\n- \u652f\u6301\u672c\u5730\u4e34\u65f6\u6570\u636e\u8868\u903b\u8f91\u505a\u4e2d\u95f4\u7ed3\u679c\u4fdd\u5b58\n- \u6570\u636e\u5e93\u6570\u636e\u52a0\u8f7d\u4f7f\u7528\u7b80\u5355\u6761\u4ef6\u8fc7\u6ee4\u53caIN\u6761\u4ef6\u67e5\u8be2\n- \u56e0\u7531\u672c\u5730\u5b8c\u6210Join\u5339\u914d\u6240\u4ee5\u652f\u6301\u4e0d\u540c\u5e93\u8868\u3001\u4e0d\u540c\u4e3b\u673a\u53ca\u4e0d\u540c\u7c7b\u578b\u6570\u636e\u5e93\u95f4Join\u5173\u8054\u67e5\u8be2\n- Group By\u5206\u7ec4\u805a\u5408\u8ba1\u7b97\u53caOrder By\u6392\u5e8f\u4e5f\u7531\u672c\u5730\u6267\u884c\uff0c\u4fdd\u8bc1\u6570\u636e\u5e93\u5b89\u5168\u6027\n- \u6570\u636e\u5199Insert Into\u652f\u6301 \u201d\u4ec5\u63d2\u5165 I\u201c\u3001\u201d\u5b58\u5728\u66f4\u65b0\u5426\u5219\u63d2\u5165 UI\u201c\u3001\u201d\u5b58\u5728\u66f4\u65b0\u5426\u5219\u63d2\u5165\u5176\u4f59\u5220\u9664 UDI\u201c\u3001\u201d\u5220\u9664\u540e\u63d2\u5165 DI\u201c\u56db\u79cd\u6a21\u5f0f\n- \u5927\u6570\u636e\u91cf\u652f\u6301\u6279\u6b21\u6267\u884c\uff0c\u6709Group By\u6216Having\u6761\u4ef6\u8fc7\u6ee4\u81ea\u52a8\u6267\u884cReduce\u5408\u5e76\u7ed3\u679c\n- \u652f\u6301\u6d41\u5f0f\u6267\u884c\n\n-----\n\n- [\u5b89\u88c5](#\u5b89\u88c5)\n- [\u7279\u6027\u4e0e\u9650\u5236](docs/feature-restrictions.md)\n- [\u914d\u7f6e\u8be6\u89e3](docs/configure.md)\n- [\u9a71\u52a8\u4f9d\u8d56](docs/driver-dependency.md)\n- [\u793a\u4f8b\u8be6\u89e3](examples)\n- [\u5185\u7f6e\u51fd\u6570](docs/functions.md)\n- [\u4f7f\u7528\u6559\u7a0b](docs/\u4f7f\u7528\u6559\u7a0b/)\n\n## \u5b89\u88c5\n\n```bash\npip3 install syncanysql\n```\n\n#### Docker\n\n```bash\ndocker pull sujin190/syncany-sql\n```\n\n## \u67e5\u8be2Nginx\u65e5\u5fd7\n\n```sql\n-- \u67e5\u8be2\u8bbf\u95ee\u91cf\u6700\u9ad8\u7684\u4e09\u4e2aIP\nSELECT seg0 AS ip, COUNT(*) AS cnt FROM `file://data/access.log?sep= ` GROUP BY seg0 ORDER BY cnt DESC LIMIT 3;\n```\n\n## \u67e5\u8be2JSON\u6587\u4ef6\n\n```sql\nSELECT\n    a.site_id,\n    b.name AS site_name,\n    IF(c.site_amount > 0, c.site_amount, 0) AS site_amount,\n    MAX(a.timeout_at) AS timeout_at,\n    MAX(a.vip_timeout_at) AS vip_timeout_at,\n    now() as `created_at?`\nFROM\n    (SELECT\n        YIELD_ARRAY(sites) AS site_id,\n            IF(vip_type = '2', GET_VALUE(rules, 0, 'timeout_time'), '') AS timeout_at,\n            IF(vip_type = '1', GET_VALUE(rules, 0, 'timeout_time'), '') AS vip_timeout_at\n    FROM\n        `data/demo.json`\n    WHERE\n        start_date >= '2021-01-01') a\n        JOIN\n    `data/sites.json` b ON a.site_id = b.site_id\n        JOIN\n    (SELECT\n        site_id, SUM(amount) AS site_amount\n    FROM\n        `data/orders.json`\n    WHERE\n        status <= 0\n    GROUP BY site_id) c ON a.site_id = c.site_id\nGROUP BY a.site_id;\n```\n\n# Python API\n\n```python\nfrom syncanysql import ScriptEngine\n\nwith ScriptEngine() as engine:\n    engine.execute('''\n        INSERT INTO `top_ips` SELECT\n            ip, cnt\n        FROM\n            (SELECT\n                seg0 AS ip, COUNT(*) AS cnt\n            FROM\n                `file:///var/log/nginx/access.log?sep= `\n            GROUP BY seg0) a\n        ORDER BY cnt DESC\n        LIMIT 3;\n    ''')\n    print(engine.pop_memory_datas(\"top_ips\"))\n```\n\n# License\n\nSyncany-SQL uses the MIT license, see LICENSE file for the details.",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Simple and easy-to-use sql execution engine",
    "version": "0.1.19",
    "project_urls": {
        "Homepage": "https://github.com/snower/syncany-sql"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0cf5fb26802eb1a68c8cc97d10658d3efc0954a0929b71f0194d18d36fe98255",
                "md5": "f5ac055c54664e0a8d53044d1adb1d6a",
                "sha256": "2047f9af64a3ae2f3baa7829e4dd938d8a0f016ca20f0a84199ffd19b2a93385"
            },
            "downloads": -1,
            "filename": "syncanysql-0.1.19.tar.gz",
            "has_sig": false,
            "md5_digest": "f5ac055c54664e0a8d53044d1adb1d6a",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": null,
            "size": 58945,
            "upload_time": "2024-03-22T10:48:44",
            "upload_time_iso_8601": "2024-03-22T10:48:44.644664Z",
            "url": "https://files.pythonhosted.org/packages/0c/f5/fb26802eb1a68c8cc97d10658d3efc0954a0929b71f0194d18d36fe98255/syncanysql-0.1.19.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-03-22 10:48:44",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "snower",
    "github_project": "syncany-sql",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "pytz",
            "specs": [
                [
                    ">=",
                    "2018.5"
                ]
            ]
        },
        {
            "name": "tzlocal",
            "specs": [
                [
                    ">=",
                    "1.5.1"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    ">=",
                    "5.1.2"
                ]
            ]
        },
        {
            "name": "pendulum",
            "specs": [
                [
                    ">=",
                    "2.1.2"
                ]
            ]
        },
        {
            "name": "sqlglot",
            "specs": [
                [
                    ">=",
                    "11.5.5"
                ],
                [
                    "<",
                    "12"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    ">=",
                    "2.14.0"
                ]
            ]
        },
        {
            "name": "Pygments",
            "specs": [
                [
                    ">=",
                    "2.14.0"
                ]
            ]
        },
        {
            "name": "prompt-toolkit",
            "specs": [
                [
                    ">=",
                    "3.0.36"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "9.11.1"
                ]
            ]
        },
        {
            "name": "pymongo",
            "specs": [
                [
                    ">=",
                    "3.6.1"
                ]
            ]
        },
        {
            "name": "PyMySQL",
            "specs": [
                [
                    ">=",
                    "0.8.1"
                ]
            ]
        },
        {
            "name": "openpyxl",
            "specs": [
                [
                    ">=",
                    "2.5.0"
                ]
            ]
        },
        {
            "name": "psycopg2-binary",
            "specs": [
                [
                    ">=",
                    "2.8.6"
                ]
            ]
        },
        {
            "name": "elasticsearch",
            "specs": [
                [
                    ">=",
                    "6.3.1"
                ]
            ]
        },
        {
            "name": "influxdb",
            "specs": [
                [
                    ">=",
                    "5.3.1"
                ]
            ]
        },
        {
            "name": "clickhouse_driver",
            "specs": [
                [
                    ">=",
                    "0.1.5"
                ]
            ]
        },
        {
            "name": "redis",
            "specs": [
                [
                    ">=",
                    "3.5.3"
                ]
            ]
        },
        {
            "name": "requests",
            "specs": [
                [
                    ">=",
                    "2.22.0"
                ]
            ]
        },
        {
            "name": "pymssql",
            "specs": [
                [
                    ">=",
                    "2.2.7"
                ]
            ]
        },
        {
            "name": "prql-python",
            "specs": [
                [
                    ">=",
                    "0.11.1"
                ]
            ]
        },
        {
            "name": "coverage",
            "specs": []
        },
        {
            "name": "pytest",
            "specs": []
        },
        {
            "name": "pytest-benchmark",
            "specs": []
        },
        {
            "name": "pytest-cov",
            "specs": []
        },
        {
            "name": "pytest-integration",
            "specs": []
        }
    ],
    "lcname": "syncanysql"
}
        
Elapsed time: 3.43599s