Extensions
Reading
Reading files from S3 is now as simple as:  
```sql
SELECT *
FROM 's3://bucket/file.extension';
```  
#### Partial Reading {#docs:extensions:httpfs:s3api::partial-reading}  
The `httpfs` extension supports [partial reading](#docs:extensions:httpfs:https::partial-reading) from S3 buckets.  
#### Reading Multiple Files {#docs:extensions:httpfs:s3api::reading-multiple-files}  
Multiple files are also possible, for example:  
```sql
SELECT *
FROM read_parquet([
's3://bucket/file1.parquet',
's3://bucket/file2.parquet'
]);
```  
#### Globbing {#docs:extensions:httpfs:s3api::globbing}  
File [globbing](#docs:sql:functions:pattern_matching::globbing) is implemented using the ListObjectV2 API call and allows to use filesystem-like glob patterns to match multiple files, for example:  
```sql
SELECT *
FROM read_parquet('s3://bucket/*.parquet');
```  
This query matches all files in the root of the bucket with the [Parquet extension](#docs:data:parquet:overview).  
Several features for matching are supported, such as `*` to match any number of any character, `?` for any single character or `[0-9]` for a single character in a range of characters:  
```sql
SELECT count(*) FROM read_parquet('s3://bucket/folder*/100?/t[0-9].parquet');
```  
A useful feature when using globs is the `filename` option, which adds a column named `filename` that encodes the file that a particular row originated from:  
```sql
SELECT *
FROM read_parquet('s3://bucket/*.parquet', filename = true);
```  
could for example result in:  
<div class="narrow_table"></div>  
| column_a | column_b | filename |
|:---|:---|:---|
| 1 | examplevalue1 | s3://bucket/file1.parquet |
| 2 | examplevalue1 | s3://bucket/file2.parquet |  
#### Hive Partitioning {#docs:extensions:httpfs:s3api::hive-partitioning}  
DuckDB also offers support for the [Hive partitioning scheme](#docs:data:partitioning:hive_partitioning), which is available when using HTTP(S) and S3 endpoints.