Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,11 @@ private TablePartitionValues getPartitionValues() {
private TablePartitionValues loadPartitionValues(MaxComputeSchemaCacheValue schemaCacheValue) {
List<String> partitionSpecs = schemaCacheValue.getPartitionSpecs();
List<Type> partitionTypes = schemaCacheValue.getPartitionTypes();
List<String> partitionColumnNames = schemaCacheValue.getPartitionColumnNames();
TablePartitionValues partitionValues = new TablePartitionValues();
partitionValues.addPartitions(partitionSpecs,
partitionSpecs.stream()
.map(p -> parsePartitionValues(getPartitionColumns().stream().map(c -> c.getName()).collect(
Collectors.toList()), p))
.map(p -> parsePartitionValues(partitionColumnNames, p))
.collect(Collectors.toList()),
partitionTypes);
return partitionValues;
Expand Down Expand Up @@ -187,9 +187,21 @@ public Optional<SchemaCacheValue> initSchema() {
}

List<com.aliyun.odps.Column> partitionColumns = odpsTable.getSchema().getPartitionColumns();
List<String> partitionColumnNames = new ArrayList<>(partitionColumns.size());
List<Type> partitionTypes = new ArrayList<>(partitionColumns.size());

for (com.aliyun.odps.Column partitionColumn : partitionColumns) {
columnNameToOdpsColumn.put(partitionColumn.getName(), partitionColumn);
// sort partition columns to align partitionTypes and partitionName.
List<Column> partitionDorisColumns = new ArrayList<>();
for (com.aliyun.odps.Column partColumn : partitionColumns) {
Type partitionType = mcTypeToDorisType(partColumn.getTypeInfo());
Column dorisCol = new Column(partColumn.getName(), partitionType, true, null,
true, partColumn.getComment(), true, -1);

columnNameToOdpsColumn.put(partColumn.getName(), partColumn);
partitionColumnNames.add(partColumn.getName());
partitionDorisColumns.add(dorisCol);
partitionTypes.add(partitionType);
schema.add(dorisCol);
}

List<String> partitionSpecs;
Expand All @@ -200,22 +212,9 @@ public Optional<SchemaCacheValue> initSchema() {
} else {
partitionSpecs = ImmutableList.of();
}
// sort partition columns to align partitionTypes and partitionName.
Map<String, Column> partitionNameToColumns = Maps.newHashMap();
for (com.aliyun.odps.Column partColumn : partitionColumns) {
Column dorisCol = new Column(partColumn.getName(),
mcTypeToDorisType(partColumn.getTypeInfo()), true, null,
true, partColumn.getComment(), true, -1);
partitionNameToColumns.put(dorisCol.getName(), dorisCol);
}
List<Type> partitionTypes = partitionNameToColumns.values()
.stream()
.map(Column::getType)
.collect(Collectors.toList());

schema.addAll(partitionNameToColumns.values());
return Optional.of(new MaxComputeSchemaCacheValue(schema, odpsTable, partitionSpecs, partitionNameToColumns,
partitionTypes));
return Optional.of(new MaxComputeSchemaCacheValue(schema, odpsTable, partitionColumnNames,
partitionSpecs, partitionDorisColumns, partitionTypes));
}

private Type mcTypeToDorisType(TypeInfo typeInfo) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,36 +22,35 @@
import org.apache.doris.datasource.SchemaCacheValue;

import com.aliyun.odps.Table;
import com.google.common.collect.Lists;
import lombok.Getter;
import lombok.Setter;

import java.util.List;
import java.util.Map;
import java.util.Set;

@Getter
@Setter
public class MaxComputeSchemaCacheValue extends SchemaCacheValue {
private Table odpsTable;
private List<String> partitionColumnNames;
private List<String> partitionSpecs;
private Map<String, Column> partitionNameToColumns;
private List<Column> partitionColumns;
private List<Type> partitionTypes;

public MaxComputeSchemaCacheValue(List<Column> schema, Table odpsTable, List<String> partitionSpecs,
Map<String, Column> partitionNameToColumns, List<Type> partitionTypes) {
public MaxComputeSchemaCacheValue(List<Column> schema, Table odpsTable, List<String> partitionColumnNames,
List<String> partitionSpecs, List<Column> partitionColumns, List<Type> partitionTypes) {
super(schema);
this.odpsTable = odpsTable;
this.partitionSpecs = partitionSpecs;
this.partitionNameToColumns = partitionNameToColumns;
this.partitionColumnNames = partitionColumnNames;
this.partitionColumns = partitionColumns;
this.partitionTypes = partitionTypes;
}

public Set<String> getPartitionColNames() {
return partitionNameToColumns.keySet();
public List<Column> getPartitionColumns() {
return partitionColumns;
}

public List<Column> getPartitionColumns() {
return Lists.newArrayList(partitionNameToColumns.values());
public List<String> getPartitionColumnNames() {
return partitionColumnNames;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,30 @@ true 9 900 9000
1002 Sample data 2 2023-08-02
1005 Sample data 5 2023-08-05

-- !q8 --
mc_bigint bigint Yes true \N
mc_string text Yes true \N
dt text Yes true \N

-- !replay_q6 --
1003 Sample data 3 2023-08-03
1004 Sample data 4 2023-08-04
1005 Sample data 5 2023-08-05

-- !multi_partition_q1 --
city text Yes true \N
gender boolean Yes true \N
mnt smallint Yes true \N
order_rate float Yes true \N
amount decimal(24,9) Yes true \N
cut_date date Yes true \N
create_time datetime(3) Yes true \N
finished_time datetime(6) Yes true \N
yy text Yes true \N
mm text Yes true \N
dd text Yes true \N
pt bigint Yes true \N

-- !multi_partition_q1 --
yy=2023/mm=08/dd=01/pt=1
yy=2023/mm=08/dd=02/pt=2
Expand Down Expand Up @@ -129,8 +148,6 @@ yy=2023/mm=08/dd=05/pt=5
-- !multi_partition_q8 --
6

-- !multi_partition_q9 --

-- !multi_partition_q10 --
3 2023 08 03
3 2023 08 03
Expand Down Expand Up @@ -187,3 +204,47 @@ dt=2023-08-03
dt=2023-08-04
dt=2023-08-05

-- !part2_q1 --
1 2024-01-01 Y
2 2024-04-04 N
3 2027-01-09 Y
4 2024-01-01 N

-- !part2_q2 --
1 2024-01-01 Y

-- !part2_q3 --
1 2024-01-01 Y
3 2027-01-09 Y

-- !part2_q4 --
1 2024-01-01 Y
2 2024-04-04 N
4 2024-01-01 N

-- !part2_q5 --
2024-01-01
2024-01-01
2024-04-04

-- !part2_q6 --
2024-01-01 N 4
2024-01-01 Y 1
2024-04-04 N 2

-- !part2_q7 --
N 2024-01-01 2024-01-01 4 4 4
N 2024-04-04 2024-04-04 2 2 2
Y 2024-01-01 2024-01-01 1 1 1
Y 2027-01-09 2027-01-09 3 3 3

-- !part2_q8 --
N
N
Y

-- !part2_q9 --
id text Yes true \N
ds text Yes true \N
audit_flag text Yes true \N

Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,17 @@
INSERT INTO `other_db_mc_parts` PARTITION (dt='e') VALUES
(1005, 'Sample data 5');



CREATE TABLE `mc_parts2` (
`id` STRING COMMENT 'Id'
)
PARTITIONED BY (
`ds` STRING ,
`audit_flag` STRING
);
INSERT INTO TABLE `mc_parts2` PARTITION (`ds`='2024-01-01', `audit_flag`='Y') values ('1');
INSERT INTO TABLE `mc_parts2` PARTITION (`ds`='2024-04-04', `audit_flag`='N') values ('2');
INSERT INTO TABLE `mc_parts2` PARTITION (`ds`='2027-01-09', `audit_flag`='Y') values ('3');
INSERT INTO TABLE `mc_parts2` PARTITION (`ds`='2024-01-01', `audit_flag`='N') values ('4');
*/
suite("test_external_catalog_maxcompute", "p2,external,maxcompute,external_remote,external_remote_maxcompute") {
String enabled = context.config.otherConfigs.get("enableMaxComputeTest")
Expand Down Expand Up @@ -353,6 +362,7 @@ suite("test_external_catalog_maxcompute", "p2,external,maxcompute,external_remot
order_qt_q5 """ select * from mc_parts where dt > '2023-08-03' order by mc_bigint """
order_qt_q6 """ select * from mc_parts where dt > '2023-08-03' and mc_bigint > 1002 """
order_qt_q7 """ select * from mc_parts where dt < '2023-08-03' or (mc_bigint > 1003 and dt > '2023-08-04') order by mc_bigint, dt; """
qt_q8 """ desc mc_parts """
}

sql """ switch `${mc_catalog_name}`; """
Expand Down Expand Up @@ -380,6 +390,8 @@ suite("test_external_catalog_maxcompute", "p2,external,maxcompute,external_remot
sql """ refresh catalog ${mc_catalog_name} """
sql """ switch `${mc_catalog_name}`; """
sql """ use `${mc_db}`; """

qt_multi_partition_q1 """ desc multi_partitions """
order_qt_multi_partition_q1 """ show partitions from multi_partitions; """
order_qt_multi_partition_q2 """ select pt, create_time, yy, mm, dd from multi_partitions where pt>-1 and yy > '' and mm > '' and dd >'' order by pt , dd; """
order_qt_multi_partition_q3 """ select sum(pt), create_time, yy, mm, dd from multi_partitions where yy > '' and mm > '' and dd >'' group by create_time, yy, mm, dd order by create_time,dd ; """
Expand Down Expand Up @@ -425,5 +437,15 @@ suite("test_external_catalog_maxcompute", "p2,external,maxcompute,external_remot
order_qt_show_partition """ show partitions from mc_parts """


order_qt_part2_q1 """ select * from mc_parts2 """
order_qt_part2_q2 """ SELECT * FROM `mc_parts2` WHERE `ds` = '2024-01-01' AND `audit_flag` = 'Y'; """
order_qt_part2_q3 """ SELECT * FROM `mc_parts2` WHERE `audit_flag` = 'Y';"""
order_qt_part2_q4 """ SELECT * FROM `mc_parts2` WHERE `ds` BETWEEN '2024-01-01' AND '2027-01-01';"""
order_qt_part2_q5 """ SELECT ds FROM `mc_parts2` WHERE `ds` != '2027-01-09';"""
order_qt_part2_q6 """ SELECT ds,audit_flag,id FROM `mc_parts2` WHERE `ds` != '2027-01-09';"""
order_qt_part2_q7 """ SELECT audit_flag,ds,ds,id,id,id FROM `mc_parts2`;"""
order_qt_part2_q8 """ SELECT audit_flag FROM `mc_parts2` WHERE `ds` != '2027-01-09';"""
qt_part2_q9 """ desc mc_parts2 """

}
}
Loading