**Use case**

This works:

```
SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.csv' FORMAT CSV
```

But I want this:

```
SELECT * FROM hits_100m_obfuscated INTO OUTFILE 'hits.csv'
```

**Describe the solution you'd like**

Every format can register file extension(s) in format factory.
If format is not specified explicitly, we can detect it automatically by file extension.
It should work for compressed files `hits.csv.gz` as well.

The following extensions should be supported at least:
csv, tsv, parquet, orc, native, json, ndjson, xml, md, avro

**Addition details**

Let's also support omitting the format argument for `file`, `url`, `s3`, `hdfs` table functions. 
}
    Pos before_values = pos;
    String format_str;
    
    if (s_from_infile.ignore(pos, expected))
    {
        
        if (!infile_name_p.parse(pos, infile, expected))
            return false;
        
        if (s_compression.ignore(pos, expected))
        {
            
            ParserStringLiteral compression_p;
            if (!compression_p.parse(pos, compression, expected))
                return false;
        }
        
        if (!s_format.ignore(pos, expected) || !name_p.parse(pos, format, expected))
            return false;
        tryGetIdentifierNameInto(format, format_str);
    }
    else if (s_values.ignore(pos, expected))
    {
        
        data = pos->begin;
        format_str = "Values";
    }
    else if (s_format.ignore(pos, expected))
    {