Class Fragmenter_Namespace::InsertOrderFragmenter¶
-
class
InsertOrderFragmenter: public Fragmenter_Namespace::AbstractFragmenter¶ The InsertOrderFragmenter is a child class of AbstractFragmenter, and fragments data in insert order. Likely the default fragmenter.
Subclassed by Fragmenter_Namespace::SortedOrderFragmenter
Public Functions
-
InsertOrderFragmenter(const std::vector<int> chunkKeyPrefix, std::vector<Chunk_NS::Chunk> &chunkVec, Data_Namespace::DataMgr *dataMgr, Catalog_Namespace::Catalog *catalog, const int physicalTableId, const int shard, const size_t maxFragmentRows = DEFAULT_FRAGMENT_ROWS, const size_t maxChunkSize = DEFAULT_MAX_CHUNK_SIZE, const size_t pageSize = DEFAULT_PAGE_SIZE, const size_t maxRows = DEFAULT_MAX_ROWS, const Data_Namespace::MemoryLevel defaultInsertLevel = Data_Namespace::DISK_LEVEL, const bool uses_foreign_storage = false)¶
-
~InsertOrderFragmenter()¶
-
size_t
getNumFragments()¶ returns the number of fragments in a table
-
TableInfo
getFragmentsForQuery()¶ returns (inside QueryInfo) object all ids and row sizes of fragments
-
void
insertData(InsertData &insert_data_struct)¶ appends data onto the most recently occuring fragment, creating a new one if necessary
-
void
insertChunks(const InsertChunks &insert_chunk)¶ Insert chunks into minimal number of fragments.
- Parameters
insert_chunk: - the chunks to insert
-
void
insertDataNoCheckpoint(InsertData &insert_data_struct)¶ Given data wrapped in an InsertData struct, inserts it into the correct partitions No locks and checkpoints taken needs to be managed externally.
-
void
insertChunksNoCheckpoint(const InsertChunks &insert_chunk)¶ Insert chunks into minimal number of fragments; no locks or checkpoints taken.
- Parameters
chunk: - the chunks to insert
-
void
dropFragmentsToSize(const size_t maxRows)¶ Will truncate table to less than maxRows by dropping fragments.
Updates the metadata for a column chunk.
- Parameters
cd: - ColumnDescriptor for the columnfragment_id: - Fragment id of the chunk within the columnmetadata: - shared_ptr of the metadata to update column chunk with
-
void
updateChunkStats(const ColumnDescriptor *cd, std::unordered_map<int, ChunkStats> &stats_map, std::optional<Data_Namespace::MemoryLevel> memory_level)¶ Update chunk stats.
-
FragmentInfo *
getFragmentInfo(const int fragment_id) const¶ Retrieve the fragment info object for an individual fragment for editing.
-
int
getFragmenterId()¶ get fragmenter’s id
-
std::vector<int>
getChunkKeyPrefix() const¶
-
std::string
getFragmenterType()¶ get fragmenter’s type (as string
-
size_t
getNumRows()¶
-
void
setNumRows(const size_t numTuples)¶
-
std::optional<ChunkUpdateStats>
updateColumn(const Catalog_Namespace::Catalog *catalog, const TableDescriptor *td, const ColumnDescriptor *cd, const int fragment_id, const std::vector<uint64_t> &frag_offsets, const std::vector<ScalarTargetValue> &rhs_values, const SQLTypeInfo &rhs_type, const Data_Namespace::MemoryLevel memory_level, UpdelRoll &updel_roll)¶
-
void
updateColumns(const Catalog_Namespace::Catalog *catalog, const TableDescriptor *td, const int fragmentId, const std::vector<TargetMetaInfo> sourceMetaInfo, const std::vector<const ColumnDescriptor *> columnDescriptors, const RowDataProvider &sourceDataProvider, const size_t indexOffFragmentOffsetColumn, const Data_Namespace::MemoryLevel memoryLevel, UpdelRoll &updelRoll, Executor *executor)¶
-
void
updateColumn(const Catalog_Namespace::Catalog *catalog, const TableDescriptor *td, const ColumnDescriptor *cd, const int fragment_id, const std::vector<uint64_t> &frag_offsets, const ScalarTargetValue &rhs_value, const SQLTypeInfo &rhs_type, const Data_Namespace::MemoryLevel memory_level, UpdelRoll &updel_roll)¶
-
void
updateMetadata(const Catalog_Namespace::Catalog *catalog, const MetaDataKey &key, UpdelRoll &updel_roll)¶
-
void
compactRows(const Catalog_Namespace::Catalog *catalog, const TableDescriptor *td, const int fragment_id, const std::vector<uint64_t> &frag_offsets, const Data_Namespace::MemoryLevel memory_level, UpdelRoll &updel_roll)¶
-
auto
getChunksForAllColumns(const TableDescriptor *td, const FragmentInfo &fragment, const Data_Namespace::MemoryLevel memory_level)¶
-
void
dropColumns(const std::vector<int> &columnIds)¶
-
bool
hasDeletedRows(const int delete_column_id)¶ Iterates through chunk metadata to return whether any rows have been deleted.
-
void
resetSizesFromFragments()¶ Resets the fragmenter’s size related metadata using the internal fragment info vector. This is typically done after operations, such as vacuuming, which can change fragment sizes.
Protected Functions
-
FragmentInfo *
createNewFragment(const Data_Namespace::MemoryLevel memory_level = Data_Namespace::DISK_LEVEL)¶ creates new fragment, calling createChunk() method of BufferMgr to make a new chunk for each column of the table.
Also unpins the chunks of the previous insert buffer
-
void
deleteFragments(const std::vector<int> &dropFragIds)¶
-
void
conditionallyInstantiateFileMgrWithParams()¶
-
void
getChunkMetadata()¶
-
void
lockInsertCheckpointData(const InsertData &insertDataStruct)¶
-
void
insertDataImpl(InsertData &insert_data)¶
-
void
insertChunksImpl(const InsertChunks &insert_chunk)¶
-
void
addColumns(const InsertData &insertDataStruct)¶
-
InsertOrderFragmenter(const InsertOrderFragmenter&)¶
-
InsertOrderFragmenter &
operator=(const InsertOrderFragmenter&)¶
-
FragmentInfo &
getFragmentInfoFromId(const int fragment_id)¶
Protected Attributes
-
std::vector<int>
chunkKeyPrefix_¶
-
std::deque<std::unique_ptr<FragmentInfo>>
fragmentInfoVec_¶ data about each fragment stored - id and number of rows
-
const int
physicalTableId_¶
-
const int
shard_¶
-
size_t
maxFragmentRows_¶
-
size_t
pageSize_¶
-
size_t
numTuples_¶
-
int
maxFragmentId_¶
-
size_t
maxChunkSize_¶
-
size_t
maxRows_¶
-
std::string
fragmenterType_¶
-
mapd_shared_mutex
fragmentInfoMutex_¶
-
mapd_shared_mutex
insertMutex_¶
-
Data_Namespace::MemoryLevel
defaultInsertLevel_¶
-
const bool
uses_foreign_storage_¶
-
bool
hasMaterializedRowId_¶
-
int
rowIdColId_¶
-
std::unordered_map<int, size_t>
varLenColInfo_¶
-
std::shared_ptr<std::mutex>
mutex_access_inmem_states¶
-
std::mutex
temp_mutex_¶
Private Functions
-
bool
isAddingNewColumns(const InsertData &insert_data) const¶
-
void
dropFragmentsToSizeNoInsertLock(const size_t max_rows)¶
-
void
setLastFragmentVarLenColumnSizes()¶
-
void
insertChunksIntoFragment(const InsertChunks &insert_chunks, const std::optional<int> delete_column_id, FragmentInfo *current_fragment, const size_t num_rows_to_insert, size_t &num_rows_inserted, size_t &num_rows_left, std::vector<size_t> &valid_row_indices, const size_t start_fragment)¶
-