From 00d189a99b90253a78e2c0ca942a8d54619fe417 Mon Sep 17 00:00:00 2001 From: Dallin Bentley Date: Tue, 10 Sep 2024 17:09:57 -0600 Subject: [PATCH] docker compose licenses and readme --- .env.example | 5 + .gitignore | 2 + LICENSE | 10 +- README.md | 76 ++++++- assets/image.png | Bin 0 -> 144660 bytes docker-compose.yml | 114 ++++++++++ ee/LICENSE | 37 ++++ {helm_charts => helm_values}/starrocks.yaml | 0 python/populate_warehouse.ipynb | 232 ++++++++++++++++++++ 9 files changed, 471 insertions(+), 5 deletions(-) create mode 100644 .env.example create mode 100644 assets/image.png create mode 100644 docker-compose.yml create mode 100644 ee/LICENSE rename {helm_charts => helm_values}/starrocks.yaml (100%) create mode 100644 python/populate_warehouse.ipynb diff --git a/.env.example b/.env.example new file mode 100644 index 000000000..e9d4eaf9c --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_REGION= +CATALOG_WAREHOUSE=s3://your-warehouse-bucket/ +d \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2faf43d0a..1c7703c74 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,5 @@ override.tf.json # Ignore CLI configuration files .terraformrc terraform.rc + +.env diff --git a/LICENSE b/LICENSE index 480ea6a7f..7e1f824e8 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,10 @@ -MIT License +Copyright (c) 2024 Sprint Labs, Inc. -Copyright (c) 2024 Buster +Portions of this software are licensed as follows: + +- All content that resides under the "ee/" and/or "web/src/ee" directories of this repository, if these directories exist, is licensed under the license defined in "ee/LICENSE". +- All third party components incorporated into the Sprint Labs Software are licensed under the original license provided by the owner of the applicable component. +- Content outside of the above mentioned directories or restrictions above is available under the "MIT Expat" license as defined below. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -18,4 +22,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md index dcf40b23b..9eefed61f 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,74 @@ -# warehouse -This is a warehouse built on Apache Iceberg and Starrocks as a query engine. +![Buster GitHub Banner](/assets/image.png) + +

Buster Warehouse

+

A data warehouse built on Apache Iceberg and Starrocks

+ +
+
+

+ + Sign up + · + + Quickstart + · + + Deployment + +

