Querying and Managing Streams¶
With BTrDB, you can easily create, delete, and query for streams using simple method calls. Simple examples are included below but please review the API docs for further options.
Create a Stream¶
Creating a stream requires only a UUID, collection, and dictionary for the initial tags.
conn = btrdb.connect()
stream = conn.create(
uuid=uuid.uuid4(),
collection="NORTHWEST/90001",
tags={"name": "L1MAG", "unit": "volts"}
)
Delete a Stream¶
Deleting a stream can be performed by calling the obliterate method on the stream object. If the stream could not be found than an error is raised.
conn = btrdb.connect()
stream = conn.stream_from_uuid("66466a91-dcfe-42ea-9e88-87c51f847944")
stream.obliterate()
Find by UUID¶
To retrieve your stream from the server at a later date, you can easily query
for it by using the UUID it was created with. As a convenience, you can provide
either a UUID object or a string of the UUID value. If a stream matching the
supplied UUID cannot be found then None
will be returned.
conn = btrdb.connect()
stream = conn.stream_from_uuid("71466a91-dcfe-42ea-9e88-87c51f847942")
Finding by collection¶
You can also search for multiple streams by collection using the server object’s
streams_in_collection
method which will return a simple list of
Stream
instances. Aside from the collection name, you can provide more
information such as tags and annotations. Please see the API docs for more
detail.
conn = btrdb.connect()
streams = conn.streams_in_collection("NORTHEAST/NH")
Querying Metadata¶
Finally, you can query for metadata using standard SQL although at the moment, only the streams table is available. SQL queries can be submitted using the query method which accepts both a stmt and params argument. The stmt should contain the SQL you’d like executed with parameter placeholders such as $1 or $2 as shown below.
conn = btrdb.connect()
stmt = "select uuid from streams where name = $1 or name = $2"
params = ["Boston_1", "Boston_2"]
for row in conn.query(stmt, params):
print(row)
The SQL query results are returned as a list of dictionaries where each key matches a column from your SQL projection. You can choose your columns from the schema of the streams table as follows.
Column | Type | Nullable |
---|---|---|
uuid | uuid | not null |
collection | character varying(256) | not null |
name | character varying(256) | not null |
unit | character varying(256) | not null |
ingress | character varying(256) | not null |
property_version | bigint | not null |
annotations | hstore |