Commit a2170d4
stanyao
[SPARK-55978][SQL] Add TABLESAMPLE SYSTEM block sampling with DSv2 pushdown
This PR adds support for ANSI SQL `TABLESAMPLE SYSTEM` (block-level sampling)
alongside the existing `TABLESAMPLE BERNOULLI` (row-level sampling).
**SQL grammar**: Extended `TABLESAMPLE` to accept an optional `SYSTEM` or
`BERNOULLI` qualifier before the sample method. Added both as non-reserved
keywords. `TABLESAMPLE SYSTEM` only supports `PERCENT` sampling and does
not support `REPEATABLE`.
**Logical plan**: Introduced `SampleMethod` sealed trait (`Bernoulli`/`System`)
and added it to the `Sample` node. Default is `Bernoulli` for backward
compatibility.
**DSv2 pushdown**: Added `SampleMethod` Java enum and extended
`SupportsPushDownTableSample.pushTableSample()` with a new overload.
Sources that don't override the new method reject SYSTEM sampling by default.
SYSTEM pushdown is restricted to direct table scans via `PhysicalOperation`.
**Physical planning**: SYSTEM samples that aren't pushed down to a DSv2
source raise an `AnalysisException` -- there is no row-level fallback since
block sampling is data-source dependent.1 parent 6bba551 commit a2170d4
24 files changed
Lines changed: 336 additions & 24 deletions
File tree
- common/utils/src/main/resources/error
- docs
- sql
- api/src/main/antlr4/org/apache/spark/sql/catalyst/parser
- catalyst/src
- main
- java/org/apache/spark/sql/connector/read
- scala/org/apache/spark/sql/catalyst
- analysis
- optimizer
- parser
- plans/logical
- test/scala/org/apache/spark/sql/catalyst/parser
- connect
- client/jdbc/src/test/scala/org/apache/spark/sql/connect/client/jdbc
- common/src/test/resources/query-tests/explain-results
- core/src
- main/scala/org/apache/spark/sql/execution
- datasources/v2
- test/resources/sql-tests
- analyzer-results
- results
- nonansi
- hive-thriftserver/src/test/scala/org/apache/spark/sql/hive/thriftserver
Lines changed: 5 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8097 | 8097 | | |
8098 | 8098 | | |
8099 | 8099 | | |
| 8100 | + | |
| 8101 | + | |
| 8102 | + | |
| 8103 | + | |
| 8104 | + | |
8100 | 8105 | | |
8101 | 8106 | | |
8102 | 8107 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
429 | 429 | | |
430 | 430 | | |
431 | 431 | | |
| 432 | + | |
432 | 433 | | |
433 | 434 | | |
434 | 435 | | |
| |||
754 | 755 | | |
755 | 756 | | |
756 | 757 | | |
| 758 | + | |
757 | 759 | | |
758 | 760 | | |
759 | 761 | | |
| |||
Lines changed: 2 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
148 | 148 | | |
149 | 149 | | |
150 | 150 | | |
| 151 | + | |
151 | 152 | | |
152 | 153 | | |
153 | 154 | | |
| |||
472 | 473 | | |
473 | 474 | | |
474 | 475 | | |
| 476 | + | |
475 | 477 | | |
476 | 478 | | |
477 | 479 | | |
| |||
Lines changed: 7 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1053 | 1053 | | |
1054 | 1054 | | |
1055 | 1055 | | |
1056 | | - | |
| 1056 | + | |
| 1057 | + | |
| 1058 | + | |
1057 | 1059 | | |
1058 | 1060 | | |
1059 | 1061 | | |
| |||
1921 | 1923 | | |
1922 | 1924 | | |
1923 | 1925 | | |
| 1926 | + | |
1924 | 1927 | | |
1925 | 1928 | | |
1926 | 1929 | | |
| |||
2187 | 2190 | | |
2188 | 2191 | | |
2189 | 2192 | | |
| 2193 | + | |
2190 | 2194 | | |
2191 | 2195 | | |
2192 | 2196 | | |
| |||
2291 | 2295 | | |
2292 | 2296 | | |
2293 | 2297 | | |
| 2298 | + | |
2294 | 2299 | | |
2295 | 2300 | | |
2296 | 2301 | | |
| |||
2604 | 2609 | | |
2605 | 2610 | | |
2606 | 2611 | | |
| 2612 | + | |
2607 | 2613 | | |
2608 | 2614 | | |
2609 | 2615 | | |
| |||
Lines changed: 33 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 | + | |
Lines changed: 18 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
29 | 29 | | |
30 | 30 | | |
31 | 31 | | |
32 | | - | |
| 32 | + | |
33 | 33 | | |
34 | 34 | | |
35 | 35 | | |
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
39 | 56 | | |
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
530 | 530 | | |
531 | 531 | | |
532 | 532 | | |
533 | | - | |
| 533 | + | |
534 | 534 | | |
535 | 535 | | |
536 | 536 | | |
| |||
Lines changed: 1 addition & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1292 | 1292 | | |
1293 | 1293 | | |
1294 | 1294 | | |
1295 | | - | |
| 1295 | + | |
1296 | 1296 | | |
1297 | 1297 | | |
1298 | 1298 | | |
| |||
Lines changed: 22 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2381 | 2381 | | |
2382 | 2382 | | |
2383 | 2383 | | |
| 2384 | + | |
2384 | 2385 | | |
2385 | 2386 | | |
2386 | 2387 | | |
2387 | 2388 | | |
| 2389 | + | |
| 2390 | + | |
| 2391 | + | |
2388 | 2392 | | |
2389 | 2393 | | |
2390 | 2394 | | |
| |||
2394 | 2398 | | |
2395 | 2399 | | |
2396 | 2400 | | |
2397 | | - | |
| 2401 | + | |
| 2402 | + | |
2398 | 2403 | | |
2399 | 2404 | | |
2400 | 2405 | | |
2401 | 2406 | | |
2402 | 2407 | | |
2403 | 2408 | | |
| 2409 | + | |
| 2410 | + | |
| 2411 | + | |
| 2412 | + | |
2404 | 2413 | | |
2405 | 2414 | | |
2406 | 2415 | | |
2407 | 2416 | | |
| 2417 | + | |
| 2418 | + | |
| 2419 | + | |
2408 | 2420 | | |
2409 | 2421 | | |
2410 | 2422 | | |
| |||
2416 | 2428 | | |
2417 | 2429 | | |
2418 | 2430 | | |
| 2431 | + | |
| 2432 | + | |
| 2433 | + | |
2419 | 2434 | | |
2420 | 2435 | | |
2421 | 2436 | | |
| |||
2424 | 2439 | | |
2425 | 2440 | | |
2426 | 2441 | | |
| 2442 | + | |
| 2443 | + | |
| 2444 | + | |
2427 | 2445 | | |
2428 | 2446 | | |
2429 | 2447 | | |
| |||
2433 | 2451 | | |
2434 | 2452 | | |
2435 | 2453 | | |
| 2454 | + | |
| 2455 | + | |
| 2456 | + | |
2436 | 2457 | | |
2437 | 2458 | | |
2438 | 2459 | | |
| |||
Lines changed: 21 additions & 1 deletion
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1912 | 1912 | | |
1913 | 1913 | | |
1914 | 1914 | | |
| 1915 | + | |
| 1916 | + | |
| 1917 | + | |
| 1918 | + | |
| 1919 | + | |
| 1920 | + | |
| 1921 | + | |
| 1922 | + | |
1915 | 1923 | | |
1916 | 1924 | | |
1917 | 1925 | | |
| |||
1926 | 1934 | | |
1927 | 1935 | | |
1928 | 1936 | | |
| 1937 | + | |
| 1938 | + | |
| 1939 | + | |
| 1940 | + | |
| 1941 | + | |
| 1942 | + | |
| 1943 | + | |
| 1944 | + | |
| 1945 | + | |
| 1946 | + | |
1929 | 1947 | | |
1930 | 1948 | | |
1931 | 1949 | | |
| |||
1939 | 1957 | | |
1940 | 1958 | | |
1941 | 1959 | | |
| 1960 | + | |
1942 | 1961 | | |
1943 | 1962 | | |
1944 | 1963 | | |
1945 | 1964 | | |
1946 | 1965 | | |
1947 | 1966 | | |
1948 | | - | |
| 1967 | + | |
| 1968 | + | |
1949 | 1969 | | |
1950 | 1970 | | |
1951 | 1971 | | |
| |||
0 commit comments