Query Layer for Google Cloud Bigtable
Project description
BigtableQL
BigtableQL provides a SQL Query Layer for Google Cloud Bigtable.
Use Cases
Cloud Bigtable is Google's fully managed NoSQL Big Data database service. Each table contains rows and columns. Each row/column intersection can contain multiple cells. Each cell contains a unique timestamped version of the data for that row and column. Thus Bigtable is often used to store time series data.
BigtableQL provides a SQL query layer to run aggregation query on Bigtable.
Quick Start
pip install bigtableql
Using the weather balloon example data shown in Single-timestamp unserialized schema design
Row key pressure temperature humidity altitude
us-west2#3698#2021-03-05-1200 94558 9.6 61 612
us-west2#3698#2021-03-05-1201 94122 9.7 62 611
us-west2#3698#2021-03-05-1202 95992 9.5 58 602
us-west2#3698#2021-03-05-1203 96025 9.5 66 598
us-west2#3698#2021-03-05-1204 96021 9.6 63 624
After initialize the client
from bigtableql.client import Client
# config follows offical python bigtable client
client = Client(config)
client.register_table(
"weather_balloons",
instance_id="INSTANCE_ID",
column_families={
"measurements": {
"only_read_latest": True,
"columns": {
"pressure": int,
"temperature": str,
"humidity": int,
"altitude": int
}
}
}
)
we are able to calculate average pressure of the period by
client.query("measurements", """
SELECT avg(pressure) FROM weather_balloons
WHERE
"_row_key" BETWEEN 'us-west2#3698#2021-03-05-1200' AND 'us-west2#3698#2021-03-05-1204'
""")
Or with row key decomposition
client.register_table(
xxx,
row_key_identifiers=["location", "balloon_id", "event_minute"],
row_key_separator="#"
)
client.query("measurements", """
SELECT balloon_id, avg(pressure) FROM weather_balloons
WHERE
location = 'us-west2'
AND balloon_id IN ('3698', '3700')
AND event_minute BETWEEN '2021-03-05-1200' AND '2021-03-05-1204'
GROUP BY 1
""")
The output of query
is list of pyarrow.RecordBatch. It can be easily convert to python dictionary (to_pydict
) and pandas dataframe (to_pandas
).
Group by Time
Each cell in Bigtable have a timestamp. SELECT "_timestamp"
will return a float number, represent seconds since Unix epoch. Following is an example to select 5 minutes interval
SELECT to_timestamp_seconds(cast(floor("_timestamp" / 600) * 600 as bigint)) as interval
Alternative
However, as of 2022-01, it
- only supports "us-central1" and "europe-west1" region
- only supports query with "rowkey"
- by default can run up to 4 concurrent queries against Bigtable external data source
Roadmap
SQL
- ✅ Insert Into
- ✅ Select *
- ✅ Select column(s)
- ✅ Filter (WHERE): "=", "IN", "BETWEEN", ">", ">=", "<", "<="
- ✅ GROUP BY
- ✅ ORDER BY
- ✅ HAVING
- ✅ LIMIT
- ✅ Aggregate (e.g. avg, sum, count)
- ✅ AND
- ✅ Alias
- ✅ Cast
- ✅ Common Math Functions
- Common Date/Time Functions
- OR ???
- Join ???
General
- ✅ Partition Pruning
- ✅ Projection pushdown
- ✅ Predicate push down (Value range)
- Limit Pushdown ???
Limitation
- for row key encoding, only string is supported
- for single/composite row key, identifiers supports "=" and "IN". Additionally, last identifier also supports "BETWEEN".
- for qualifiers, only string and integer (64bit BigEndian encoding) value are supported
- subqueries and common table expressions are not supported
Technical Details
BigtableQL depends on
- sqloxide and sqlparser-rs: SQL parser
- python-bigtable: offical python bigtable client
- datafusion-python: in memory query engine
- pyarrow: in memory columnar store / dataframe
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file BigtableQL-0.1.9.tar.gz
.
File metadata
- Download URL: BigtableQL-0.1.9.tar.gz
- Upload date:
- Size: 11.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.8.12 Linux/5.11.0-1028-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c585f7561590cfe7374c39f5bcefe9f0f28c431be7c86ce17d32b3aa01430afd |
|
MD5 | 5b814f7490e335d9ee47427b845443c9 |
|
BLAKE2b-256 | b49b8fcf6541b411c9cbe9f84c0ac3c91fe8de95efa8a945bb952886d4bcc420 |
File details
Details for the file BigtableQL-0.1.9-py3-none-any.whl
.
File metadata
- Download URL: BigtableQL-0.1.9-py3-none-any.whl
- Upload date:
- Size: 13.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.1.13 CPython/3.8.12 Linux/5.11.0-1028-azure
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e958d4aae79e5e18d49ffce134de48b771be38511f7f3d2fe9c67d732a568c38 |
|
MD5 | 97f6a9d4165ef9c1fc35a873507e3b49 |
|
BLAKE2b-256 | 25c2563a2fa33dc194adc58bdb25072e13d2ea67acefd992501606d7a9af4651 |