If they are defined, they can override table-level settings.
transaction.rollbackPartsToTemporaryState();
                part->is_temp = true;
                part->renameTo(temporary_part_relative_path, false);
                
                
                ++loop_counter;
                if (loop_counter == max_iterations)
                {
                    part->is_duplicate = true; 
                    throw Exception("Too many transaction retries - it may indicate an error", ErrorCodes::DUPLICATE_DATA_PART);
                }
                continue;
            }
            else if (multi_code == Coordination::Error::ZNODEEXISTS && failed_op_path == quorum_info.status_path)
            {
                storage.unlockSharedData(*part);
                transaction.rollback();
                throw Exception("Another quorum insert has been already started", ErrorCodes::UNSATISFIED_QUORUM_FOR_PREVIOUS_WRITE);
            }
            else
            {
                storage.unlockSharedData(*part);
                
                transaction.rollback();
                throw Exception("Unexpected logical error while adding block " + toString(block_number) + " with ID '" + block_id + "': "
                                + Coordination::errorMessage(multi_code) + ", path " + failed_op_path,
                                ErrorCodes::UNEXPECTED_ZOOKEEPER_ERROR);
            }
        }
        else if (Coordination::isHardwareError(multi_code))