Commit 6acdb30
[ESQL] Introduce pluggable external datasource framework (#141678)
Enable ESQL to query data outside Elasticsearch indices via the EXTERNAL
command. The framework decouples data location (storage) from data format,
allowing queries over S3, HTTP, local files, and Iceberg data lakes in
formats such as CSV and Parquet.
- StorageProvider/StorageObject SPIs for protocol-agnostic byte access;
implementations for HTTP, S3, local filesystem with range reads
- FormatReader SPI for parsing bytes into ESQL Pages; CSV and Parquet
implementations with schema inference and column projection
- DataSourcePlugin SPI and DataSourceModule for plugin discovery
- Extracted plugins: esql-datasource-http, esql-datasource-csv,
esql-datasource-s3, esql-datasource-parquet, esql-datasource-iceberg
- ExternalSourceResolver, OperatorFactoryRegistry,
AsyncExternalSourceOperatorFactory for resolution and execution
- Iceberg TableCatalog with filter pushdown; generic ExternalRelation/
ExternalSourceExec replacing Iceberg-specific plan nodes
- GlobExpander, GlobMatcher, FileSet for wildcard file discovery
- StorageProviderRegistry per-query config; WITH-clause propagation
end-to-end
Developed using AI-assisted tooling
Co-authored-by: Bogdan Pintea <bogdan.pintea@elastic.co>1 parent ce37e1a commit 6acdb30
228 files changed
Lines changed: 30005 additions & 3609 deletions
File tree
- build-tools-internal
- gradle
- test
- fixtures/s3-fixture/src/main/java/fixture/s3
- framework/src
- main/java/org/elasticsearch/test/fixture
- test/java/org/elasticsearch/http
- x-pack/plugin
- esql-datasource-csv
- licenses
- qa
- src/javaRestTest
- java/org/elasticsearch/xpack/esql/qa/csv
- resources/iceberg-fixtures/standalone
- src
- main
- java/org/elasticsearch/xpack/esql/datasource/csv
- resources/META-INF/services
- test/java/org/elasticsearch/xpack/esql/datasource/csv
- esql-datasource-http
- src
- main
- java/org/elasticsearch/xpack/esql/datasource/http
- local
- plugin-metadata
- resources/META-INF/services
- test/java/org/elasticsearch/xpack/esql/datasource/http
- local
- esql-datasource-iceberg
- licenses
- qa
- src/javaRestTest
- java/org/elasticsearch/xpack/esql/qa/iceberg
- resources
- iceberg-fixtures
- employees
- data
- metadata
- standalone
- src
- main
- java/org/elasticsearch/xpack/esql/datasource/iceberg
- plugin-metadata
- resources/META-INF/services
- test/java/org/elasticsearch/xpack/esql/datasource/iceberg
- esql-datasource-parquet
- licenses
- qa
- src/javaRestTest
- java/org/elasticsearch/xpack/esql/qa/parquet
- resources/iceberg-fixtures
- multifile
- standalone
- src
- main
- java/org/elasticsearch/xpack/esql/datasource/parquet
- resources/META-INF/services
- test/java/org/elasticsearch/xpack/esql/datasource/parquet
- esql-datasource-s3
- licenses
- src/main
- java/org/elasticsearch/xpack/esql/datasource/s3
- plugin-metadata
- resources/META-INF/services
- esql
- arrow/src
- main/java/org/elasticsearch/xpack/esql/arrow
- test/java/org/elasticsearch/xpack/esql/arrow
- qa
- server
- mixed-cluster
- multi-clusters
- multi-node
- single-node
- src/main/java/org/elasticsearch/xpack/esql
- datasources
- qa/rest
- testFixtures/src/main/resources
- src
- main
- antlr
- lexer
- java/org/elasticsearch/xpack/esql
- analysis
- datasources
- spi
- execution
- optimizer
- rules/physical/local
- parser
- planner
- mapper
- plan
- logical
- physical
- plugin
- session
- telemetry
- plugin-metadata
- test
- java/org/elasticsearch/xpack/esql
- analysis
- approximation
- datasources
- spi
- optimizer
- parser
- planner
- plan/logical
- telemetry
- tree
- resources
- iceberg-fixtures
- employees
- data
- metadata
- standalone
- org/elasticsearch/xpack/esql/iceberg/testdata
- src/yamlRestTest/resources/rest-api-spec/test/esql
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
24 | 24 | | |
25 | 25 | | |
26 | 26 | | |
| 27 | + | |
27 | 28 | | |
28 | 29 | | |
29 | 30 | | |
| |||
Large diffs are not rendered by default.
Lines changed: 10 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
118 | 118 | | |
119 | 119 | | |
120 | 120 | | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
121 | 124 | | |
122 | 125 | | |
123 | 126 | | |
| |||
181 | 184 | | |
182 | 185 | | |
183 | 186 | | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
184 | 190 | | |
185 | 191 | | |
186 | 192 | | |
| |||
379 | 385 | | |
380 | 386 | | |
381 | 387 | | |
382 | | - | |
383 | | - | |
384 | | - | |
385 | | - | |
| 388 | + | |
| 389 | + | |
386 | 390 | | |
387 | 391 | | |
388 | 392 | | |
389 | 393 | | |
390 | 394 | | |
391 | | - | |
| 395 | + | |
| 396 | + | |
392 | 397 | | |
393 | 398 | | |
394 | 399 | | |
| |||
Lines changed: 30 additions & 5 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
18 | | - | |
| 18 | + | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
22 | 23 | | |
23 | 24 | | |
24 | | - | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
25 | 30 | | |
26 | 31 | | |
27 | 32 | | |
| |||
31 | 36 | | |
32 | 37 | | |
33 | 38 | | |
34 | | - | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
35 | 43 | | |
36 | 44 | | |
37 | 45 | | |
38 | 46 | | |
39 | 47 | | |
40 | 48 | | |
41 | 49 | | |
42 | | - | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
43 | 68 | | |
44 | 69 | | |
45 | | - | |
| 70 | + | |
46 | 71 | | |
47 | 72 | | |
48 | 73 | | |
| |||
Lines changed: 3 additions & 2 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
43 | 43 | | |
44 | 44 | | |
45 | 45 | | |
46 | | - | |
47 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
48 | 49 | | |
49 | 50 | | |
50 | 51 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
Lines changed: 20 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
Lines changed: 74 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
0 commit comments