You can write metadata to an array as follows.
// Create TileDB contexttiledb_ctx_t* ctx;tiledb_ctx_alloc(NULL, &ctx);​// Open array for writingtiledb_array_t* array;tiledb_array_alloc(ctx, array_name, &array);tiledb_array_open(ctx, array, TILEDB_WRITE);​// Write some metadataint v = 100;tiledb_array_put_metadata(ctx, array, "aaa", TILEDB_INT32, 1, &v);float f[] = {1.1f, 1.2f};tiledb_array_put_metadata(ctx, array, "bb", TILEDB_FLOAT32, 2, f);​// Close array - Important so that the metadata get flushedtiledb_array_close(ctx, array);​// Clean uptiledb_array_free(&array);tiledb_ctx_free(&ctx);
// Create TileDB contextContext ctx;​// Open array for writingArray array(ctx, array_name, TILEDB_WRITE);​// Write some metadataint v = 100;array.put_metadata("aaa", TILEDB_INT32, 1, &v);float f[] = {1.1f, 1.2f};array.put_metadata("bb", TILEDB_FLOAT32, 2, f);​// Close array - Important so that the metadata get flushedarray.close();
# the array must be opened in write modewith tiledb.Array(array_name, "w") as A:A.meta["aaa"] = 1.1A.meta["bbb"] = 2A.meta["ccc"] = "hello!"# multiple values of the same type# may be written as a tuple:A.meta["tuple_int"] = (1,2,3,4)# or list:A.meta["list_float"] = (1.0,2.1,3.2,4.3)
# 'array' can be a URI, or an array opened for writingtiledb_put_metadata(array, "aaa", 100L)tiledb_put_metadata(array, "bb", c(1.1, 2.2))
// Create TileDB contextContext ctx = new Context();​// Open array for writingArray array = new Array(ctx, "<array-uri>", TILEDB_WRITE);​// Write some metadataint v = 100;array.putMetadata("aaa", new int[]{v});float f[] = {1.1f, 1.2f};array.putMetadata("bb", new NativeArray(ctx, f, TILEDB_FLOAT32));​// Close array - Important so that the metadata get flushedarray.close();
// Create TileDB contextctx, _ := tiledb.NewContext(nil)​// Open array for writingarray, _ := tiledb.NewArray(ctx, array_name)array.Open(tiledb.TILEDB_WRITE)​// Write some metadataerr = array.PutMetadata("aaa", int32(100))err = array.PutMetadata("bb", []float32{1.1, 1.2})​// Close array - Important so that the metadata get flushedarray.Close()​// Clean uparray.Free()ctx.Free()
You can read array metadata as follows.
// Create TileDB contexttiledb_ctx_t* ctx;tiledb_ctx_alloc(NULL, &ctx);​// Open array for readingtiledb_array_t* array;tiledb_array_alloc(ctx, array_name, &array);tiledb_array_open(ctx, array, TILEDB_READ);​// Read with keytiledb_datatype_t v_type;uint32_t v_num;const void* v;tiledb_array_get_metadata(ctx, array, "aaa", &v_type, &v_num, &v);​// Close arraytiledb_array_close(ctx, array);tiledb_array_free(&array);tiledb_ctx_free(&ctx);
// Create TileDB contextContext ctx;​// Open array for readingArray array(ctx, array_name, TILEDB_READ);​// Read with keytiledb_datatype_t v_type;uint32_t v_num;const void* v;array.get_metadata("aaa", &v_type, &v_num, &v);​// Close arrayarray.close();
# Open array for readingwith tiledb.Array(array_name) as A:# Read "aaa" keyaaa = A.meta["aaa"]# print all keys:print(A.meta.keys())# Read the "tuple_int" keyprint(A.meta["tuple_int"]) # -> (1, 2, 3, 4)# Read the "list_float" keyprint(A.meta["list_float"]) # -> (1.0, 2.1, 3.2, 4.3)
​
# 'array' can be a URI, or an array opened for readingtiledb_get_metadata(array, "aaa")
// Create TileDB contextContext ctx = new Context();​// Open array for readingArray array = new Array(ctx, "<array-uri>", TILEDB_READ);​// Read with keyDatatype vType;int vNum;array.getMetadata("aaa");​// Close arrayarray.close();
// Create TileDB contextctx, _ := tiledb.NewContext(nil)​// Open array for readingarray, _ := tiledb.NewArray(ctx, array_name)array.Open(tiledb.TILEDB_READ)​// Read with keyvar dataType tiledb.Datatypevar valueNum uint32var value interface{}dataType, valueNum, value, _ = array.GetMetadata("aaa")​// Close arrayarray.Close()array.Free()ctx.Free()
You can also enumerate all read array metadata as follows.
// Create TileDB contexttiledb_ctx_t* ctx;tiledb_ctx_alloc(NULL, &ctx);​// Open array for readingtiledb_array_t* array;tiledb_array_alloc(ctx, array_name, &array);tiledb_array_open(ctx, array, TILEDB_READ);​// Enumerate all metadata itemstiledb_datatype_t v_type;uint32_t v_num;const void* v;uint64_t num = 0;const char* key;uint32_t key_len;tiledb_array_get_metadata_num(ctx, array, &num);for (uint64_t i = 0; i < num; ++i) {tiledb_array_get_metadata_from_index(ctx, array, i, &key, &key_len, &v_type, &v_num, &v);// ... do something with the retrieved key-value pair}​// Close arraytiledb_array_close(ctx, array);tiledb_array_free(&array);tiledb_ctx_free(&ctx);
// Create TileDB contextContext ctx;​// Open array for readingArray array(ctx, array_name, TILEDB_READ);​// Enumerate all metadata itemstiledb_datatype_t v_type;uint32_t v_num;const void* v;std::string key;uint64_t num = array.metadata_num();for (uint64_t i = 0; i < num; ++i) {array.get_metadata_from_index(i, &key, &v_type, &v_num, &v);// ... do something with the retrieved key-value pair}​// Close arrayarray.close();
# Open the array for readingwith tiledb.Array(array_name) as A:# print the keysprint(A.meta.keys())# iterate over all key-value pairs:for (key,value) in A.meta.items():print(f"found '{key}':'{value}'")
# 'array' can be a URI, or an array opened for readingmd <- tiledb_get_all_metadata(array)​# prints all keys and (formatted) valuesprint(md)
// Create TileDB contextContext ctx = new Context();​// Open array for readingArray array = new Array(ctx, "<array-uri>", TILEDB_READ);​// Enumerate all metadata itemsDatatype v_type;int v_num;int num = array.getMetadataNum().intValue();for (int i = 0; i < num; ++i) {array.getMetadataFromIndex(i);// ... do something with the retrieved key-value pair}​// Close arrayarray.close();
// Create TileDB contextctx, _ := tiledb.NewContext(nil)​// Open array for readingarray, _ := tiledb.NewArray(ctx, array_name)array.Open(tiledb.TILEDB_READ)​// type ArrayMetadata struct {// Key string// KeyLen uint32// Datatype Datatype// ValueNum uint// Value interface{}// }​// Enumerate all metadata itemsnum, _ := array.GetMetadataNum()var i uint64for i = 0; i < num; i++ {var arrayMetadata ArrayMetadataarrayMetadata, _ := array.GetMetadataFromIndex(i)// ... do something with the retrieved ArrayMetadata}​// Close arrayarray.Close()array.Free()ctx.Free()
You can delete array metadata as follows. The array must be opened in write mode to delete metadata.
// Create TileDB contexttiledb_ctx_t* ctx;tiledb_ctx_alloc(NULL, &ctx);​// Open array for writingtiledb_array_t* array;tiledb_array_alloc(ctx, array_name, &array);tiledb_array_open(ctx, array, TILEDB_WRITE);​// Delete metadatatiledb_array_delete_metadata(ctx, array, "bb");​// Close array - Important so that the deleted metadata get flushedtiledb_array_close(ctx, array);​// Clean uptiledb_array_free(&array);tiledb_ctx_free(&ctx);
// Open array in write modeContext ctx;Array array(ctx, "my_array", TILEDB_WRITE);​// Delete metadataarray.delete_metadata("bb");​// Close array - Important so that the deleted metadata get flushedarray.close()
with tiledb.Array(array_name) as A:del A.meta["bb"]
# 'array' can be a URI, or an array opened for writingtiledb_delete_metadata(array, "aaa")
// Create TileDB contextContext ctx = new Context();Array array = new Array(ctx, "<array-uri>", TILEDB_READ);​// Delete metadataarray.deleteMetadata("bb");​// Close arrayarray.close();
// Create TileDB contextctx, _ := tiledb.NewContext(nil)​// Open array for writingarray, _ := tiledb.NewArray(ctx, array_name)array.Open(tiledb.TILEDB_WRITE)​// Delete metadataarray.DeleteMetadata("bb")​// Close array - Important so that the deleted metadata get flushedarray.Close()​// Clean uparray.Free()ctx.Free()