base on Postgres-native columnar storage extension [![Hydra - the open source data warehouse](https://raw.githubusercontent.com/hydradatabase/hydra/main/.images/header.png)](https://hydra.so) # 🐘🤘 Hydra Columnar Hydra Colummnar is open source, column-oriented Postgres. ## � Run locally The [Docker image](https://github.com/hydradatabase/hydra/pkgs/container/hydra) is a drop-in replacement for [postgres Docker image](https://hub.docker.com/_/postgres). You can try out Hydra locally using [docker-compose](https://docs.docker.com/compose/). ```bash git clone https://github.com/hydradatabase/columnar && cd columnar cp .env.example .env docker compose up psql postgres://postgres:hydra@127.0.0.1:5432 ``` ## �💪 Benchmarks Benchmarks were run on a c6a.4xlarge (16 vCPU, 32 GB RAM) with 500 GB of GP2 storage. Results in seconds, smaller is better. ![Hydra - the open source data warehouse](https://raw.githubusercontent.com/hydradatabase/hydra/main/.images/ReadmeBenchmarks.png) [Review Clickbench](https://tinyurl.com/clickbench) for comprehensive results and the list of 42 queries tested. This benchmark represents typical workload in the following areas: clickstream and traffic analysis, web analytics, machine-generated data, structured logs, and events data. ![Hydra - the open source data warehouse](https://raw.githubusercontent.com/hydradatabase/columnar/main/.images/FasterthanPG.png) For our continuous benchmark results, see [BENCHMARKS](https://github.com/hydradatabase/hydra/blob/main/BENCHMARKS.md). ## 🙋 FAQs View complete answers in [our documentation](https://columnar.docs.hydra.so/concepts/faqs). ### Q: Why is Hydra so fast? A: Columnar storage, query parallelization, vectorized execution, column-level caching, and tuning Postgres. ### Q: How do I start using the columnar format on Postgres? A: Data is loaded into columnar format by default. Use Postgres normally. ### Q: What operations is Hydra meant for? Provide examples. A: Aggregates (COUNT, SUM, AVG), WHERE clauses, bulk INSERTS, UPDATE, DELETE… ### Q: What is columnar not meant for? A: Frequent large updates, small transactions… ### Q: What Postgres features are unsupported on columnar? * Logical replication. * Columnar tables don’t typically use indexes, only supporting btree and hash indexes, and their associated constraints. ### Q: Is Hydra a fork? A: Hydra is a Postgres extension, not a fork. Hydra makes use of `tableam` (table access method API), which was added in Postgres 12 released in 2019. ## 🤝 Community and Status - [x] Alpha: Limited to select design partners - [x] Public Alpha: available for use, but with noted frictions - [x] Hydra 1.0 beta: Stable for non-enterprise use cases - [x] Hydra 1.0 Release: Generally Available (GA) and ready for production use ## :technologist: Developer resources - [CHANGELOG](https://github.com/hydradatabase/columnar/blob/main/CHANGELOG.md) for details of recent changes - [GitHub Issues](https://github.com/hydradatabase/columnar/issues) for bugs and missing features - [Docs](https://columnar.docs.hydra.so/) for Hydra features and warehouse ops ## 📝 License Hydra is only possible by building on the shoulders of giants. The code in this repo is licensed under: - [AGPL 3.0](https://github.com/hydradatabase/hydra/tree/main/columnar/LICENSE) for [Hydra Columnar](https://github.com/hydradatabase/hydra/tree/main/columnar) - All other code is [Apache 2.0](https://github.com/hydradatabase/hydra/blob/main/LICENSE) The docker image is built on the [Postgres docker image](https://hub.docker.com/_/postgres/), which contains a large number of open source projects, including: - Postgres - [the Postgres license](https://www.postgresql.org/about/licence/) - Debian or Alpine Linux image, depending on the image used - Hydra includes the following additional software in the image: - multicorn - BSD license - mysql_fdw - MIT-style license - parquet_s3_fdw - MIT-style license - pgsql-http - MIT license As for any pre-built image usage, it is the image user's responsibility to ensure that any use of this image complies with any relevant licenses for all software contained within. ", Assign "at most 3 tags" to the expected json: {"id":"2144","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"