+
+ +
+ MIT License + Y Combinator W23 +
+
+
+ +## Buster Warehouse Overview + +This project is a data warehouse built on Apache Iceberg and Starrocks. In working with our customers, we found that Snowflake, Bigquery, and other warehouse solutions were prohibitively expensive or slow in them being able to deploy AI-powered analytics at scale. + +Additionaly, we found that having a close integration between the data warehouse and our AI-native BI tool allows for a better and more reliable data experience. + +### Key Features + +- **Built on Starrocks:** We felt that Starrock was the best query engine by default for our use case. The main thing that pushed us towards it was that they perform predicate pushdown on iceberg tables, whereas Clickhouse and DuckDB do not. We were also impressed by the performance, caching system, and flexibility of Starrocks. +- **Built on Apache Iceberg:** Some of the top companies in the world use Apache Iceberg for storing and interacting with their data. We wanted a table format that not only brought tremendous benefits, but one that companies wouldn't outgrow. +- **Bring Your Own Storage:** We felt that customers should own their data and not be locked into a particular storage engine. + +## Quickstart +Have + + +## Roadmap + +Currently, we are in the process of open-sourcing the platform. This includes: + +- Warehouse Product (This Repo) ✅ +- BI platform (https://buster.so) ⏰ + +After that, we will release an official roadmap. + +## How We Plan to Make Money + +Currently, we offer a few commercial products: +- Cloud-Hosted Version + - Cluster + - Serverless +- Managed Self-Hosted Version + +## Support and feedback + +You can contact us through either: + +- [Github Discussions](https://github.com/orgs/buster-so/discussions) +- Email us at founders at buster dot com + +## License + +This repository is MIT licensed, except for the `ee` folders. See [LICENSE](LICENSE) for more details. + +## Shoutouts + +The documentation from the Starrocks, Iceberg, and PyIceberg team has been very helpful in building this project. diff --git a/assets/image.png b/assets/image.png new file mode 100644 index 0000000000000000000000000000000000000000..329e4cee4c8754341afcf1624bbb3c1ff8c3b0dd GIT binary patch literal 144660 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 /opt/starrocks/cn/conf/cn.conf + echo "datacache_enable = true" >> /opt/starrocks/cn/conf/cn.conf + echo "datacache_mem_size = 80%" >> /opt/starrocks/cn/conf/cn.conf + echo "datacache_disk_size = 80%" >> /opt/starrocks/cn/conf/cn.conf + echo "datacache_auto_adjust_enable = true" >> /opt/starrocks/cn/conf/cn.conf + echo "starlet_use_star_cache = true" >> /opt/starrocks/cn/conf/cn.conf + echo "starlet_star_cache_disk_size_percent = 80" >> /opt/starrocks/cn/conf/cn.conf + echo "lake_compaction_stream_buffer_size_bytes = 5000000000" >> /opt/starrocks/cn/conf/cn.conf + sleep 15s + mysql --connect-timeout 2 -h starrocks-fe -P 9030 -u root -e "ALTER SYSTEM ADD BACKEND \"starrocks-cn:9050\";" + /opt/starrocks/cn/bin/start_cn.sh + ports: + - 8040:8040 + hostname: starrocks-cn + container_name: starrocks-cn + user: root + depends_on: + - starrocks-fe + healthcheck: + test: 'mysql -u root -h starrocks-fe -P 9030 -e "SHOW BACKENDS\G" |grep "Alive: true"' + interval: 10s + timeout: 5s + retries: 3 + networks: + iceberg_net: + + postgres: + image: postgres:15 + container_name: postgres + networks: + iceberg_net: + aliases: + - postgres + ports: + - 5432:5432 + environment: + - POSTGRES_USER=postgres + - POSTGRES_PASSWORD=postgres + - POSTGRES_DB=postgres + volumes: + - postgres_data:/var/lib/postgresql/data + healthcheck: + test: ["CMD-SHELL", "pg_isready -U postgres"] + interval: 5s + timeout: 5s + retries: 5 + + rest: + image: tabulario/iceberg-rest:latest + env_file: + - .env + container_name: iceberg-rest + networks: + iceberg_net: + aliases: + - iceberg-rest + ports: + - 8181:8181 + environment: + - AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID} + - AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY} + - AWS_REGION=${AWS_REGION} + - AWS_DEFAULT_REGION=${AWS_REGION} + - CATALOG_WAREHOUSE=${CATALOG_WAREHOUSE} + - CATALOG_IO__IMPL=org.apache.iceberg.aws.s3.S3FileIO + - CATALOG_URI=jdbc:postgresql://postgres:5432/postgres + - CATALOG_JDBC_USER=postgres + - CATALOG_JDBC_PASSWORD=postgres + - CATALOG_JDBC_INITIALIZE=true + depends_on: + postgres: + condition: service_healthy + +networks: + iceberg_net: + +volumes: + postgres_data: diff --git a/ee/LICENSE b/ee/LICENSE new file mode 100644 index 000000000..b7e7acdcc --- /dev/null +++ b/ee/LICENSE @@ -0,0 +1,37 @@ +Buster Enterprise License (the "Enterprise License") +Copyright (c) 2024 Sprint Labs, Inc. dba Buster ('Buster') + +With regard to the Buster Software: +This software and associated documentation files (the "Software") may only be +used in production, if you (and any entity that you represent) have agreed to, +and are in compliance with, the Buster Terms of Service, available +at https://buster.com/terms (the "Enterprise Terms"), or other +agreement governing the use of the Software, as agreed by you and Buster, +and otherwise have a valid Buster Enterprise license. + +Subject to the foregoing sentence, you are free to +modify this Software and publish patches to the Software. You agree that Buster +and/or its licensors (as applicable) retain all right, title and interest in and +to all such modifications and/or patches, and all such modifications and/or +patches may only be used, copied, modified, displayed, distributed, or otherwise +exploited with a valid Buster Enterprise license. + +Notwithstanding the foregoing, you may copy and modify +the Software for development and testing purposes, without requiring a +subscription. You agree that Buster and/or its licensors (as applicable) retain +all right, title and interest in and to all such modifications. You are not +granted any other rights beyond what is expressly stated herein. Subject to the +foregoing, it is forbidden to copy, merge, publish, distribute, sublicense, +and/or sell the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +For all third party components incorporated into the Buster Software, those +components are licensed under the original license provided by the owner of the +applicable component. \ No newline at end of file diff --git a/helm_charts/starrocks.yaml b/helm_values/starrocks.yaml similarity index 100% rename from helm_charts/starrocks.yaml rename to helm_values/starrocks.yaml diff --git a/python/populate_warehouse.ipynb b/python/populate_warehouse.ipynb new file mode 100644 index 000000000..e90131c91 --- /dev/null +++ b/python/populate_warehouse.ipynb @@ -0,0 +1,232 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 162, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "env: PYICEBERG_MAX_WORKERS=300\n" + ] + } + ], + "source": [ + "%env PYICEBERG_MAX_WORKERS=300" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [], + "source": [ + "#!pip install \"pyiceberg[s3fs]\"" + ] + }, + { + "cell_type": "code", + "execution_count": 164, + "metadata": {}, + "outputs": [], + "source": [ + "from pyiceberg.catalog.rest import RestCatalog" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [], + "source": [ + "catalog = RestCatalog(\"public\", ** {\n", + " \"uri\": f\"http://localhost:8181\",\n", + "})" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": {}, + "outputs": [], + "source": [ + "catalog.create_namespace(\"public\")" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [], + "source": [ + "from pyiceberg.schema import Schema\n", + "from pyiceberg.types import (\n", + " NestedField,\n", + " LongType,\n", + " TimestampType,\n", + " DoubleType,\n", + " StringType,\n", + ")\n", + "\n", + "schema = Schema(\n", + " NestedField(field_id=1, name=\"VendorID\", field_type=LongType(), required=False),\n", + " NestedField(field_id=2, name=\"tpep_pickup_datetime\", field_type=TimestampType(), required=False),\n", + " NestedField(field_id=3, name=\"tpep_dropoff_datetime\", field_type=TimestampType(), required=False),\n", + " NestedField(field_id=4, name=\"passenger_count\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=5, name=\"trip_distance\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=6, name=\"RatecodeID\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=7, name=\"store_and_fwd_flag\", field_type=StringType(), required=False),\n", + " NestedField(field_id=8, name=\"PULocationID\", field_type=LongType(), required=False),\n", + " NestedField(field_id=9, name=\"DOLocationID\", field_type=LongType(), required=False),\n", + " NestedField(field_id=10, name=\"payment_type\", field_type=LongType(), required=False),\n", + " NestedField(field_id=11, name=\"fare_amount\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=12, name=\"extra\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=13, name=\"mta_tax\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=14, name=\"tip_amount\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=15, name=\"tolls_amount\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=16, name=\"improvement_surcharge\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=17, name=\"total_amount\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=18, name=\"congestion_surcharge\", field_type=DoubleType(), required=False),\n", + " NestedField(field_id=19, name=\"airport_fee\", field_type=DoubleType(), required=False),\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 168, + "metadata": {}, + "outputs": [], + "source": [ + "from pyiceberg.partitioning import PartitionSpec, PartitionField\n", + "from pyiceberg.transforms import DayTransform, MonthTransform, YearTransform, BucketTransform\n", + "\n", + "partition_spec = PartitionSpec(\n", + " PartitionField(source_id=2, field_id=1001, transform=MonthTransform(), name=\"tpep_pickup_datetime_month\"),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 169, + "metadata": {}, + "outputs": [], + "source": [ + "from pyiceberg.table.sorting import SortOrder, SortField\n", + "from pyiceberg.transforms import IdentityTransform\n", + "\n", + "sort_order = SortOrder(\n", + " SortField(source_id=4, transform=IdentityTransform())\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 170, + "metadata": {}, + "outputs": [], + "source": [ + "table = catalog.create_table(\n", + " identifier=\"public.nyc_taxi\",\n", + " schema=schema,\n", + " partition_spec=partition_spec,\n", + " sort_order=sort_order,\n", + " properties={\n", + " \"write.format.default\": \"parquet\",\n", + " \"write.parquet.compression-codec\": \"zstd\",\n", + " \"write.target-file-size-bytes\": \"536870912\",\n", + " \"s3.connect-timeout\": \"10000\"\n", + " }\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 171, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Appending files: 100%|██████████| 26/26 [10:19<00:00, 23.83s/it, Appended yellow_tripdata_2021-09.parquet]\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Total rows in the table: 73531304\n" + ] + } + ], + "source": [ + "import os\n", + "import requests\n", + "import io\n", + "import pyarrow.parquet as pq\n", + "from tqdm import tqdm\n", + "\n", + "# GitHub repository information\n", + "repo_owner = \"buster-so\"\n", + "repo_name = \"sample-data\"\n", + "folder_path = \"nyc_taxi\"\n", + "\n", + "# GitHub API endpoint to get repository contents\n", + "api_url = f\"https://api.github.com/repos/{repo_owner}/{repo_name}/contents/{folder_path}\"\n", + "\n", + "# Fetch the list of files in the repository\n", + "response = requests.get(api_url)\n", + "if response.status_code != 200:\n", + " raise Exception(f\"Failed to fetch repository contents: {response.status_code}\")\n", + "\n", + "files = [item for item in response.json() if item['name'].endswith('.parquet')]\n", + "\n", + "# Create a progress bar\n", + "with tqdm(total=len(files), desc=\"Appending files\") as pbar:\n", + " for file in files:\n", + " # Download the file content\n", + " file_url = file['download_url']\n", + " file_response = requests.get(file_url)\n", + " if file_response.status_code != 200:\n", + " print(f\"Failed to download {file['name']}: {file_response.status_code}\")\n", + " continue\n", + " \n", + " # Read the Parquet file from the response content\n", + " file_content = io.BytesIO(file_response.content)\n", + " df = pq.read_table(file_content)\n", + " \n", + " # Append to the Iceberg table\n", + " table.append(df)\n", + " \n", + " pbar.update(1)\n", + " pbar.set_postfix_str(f\"Appended {file['name']}\")\n", + "\n", + "# Print the total number of rows in the table after appending all files\n", + "print(f\"Total rows in the table: {len(table.scan().to_arrow())}\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}