Object Metadata Querying
Tigris indexes the Last-Modified
field for every object stored in a bucket.
This can be used to query objects based on their Last-Modified
index and
in-memory filters using a SQL-like syntax through the X-Tigris-Query
header
when using the
ListObjectsV2 API.
The X-Tigris-Query
field query can be thought of as the WHERE
clause in a
SQL query. For instance, to find all objects with a Content-Type
of
text/javascript
, set the header as follows:
X-Tigris-Query
:WHERE `Last-Modified` > "2023-01-15T08:30:00Z" AND `Content-Type` = "text/javascript"
Queryable Fields
Tigris supports querying against the following fields:
`Last-Modified`
: The date and time the object was last modified in RFC3339 format. This field is indexed and can be used for efficient queries.`Content-Type`
: The content type assigned during upload. This field can be used as an in-memory filter when combined withLast-Modified
.`Content-Length`
: The size of the object. This field can be used as an in-memory filter when combined withLast-Modified
.`key`
: The key of the object. This field can be used as an in-memory filter when combined withLast-Modified
.`Event-Type`
: The type of the event, this is only supported in Object Notifications.
Query Requirements
Important: Since only Last-Modified
is indexed, your query must include a
condition on Last-Modified
to enable efficient filtering. Other fields like
Content-Type
and Content-Length
can be used as additional in-memory filters.
SQL Operations
Query supports following comparison operators:
=
: Equal!=
: Not Equal>
and<
: Greater than and less than>=
and<=
: Greater than or equal and less than or equalAND
: Combine multiple conditions in a query.
In Memory Operations
Tigris supports IN
, NOT IN
, and REGEXP
operators for filtering results.
Since these operations are performed in memory, they must be combined with a
Last-Modified
condition. For example:
WHERE `Last-Modified` > "2022-06-10T14:20:00Z" AND `Content-Type` = "text/plain" AND key REGEXP ".*\.txt$"
WHERE `Last-Modified` > "2023-03-22T09:45:00Z" AND `Content-Length` > 1024 AND `Content-Type` IN ("text/javascript", "text/css")
.WHERE `Last-Modified` > "2021-11-05T16:15:00Z" AND `Content-Length` != 65536 AND `Content-Type` NOT IN ("text/plain", "text/html")
.
Order By
You can sort the list using ORDER BY
. For example, to retrieve all items
smaller than 64KB
ordered by Content-Type
:
WHERE `Last-Modified` > "2023-08-14T11:30:00Z" AND `Content-Length` < 65536 ORDER BY `Content-Type`
Example Queries
Example queries that can be performed:
WHERE `Content-Type` = "text/plain" ORDER BY `Last-Modified`
WHERE `Last-Modified` > "2023-05-18T13:20:00Z" AND `Content-Type` >= "text/c" AND `Content-Type` < "text/j"
WHERE `Last-Modified` > "2021-09-27T10:15:00Z" AND `Content-Length` > 0 ORDER BY `Last-Modified` ASC
WHERE `Content-Length` != 65536 AND `Content-Type` = "text/plain" ORDER BY `Last-Modified`
Next Steps
- Check out the Example Usage for more details on how to use them in your application.