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 @@ -59,6 +59,7 @@
import org.apache.paimon.types.MapType;
import org.apache.paimon.types.RowType;
import org.apache.paimon.types.VarCharType;
import org.apache.paimon.utils.DateTimeUtils;
import org.apache.paimon.utils.InstantiationUtil;
import org.apache.paimon.utils.Pair;
import org.apache.paimon.utils.Projection;
Expand Down Expand Up @@ -116,12 +117,23 @@ public static PaimonPartitionInfo generatePartitionInfo(List<Column> partitionCo
Map<String, PartitionItem> nameToPartitionItem = Maps.newHashMap();
Map<String, Partition> nameToPartition = Maps.newHashMap();
PaimonPartitionInfo partitionInfo = new PaimonPartitionInfo(nameToPartitionItem, nameToPartition);
List<Type> types = partitionColumns.stream()
.map(Column::getType)
.collect(Collectors.toList());
Map<String, Type> columnNameToType = partitionColumns.stream()
.collect(Collectors.toMap(Column::getName, Column::getType));

for (Partition partition : paimonPartitions) {
Map<String, String> spec = partition.spec();
StringBuilder sb = new StringBuilder();
for (Map.Entry<String, String> entry : spec.entrySet()) {
sb.append(entry.getKey()).append("=").append(entry.getValue()).append("/");
sb.append(entry.getKey()).append("=");
// Paimon stores DATE type as days since 1970-01-01 (epoch), so we convert the integer to a date string.
if (columnNameToType.getOrDefault(entry.getKey(), Type.NULL).isDateV2()) {
sb.append(DateTimeUtils.formatDate(Integer.parseInt(entry.getValue()))).append("/");
} else {
sb.append(entry.getValue()).append("/");
}
}
if (sb.length() > 0) {
sb.deleteCharAt(sb.length() - 1);
Expand All @@ -131,7 +143,7 @@ public static PaimonPartitionInfo generatePartitionInfo(List<Column> partitionCo
try {
// partition values return by paimon api, may have problem,
// to avoid affecting the query, we catch exceptions here
nameToPartitionItem.put(partitionName, toListPartitionItem(partitionName, partitionColumns));
nameToPartitionItem.put(partitionName, toListPartitionItem(partitionName, types));
} catch (Exception e) {
LOG.warn("toListPartitionItem failed, partitionColumns: {}, partitionValues: {}",
partitionColumns, partition.spec(), e);
Expand All @@ -140,11 +152,8 @@ public static PaimonPartitionInfo generatePartitionInfo(List<Column> partitionCo
return partitionInfo;
}

public static ListPartitionItem toListPartitionItem(String partitionName, List<Column> partitionColumns)
public static ListPartitionItem toListPartitionItem(String partitionName, List<Type> types)
throws AnalysisException {
List<Type> types = partitionColumns.stream()
.map(Column::getType)
.collect(Collectors.toList());
// Partition name will be in format: nation=cn/city=beijing
// parse it to get values "cn" and "beijing"
List<String> partitionValues = HiveUtil.toPartitionValues(partitionName);
Expand Down
3 changes: 3 additions & 0 deletions regression-test/data/mtmv_p0/test_paimon_mtmv.out
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,9 @@ true
-- !date_partition_base_table --
1 2020-01-01

-- !date_type_partition --
1 2020-01-01

-- !date_partition --
1 2020-01-01

14 changes: 10 additions & 4 deletions regression-test/suites/mtmv_p0/test_paimon_mtmv.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -268,8 +268,7 @@ suite("test_paimon_mtmv", "p0,external,mtmv,external_docker,external_docker_dori

// date type will has problem
order_qt_date_partition_base_table "SELECT * FROM ${catalogName}.`test_paimon_spark`.date_partition"
test {
sql """
sql """
CREATE MATERIALIZED VIEW ${mvName}
BUILD DEFERRED REFRESH AUTO ON MANUAL
partition by (`create_date`)
Expand All @@ -278,8 +277,15 @@ suite("test_paimon_mtmv", "p0,external,mtmv,external_docker,external_docker_dori
AS
SELECT * FROM ${catalogName}.`test_paimon_spark`.date_partition;
"""
exception "Unable to find a suitable base table"
}
sql """
REFRESH MATERIALIZED VIEW ${mvName} auto;
"""
waitingMTMVTaskFinishedByMvName(mvName)
def showPaimonDateTypePartitionsResult = sql """show partitions from ${mvName}"""
logger.info("showPaimonDateTypePartitionsResult: " + showPaimonDateTypePartitionsResult.toString())
assertTrue(showPaimonDateTypePartitionsResult.toString().contains("p_20200101"))
order_qt_date_type_partition "select * FROM ${mvName}"
sql """drop materialized view if exists ${mvName};"""

sql """
CREATE MATERIALIZED VIEW ${mvName}
Expand Down