For reference, here is example code accessing a bucket in us-west-1
:
#include <tiledb/tiledb>
#include <iostream>
using namespace tiledb;
// dimension type
using DIM_T = uint64_t;
int main(int argc, char** argv) {
if (std::getenv("AWS_ACCESS_KEY_ID") == nullptr || std::getenv("AWS_SECRET_ACCESS_KEY") == nullptr) {
std::cout << "missing AWS_* access environment variables!" << std::endl;
exit(1);
}
tiledb::Config cfg;
cfg["vfs.s3.aws_access_key_id"] = std::string(std::getenv("AWS_ACCESS_KEY_ID"));
cfg["vfs.s3.aws_secret_access_key"] = std::string(std::getenv("AWS_SECRET_ACCESS_KEY"));
cfg["vfs.s3.region"] = "us-west-1";
tiledb::Context ctx(cfg);
// replace with URI of bucket you have access to using credentials above
std::string uri("s3://bucket-us-west-1/test-array-4x4");
auto array = tiledb::Array(ctx, uri, TILEDB_READ);
auto schema = array.schema();
auto domain = schema.domain();
std::cout << "ndim: " << domain.ndim() << std::endl;
std::vector<double> data(16);
Query query(ctx, array, TILEDB_READ);
query.set_layout(TILEDB_ROW_MAJOR)
.set_buffer("", data);
std::vector<DIM_T> subarray({0,3,0,3});
query.set_subarray(subarray);
query.submit();
if (query.query_status() != Query::Status::COMPLETE) {
std::cout << "query returned but not 'complete'" << std::endl;
exit(1);
}
std::cout << "data[0,0]: " << data[0] << " data[3,3]: " << data[15] << std::endl;
}