The HDF5 Packet Table API is designed to allow records to be appended to and read from a table. Packet Table datasets are chunked, allowing them to grow as needed.
The Packet Table API, with the H5PT prefix, is not to be confused with the H5TB Table API (H5TB prefix). The H5TB APIs are stateless (H5TB Tables do not need to be opened or closed) but H5PT Packet Tables require less performance overhead. Also, H5TB Tables support insertions and deletions, while H5PT Packet Tables support only append operations. H5TB functions should not be called on tables created with the H5PT API, or vice versa.
Packet Tables are datasets in an HDF5 file, so while their contents
should not be changed outside of the H5PT API calls, the datatypes
of Packet Tables can be queried using 
H5Dget_type.
Packet Tables can also be given attributes using the normal HDF5 APIs.
The following functions are part of the HDF5 Packet Table API.
Programming Hint:
    The following line includes the HDF5 Packet Table package, H5PT, 
    in C applications:
            
        #include "hdf5_hl.h"
    
Without this include, an application will not have access to 
    these functions.
The C Interfaces:
| Creation and Opening Storage Table Index | Retrieval Query Memory Management | 
* Deprecated
hid_t H5PTcreate(hid_t  loc_id, 
      const char * ptable_name, hid_t dtype_id, 
      hsize_t chunk_size, hid_t plist_id)H5PTcreate creates and opens a packet table named 
  ptable_name attached to the object specified by the 
  identifier loc_id. The created packet table should be 
  closed with H5PTclose, eventually. The datatype, 
  dtype_id, may specify any datatype, including 
  variable-length data. If dtype_id specifies a 
  compound datatype, one or more fields in that compound type may be 
  variable-length.hid_t loc_id const char * ptable_name hid_t dtype_id hsize_t chunk_size hid_t plist_id H5I_INVALID_HID on error.| Release | Change | 
| 1.10.0 and 1.8.17 | Function introduced. | 
hid_t H5PTcreate_fl(hid_t loc_id,
    const char * dset_name, hid_t dtype_id, 
    hsize_t chunk_size, int compression)H5PTcreate_fl  creates and opens a 
    packet table named dset_name attached to
    the object specified by the identifier loc_id.
    It should be closed with H5PTclose.
    
    The datatype, dtype_id, may specify 
    any datatype, including variable-length data.
    If dtype_id specifies a compound datatype, 
    one or more fields in that compound type may be variable-length.
    
    Please note that H5PTcreate_fl has been deprecated.
    H5PTcreate should be used instead.
    
hid_t loc_id const char * dset_name hid_t dtype_id hsize_t chunk_size int compression 0 through 9.
            Level 0 is faster but offers the least compression;
            level 9 is slower but offers maximum compression.
            A setting of -1 indicates that no compression
            is desired.hid_t H5PTopen(hid_t loc_id, 
    const char *dset_name)H5PTopen  opens an existing packet table in the file
      or group specified by loc_id.  dset_name is the name
      of the packet table and is used to identify it in the file.  This function is
      used to open both fixed-length packet tables and variable-length packet tables.
      The packet table should later be closed with H5PTclose.  hid_t loc_id const char * dset_name herr_t H5PTclose(hid_t  table_id)
  H5PTclose ends access to a packet table specified by
      table_id.   hid_t table_id herr_t       H5PTappend(hid_t  table_id, 
    size_t   nrecords,    const void *data)H5PTappend writes nrecords packets to the end
      of a packet table specified by table_id.  data
      is a buffer containing the data to be written.  For a packet table
      holding fixed-length packets, this data should be in the packet table's
      datatype.  For a variable-length packet table, the data should be in the
      form of hvl_t structs.  hid_t table_id size_t nrecords const void * data herr_t H5PTcreate_index(hid_t table_id)
  get_next can iterate through the packets in
      order.  H5PTcreate_index initializes a packet
      table's index, and should be called before using
      get_next.
      The index must be initialized every time a packet table is created
      or opened; this information is lost when the packet table is closed. hid_t table_id herr_t H5PTset_index(hid_t table_id, 
    hsize_t pt_index)get_next can iterate through the packets in
      order.  H5PTset_index sets this index to point
      to a user-specified packet (the packets are zero-indexed). hid_t table_id hsize_t index herr_t H5PTread_packets(hid_t table_id, 
    hsize_t start, size_t nrecords, 
    void* data)H5PTread_packets reads nrecords packets starting
      at packet number start from a packet table specified by
      table_id.  data is a buffer into which the
      data should be read.hvl_t structs, each
      containing the length of the data and a pointer to it in memory.
      The memory used by this data must be freed using 
      H5PTfree_vlen_buff. 
  hid_t table_id hsize_t start size_t nrecords void * data herr_t H5PTget_next(hid_t  table_id, 
    size_t nrecords, void *data)H5PTread_packets reads nrecords packets
      starting with the "current index" from a packet table 
      specified by table_id.  The packet table's index
      is set and reset with H5PTset_index and
      H5PTcreate_index.
      data is a buffer into which the data should 
      be read.
      
      For a packet table holding variable-length records, the data returned
      in the buffer will be in form of a hvl_t struct
      containing the length of the data and a pointer to it in memory.
      The memory used by this data must be freed using 
      H5PTfree_vlen_buff. 
  
hid_t table_id size_t nrecords void * data hid_t H5PTget_dataset(hid_t table_id)
  H5PTget_dataset returns the identifier of the 
  dataset storing the packet table table_id. This dataset 
  identifier will be closed by H5PTclose.
  hid_t table_id H5I_INVALID_HID 
  on error.| Release | Change | 
| 1.10.0 and 1.8.17 | Function introduced. | 
hid_t H5PTget_type(hid_t table_id)
  H5PTget_type returns the identifier of the 
  datatype used by the packet table table_id. This datatype 
  identifier will be closed by H5PTclose.
  hid_t table_id H5I_INVALID_HID 
  on error.| Release | Change | 
| 1.10.0 and 1.8.17 | Function introduced. | 
herr_t H5PTget_num_packets(hid_t  
  table_id, hsize_t * nrecords)H5PTget_num_packets returns by reference the
      number of packets in a packet table specified by
      table_id.  hid_t table_id hsize_t nrecords herr_t H5PTis_valid(hid_t  table_id)
  H5PTis_valid returns a non-negative value if
      table_id corresponds to an open packet table,
      and returns a negative value otherwise.  hid_t table_id table_id is a valid packet table, otherwise returns a negative value.herr_t H5PTis_varlen(hid_t table_id)
  H5PTis_varlen returns 1 (TRUE) if table_id
      is a packet table containing variable-length records.  It returns
      0 (FALSE) if table_id is a packet table containing
      fixed-length records.  If table_id is not a packet table,
      a negative value is returned.  hid_t table_id | Release | Change | 
| 1.10.0 and 1.8.17 | Function re-introduced. Function had been removed in 1.8.3. | 
herr_t H5PTfree_vlen_buff(hid_t  table_id,
      hsize_t bufflen,    void * buff)H5PTfree_vlen_buff
      frees this memory, and should be called whenever packets are read
      from a variable-length packet table.  hid_t table_id hsize_t bufflen buff. void * buff | Release | Change | 
| 1.10.0 and 1.8.17 | Function re-introduced. Function had been removed in 1.8.3. | 
| The HDF Group Help Desk:   Describes HDF5 Release 1.8.20, November 2017. | Copyright by
          The HDF Group and the Board of Trustees of the University of Illinois |