```
touch /tmp/aaa.csv

CREATE TABLE log (A String) ENGINE= FileLog('/tmp/aaa.csv', 'CSV');
DB::Exception: The absolute data path should be inside `user_files_path`(/var/lib/clickhouse/user_files/). (BAD_ARGUMENTS)


CREATE TABLE log (A String) ENGINE= FileLog('/tmp/aaa.csv', 'CSV');
DB::Exception: Metadata files already exist by path: /var/lib/clickhouse/.filelog_storage_metadata/default/log, remove them manually if it is intended. (TABLE_METADATA_ALREADY_EXISTS)
```
, WithContext(context_->getGlobalContext())
    , filelog_settings(std::move(settings))
    , path(path_)
    , format_name(format_name_)
    , log(&Poco::Logger::get("StorageFileLog (" + table_id_.table_name + ")"))
    , milliseconds_to_wait(filelog_settings->poll_directory_watch_events_backoff_init.totalMilliseconds())
{
    StorageInMemoryMetadata storage_metadata;
    storage_metadata.setColumns(columns_);
    storage_metadata.setComment(comment);
    setInMemoryMetadata(storage_metadata);
    try
    {
        loadMetaFiles(attach);
        loadFiles();
        assert(file_infos.file_names.size() == file_infos.meta_by_inode.size());
        assert(file_infos.file_names.size() == file_infos.context_by_name.size());
        if (path_is_directory)
            directory_watch = std::make_unique<FileLogDirectoryWatcher>(root_data_path, *this, getContext());
        auto thread = getContext()->getSchedulePool().createTask(log->name(), [this] { threadFunc(); });
        task = std::make_shared<TaskContext>(std::move(thread));
    }
    catch (...)
    {
        if (!attach)
            throw;
        tryLogCurrentException(__PRETTY_FUNCTION__);
    }
}
void StorageFileLog::loadMetaFiles(bool attach)