Skip to content

Commit 7e4a123

Browse files
committed
fixed
1 parent 171f7fb commit 7e4a123

File tree

3 files changed

+42
-7
lines changed

3 files changed

+42
-7
lines changed

catalogs/catalog-jdbc-doris/src/main/java/org/apache/gravitino/catalog/doris/operation/DorisTableOperations.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,9 @@ protected String generateCreateTableSql(
134134
}
135135

136136
if (distribution.number() != 0) {
137-
sqlBuilder.append(" BUCKETS ").append(distribution.number());
137+
sqlBuilder
138+
.append(" BUCKETS ")
139+
.append(DorisUtils.revertDistributionBucket(distribution.number()));
138140
}
139141

140142
properties = appendNecessaryProperties(properties);

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

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public final class DorisUtils {
4848

4949
private static final Pattern DISTRIBUTION_INFO_PATTERN =
5050
Pattern.compile(
51-
"DISTRIBUTED BY\\s+(HASH|RANDOM)\\s*(\\(([^)]+)\\))?\\s*(BUCKETS\\s+(\\d+))?");
51+
"DISTRIBUTED BY\\s+(HASH|RANDOM)\\s*(\\(([^)]+)\\))?\\s*(BUCKETS\\s+(\\d+|AUTO))?");
5252

5353
private static final String LIST_PARTITION = "LIST";
5454
private static final String RANGE_PARTITION = "RANGE";
@@ -202,11 +202,8 @@ public static Distribution extractDistributionInfoFromSql(String createTableSql)
202202
.map(f -> f.substring(1, f.length() - 1))
203203
.toArray(String[]::new);
204204

205-
// Default bucket number is 1.
206-
int bucketNum = 1;
207-
if (matcher.find(5)) {
208-
bucketNum = Integer.valueOf(matcher.group(5));
209-
}
205+
// Default bucket number is 1. auto is -1.
206+
int bucketNum = getBucketNum(matcher);
210207

211208
return new DistributionImpl.Builder()
212209
.withStrategy(Strategy.getByName(distributionType))
@@ -220,4 +217,26 @@ public static Distribution extractDistributionInfoFromSql(String createTableSql)
220217

221218
throw new RuntimeException("Failed to extract distribution info in sql:" + createTableSql);
222219
}
220+
221+
private static int getBucketNum(Matcher matcher) {
222+
int bucketNum = 1;
223+
if (matcher.find(5)) {
224+
String bucketValue = matcher.group(5);
225+
if (bucketValue.trim().toUpperCase().equals("AUTO")) {
226+
//Use -1 to indicate auto bucket.
227+
bucketNum = -1;
228+
} else {
229+
bucketNum = Integer.valueOf(matcher.group(5));
230+
}
231+
}
232+
return bucketNum;
233+
}
234+
235+
public static String revertDistributionBucket(int number) {
236+
if (number == -1) {
237+
return "AUTO";
238+
} else {
239+
return String.valueOf(number);
240+
}
241+
}
223242
}

catalogs/catalog-jdbc-doris/src/test/java/org/apache/gravitino/catalog/doris/utils/TestDorisUtils.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import java.util.HashMap;
2727
import java.util.Map;
2828
import java.util.Optional;
29+
import org.apache.gravitino.rel.expressions.distributions.Distribution;
2930
import org.apache.gravitino.rel.expressions.literals.Literal;
3031
import org.apache.gravitino.rel.expressions.literals.Literals;
3132
import org.apache.gravitino.rel.expressions.transforms.Transform;
@@ -171,4 +172,17 @@ public void testGeneratePartitionSqlFragment() {
171172
partitionSqlFragment = DorisUtils.generatePartitionSqlFragment(partition);
172173
assertEquals("PARTITION `p7` VALUES IN ((\"1\",\"2\"),(\"3\",\"4\"))", partitionSqlFragment);
173174
}
175+
176+
@Test
177+
public void testDistributedInfoPattern() {
178+
String createTableSql =
179+
"CREATE TABLE `testTable` (\n`col1` date NOT NULL\n) ENGINE=OLAP\n PARTITION BY RANGE(`col1`)\n()\n DISTRIBUTED BY HASH(`col1`) BUCKETS 2";
180+
Distribution distribution = DorisUtils.extractDistributionInfoFromSql(createTableSql);
181+
assertEquals(distribution.number(), 2);
182+
183+
String createTableSqlWithAuto =
184+
"CREATE TABLE `testTable` (\n`col1` date NOT NULL\n) ENGINE=OLAP\n PARTITION BY RANGE(`col1`)\n()\n DISTRIBUTED BY HASH(`col1`) BUCKETS AUTO";
185+
Distribution distribution2 = DorisUtils.extractDistributionInfoFromSql(createTableSqlWithAuto);
186+
assertEquals(distribution2.number(), -1);
187+
}
174188
}

0 commit comments

Comments
 (0)