Skip to content

Commit 9c050ac

Browse files
committed
fixed
1 parent a5248bb commit 9c050ac

File tree

5 files changed

+59
-3
lines changed

5 files changed

+59
-3
lines changed

api/src/main/java/org/apache/gravitino/rel/expressions/distributions/Distributions.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,17 @@ public static Distribution of(Strategy strategy, int number, Expression... expre
7474
return new DistributionImpl(strategy, number, expressions);
7575
}
7676

77+
/**
78+
* Create a distribution by the given strategy, the number of buckets is not used.
79+
*
80+
* @param strategy The strategy to use
81+
* @param expressions The expressions to distribute by
82+
* @return The created distribution
83+
*/
84+
public static Distribution auto(Strategy strategy, Expression... expressions) {
85+
return new DistributionImpl(strategy, -1, expressions);
86+
}
87+
7788
/**
7889
* Create a distribution on columns. Like distribute by (a) or (a, b), for complex like
7990
* distributing by (func(a), b) or (func(a), func(b)), please use {@link DistributionImpl.Builder}

catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/utils/DorisUtils.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ public static Distribution extractDistributionInfoFromSql(String createTableSql)
203203
.toArray(String[]::new);
204204

205205
// Default bucket number is 1. auto is -1.
206-
int bucketNum = getBucketNum(matcher);
206+
int bucketNum = extractBucketNum(matcher);
207207

208208
return new DistributionImpl.Builder()
209209
.withStrategy(Strategy.getByName(distributionType))
@@ -218,7 +218,7 @@ public static Distribution extractDistributionInfoFromSql(String createTableSql)
218218
throw new RuntimeException("Failed to extract distribution info in sql:" + createTableSql);
219219
}
220220

221-
private static int getBucketNum(Matcher matcher) {
221+
private static int extractBucketNum(Matcher matcher) {
222222
int bucketNum = 1;
223223
if (matcher.find(5)) {
224224
String bucketValue = matcher.group(5);

catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/integration/test/CatalogDorisIT.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
import org.apache.gravitino.rel.expressions.NamedReference;
6262
import org.apache.gravitino.rel.expressions.distributions.Distribution;
6363
import org.apache.gravitino.rel.expressions.distributions.Distributions;
64+
import org.apache.gravitino.rel.expressions.distributions.Strategy;
6465
import org.apache.gravitino.rel.expressions.literals.Literal;
6566
import org.apache.gravitino.rel.expressions.literals.Literals;
6667
import org.apache.gravitino.rel.expressions.sorts.SortOrder;
@@ -1004,4 +1005,35 @@ void testAllDistribution() {
10041005
tableCatalog.dropTable(tableIdentifier);
10051006
}
10061007
}
1008+
1009+
@Test
1010+
void testAllDistributionWithAuto() {
1011+
Distribution distribution =
1012+
Distributions.auto(Strategy.HASH, NamedReference.field(DORIS_COL_NAME1));
1013+
1014+
String tableName = GravitinoITUtils.genRandomName("test_distribution_table");
1015+
NameIdentifier tableIdentifier = NameIdentifier.of(schemaName, tableName);
1016+
Column[] columns = createColumns();
1017+
Index[] indexes = Indexes.EMPTY_INDEXES;
1018+
Map<String, String> properties = createTableProperties();
1019+
Transform[] partitioning = Transforms.EMPTY_TRANSFORM;
1020+
TableCatalog tableCatalog = catalog.asTableCatalog();
1021+
tableCatalog.createTable(
1022+
tableIdentifier,
1023+
columns,
1024+
table_comment,
1025+
properties,
1026+
partitioning,
1027+
distribution,
1028+
null,
1029+
indexes);
1030+
// load table
1031+
Table loadTable = tableCatalog.loadTable(tableIdentifier);
1032+
1033+
Assertions.assertEquals(distribution.strategy(), loadTable.distribution().strategy());
1034+
Assertions.assertEquals(distribution.number(), loadTable.distribution().number());
1035+
Assertions.assertArrayEquals(
1036+
distribution.expressions(), loadTable.distribution().expressions());
1037+
tableCatalog.dropTable(tableIdentifier);
1038+
}
10071039
}

common/src/main/java/org/apache/gravitino/dto/rel/DistributionDTO.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,8 @@ public DistributionDTO build() {
163163
strategy = strategy == null ? Strategy.HASH : strategy;
164164

165165
Preconditions.checkState(args != null, "expressions cannot be null");
166-
Preconditions.checkState(number >= 0, "bucketNum must be greater than 0");
166+
// Check if the number of buckets is greater than -1, -1 is auto.
167+
Preconditions.checkState(number >= -1, "bucketNum must be greater than -1");
167168
return new DistributionDTO(strategy, number, args);
168169
}
169170
}

docs/table-partitioning-distribution-sort-order-indexes.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,21 @@ Distributions.of(Strategy.HASH, 4, NamedReference.field("score"));
8484
```
8585

8686
</TabItem>
87+
88+
<TabItem value="java" label="Java">
89+
if you want to use auto distribution, you can use the following code, it will set the number is -1.
90+
91+
```java
92+
// Auto distribution with strategy and fields
93+
Distributions.auto(Strategy.HASH, NamedReference.field("score"));
94+
```
95+
</TabItem>
96+
8797
</Tabs>
8898

8999

100+
101+
90102
## Sort ordering
91103

92104
To define a sorted order table, you should use the following three components to construct a valid sorted order table.

0 commit comments

Comments
 (0)